Deklarace (programování)

Z Wikipedie, otevřené encyklopedie
Skočit na: Navigace, Hledání

Deklarace je v informatice označení situace, kdy je v programovacím jazyce určeno jméno (identifikátor), datový typ a další aspekty pro proměnných, funkcí (procedur), konstant 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] V jiných jazycích, taky se silnou typovou kontrolou, jako je Haskell a jiné funkcionální jazyky, se nemusí deklarovat spousta ptákovin vůbec a ne jen dříve než jsou použity. Deklarují se hlavně zaváděné typy, protože mnohé jiné informace o proměnných si kompilátor odvodí.

Deklarace[editovat | editovat zdroj]

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[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žívali implicitní deklaraci proměnných, ale během jejich vývoje získali možnost jí 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

C# (.NET Framework)

static void Main()
{
  int y = x;
}
Undefined variable x

C (GNU GCC 3.4)

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

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'

Reference[editovat | editovat zdroj]

  1. Mike Banahan. 2.5. Declaration of variables [online]. http://publications.gbdirect.co.uk/c_book/: GBdirect, [cit. 2011-06-08]. [A] declaration [...] introduces just the name and type of something but allocates no storage[...].. Dostupné online. (anglicky) 

Související články[editovat | editovat zdroj]