Přeskočit na obsah

Deklarace (programování)

Z Wikipedie, otevřené encyklopedie

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].

V programovacích jazycích typu BCPL jako je C++ a Java, může být při deklaraci definována také velikost proměnné. Definice 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 z jiných souborů, které je mohou používat, ale nemají přístup k jejich definici. 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 deklarací proměnných "priklad1" a "priklad2" a funkce "priklad3", které ale 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;
}

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ě začínali implicitní deklarací 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

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

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

  1. Mike Banahan. 2.5. Declaration of variables [online]. http://publications.gbdirect.co.uk/c_book/: GBdirect [cit. 2011-06-08]. Dostupné online.