Deklarace (programování)
Deklarace v programovacích jazycích zavádí novou konstantu, datový typ, proměnnou, proceduru nebo funkci a specifikuje jejich jméno (identifikátor), datový typ a další vlastnosti. Informuje překladač o příslušném objektu. V jazycích se silnou typovou kontrolou, jako je Pascal, C nebo Ada je nutné všechny objekty deklarovat dříve než jsou použity v programu[1].
Deklarace
V programovacích jazycích typu BCPL jako je C++ a Java, může být při deklaraci zadána také velikost proměnné. Zadání velikosti proměnně se používá k deklaraci vektorů, polí, nebo matic. V této skupině programovacích jazyků mohou být "pravé" deklarace (oznámení o existenci prvku a jeho vlastnostech, tedy jednoduše řečeno "deklarace") a "definice" (deklarace, které se týkají aktuální implementace, například při deklaraci (definici) funkcí a inicializaci proměnných) vytvářeny nezávisle na sobě.
Deklarace se provádějí především v hlavičkových souborech, které jsou následně vloženy do jiných souborů, které je mohou používat, ale nemají přístup k definicím. Tato struktura umožňuje oddělení rozhraní od implementace. Pokud definovaný typ neodpovídá předchozí deklaraci, překladač ukončí činnost a zahlásí chybu.
V případě proměnných definice přiřazují hodnoty na rezervované místo v paměti během deklarace. V případě funkcí, definice vytvoří její tělo. Zatím co proměnné a funkce mohou být deklarovány mnohokrát za sebou, definovány mohou byt pouze jednou. Dynamické jazyky jako například JavaScript nebo Python umožňují předefinovat funkce.
Deklarace je obvykle používána v případě potřeby přístupu k proměnné, nebo funkci definované v jiném zdrojovém souboru, nebo knihovně.
Příklady deklarace dvou proměnných "priklad1", "priklad2" a jedné funkce "priklad3", které nejsou definicemi. V jazyce C:
extern char priklad1;
extern int priklad2;
void priklad3(void);
Příklad definice proměnných a funkce, opět v jazyce C:
char priklad1;
int priklad2 = 5;
void priklad3(void)
{
int x = 7;
}
Implicitní a Explicitní deklarace
Explicitní deklarace proměnné se zapisuje před jejím vlastním použitím, zpravidla na začátku procedury události. Deklarace začíná obvykle definováním datového typu.
Implicitní deklarace znamená, že proměnnou během deklarace přímo použijeme v programu (viz příklad). Jedná se tedy o deklaraci proměnné "za běhu". Implicitní deklarace má výhodu rychlejšího zápisu programového kódu.
Příklad explicitní deklarace v jazyce C:
int priklad;
priklad = 5;
Příklad implicitní deklarace proměnné "priklad" v jazyce C:
void funkce(){
return 5;
}
int priklad = funkce();
Proměnné
V některých programovacích jazycích jsou implicitní deklarace vytvořeny při překladu až když se s nimi překladač poprvé setká. V jiných jazycích je takový postup považovaný za fatální a během diagnostiky je zahlášena chyba. Některé jazyky původně používali implicitní deklaraci proměnných, ale během jejich vývoje získali možnost jí vypnout (např. v Perlu "use strict
" nebo Visual Basicu "Explicitní
").
Příklady jak různé programovací jazyky reagují na nedefinované proměnné jsou uvedeny níže. Pod každou částí kódu je napsáno chybové hlášení (pokud nějaké vznikne).
CLISP (GNU CLISP 2.35)
(setf y x)
*** - EVAL: variable X has no value
static void Main()
{
int y = x;
}
Undefined variable x
int main()
{
int y = x;
return 0;
}
foo.c: In function `main':
foo.c:2: error: `x' undeclared (first use in this function)
foo.c:2: error: (Each undeclared identifier is reported only once
foo.c:2: error: for each function it appears in.)
JavaScript (Mozilla Firefox 1.0)
y = x
Error: x is not defined
Source File: file:///c:/temp/foo.js
Standard ML (Standard ML of New Jersey v110.55)
val y = x;
stdIn:1.9 Error: unbound variable or constructor: x
Set Y = X
<UNDEF>
OCaml 3.08
let y = x;;
Unbound value x
Perl 5.8
my $y = $x;
(žádná chyba)
use strict;
my $y = $x;
Global symbol "$x" requires explicit package name at foo.pl line 2.
Execution of foo.pl aborted due to compilation errors.
PHP 5
$y = $x;
(žádná chyba)
error_reporting(E_ALL);
$y = $x;
PHP Notice: Undefined variable: x in foo.php on line 3
Python 2.4
x = y
Traceback (most recent call last):
File "foo.py", line 1, in ?
x = y
NameError: name 'y' is not defined
Ruby 1.8
y = x
NameError: undefined local variable or method `x' for main:Object
from (irb):1
VBScript (WSH 5.6)
Dim y
y = x
(žádná chyba)
Option Explicit
Dim y
y = x
(3, 1) Microsoft VBScript runtime error: Variable is undefined: 'x'
Související články
Reference
- ↑ Mike Banahan. 2.5. Declaration of variables [online]. http://publications.gbdirect.co.uk/c_book/: GBdirect [cit. 2011-06-08]. Dostupné online.