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 a definice
[editovat | editovat zdroj]V některých programovacích jazycích se rozlišuje deklarace a definice. Zatímco v deklaraci se definuje typ deklarované entity, v definici se definuje její obsah (například tělo funkce). 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
[editovat | editovat zdroj]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é
[editovat | editovat zdroj]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
[editovat | editovat zdroj]Reference
[editovat | editovat zdroj]- ↑ Mike Banahan. 2.5. Declaration of variables [online]. http://publications.gbdirect.co.uk/c_book/: GBdirect [cit. 2011-06-08]. Dostupné online.