Deklarace (programování)
Deklarace je v informatice zápis, kterým se v počítačovém programu zavádí jméno (identifikátor) a zpravidla určuje jeho datový typ a další aspekty pro proměnné, funkce (procedury), konstanty apod. Překladač je tak informován 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 = 'e';
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. Datový typ udává položka „int“ (tedy integer):
int priklad;
priklad = 5;
Příklad implicitní deklarace proměnné „priklad“ v jazyce C. Po vykonání programu bude v proměnné „priklad“ hodnota 5:
int 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žívaly implicitní deklaraci proměnných, ale během jejich vývoje získaly možnost ji vypnout (například v Perlu použitím „use strict
“ nebo ve Visual Basicu direktivou Option Explicit
“).
Příklady jak různé programovací jazyky reagují na nedefinované proměnné. 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
MUMPS (Caché)
Set Y = X
<UNDEF>
MUMPS (GT.M)
Set Y=X
%GTM-E-UNDEF, Undefined local variable: X
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
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'
Odkazy
Reference
- Mike Banahan. 2.5. Declaration of variables [online]. http://publications.gbdirect.co.uk/c_book/: GBdirect [cit. 2011-06-08]. Dostupné online. (anglicky)