Prohlášení (počítačové programování) - Declaration (computer programming)

V programování počítače , je prohlášení je jazyk konstrukt , která určuje vlastnosti jako identifikátor : prohlašuje, co slovo (identifikátor) „znamená“. Deklarace se nejčastěji používají pro funkce , proměnné , konstanty a třídy , ale lze je použít také pro jiné entity, jako jsou výčty a definice typů. Kromě názvu (samotný identifikátor) a druhu entity (funkce, proměnná atd.) Deklarace obvykle specifikují datový typ (pro proměnné a konstanty) nebo podpis typu (pro funkce); typy mohou také zahrnovat rozměry, například pro pole. Deklarace se používá k oznámení kompilátoru o existenci entity ; to je důležité v těch silně zadaných jazycích, které vyžadují použití funkcí, proměnných a konstant a jejich typů, které mají být před použitím zadány s deklarací, a používá se v předávací deklaraci . Termín „deklarace“ je často v kontrastu s termínem „definice“, ale význam a použití se mezi jazyky výrazně liší; viz. níže.

Deklarace jsou obzvláště prominentní v jazycích v tradici ALGOL , včetně rodiny BCPL , nejvýznamněji C a C ++ , a také Pascal . Java používá výraz „deklarace“, ačkoli Java nevyžaduje samostatná prohlášení a definice.

Deklarace vs. definice

Jedna základní dichotomie je, zda deklarace obsahuje definici: například to, zda deklarace konstanty nebo proměnné určuje hodnotu konstanty ( počáteční hodnotu proměnné), nebo pouze její typ; a podobně, zda deklarace funkce určuje tělo ( implementaci ) funkce, nebo pouze její typový podpis. Ne všechny jazyky tento rozdíl rozlišují: v mnoha jazycích obsahují deklarace vždy definici a v závislosti na jazyce je lze označit jako „deklarace“ nebo „definice“. Tyto koncepty se však liší v jazycích, které vyžadují deklaraci před použitím (pro které se používají dopředná deklarace), a v jazycích, kde jsou rozhraní a implementace oddělené: rozhraní obsahuje deklarace, implementace obsahuje definice.

V neformálním použití se „deklarace“ vztahuje pouze na čistou deklaraci (pouze typy, žádná hodnota nebo tělo), zatímco „definice“ odkazuje na deklaraci, která obsahuje hodnotu nebo tělo. Ve formálním použití (v jazykových specifikacích) však „deklarace“ zahrnuje oba tyto smysly, s jemnějším rozlišením podle jazyka: v C a C ++ se deklaraci funkce, která neobsahuje tělo, říká prototyp funkce , zatímco deklarace funkce, která obsahuje tělo, se nazývá „definice funkce“. V Javě se deklarace vyskytují ve dvou formách. U veřejných metod mohou být prezentovány v rozhraních jako podpisy metod, které se skládají z názvů metod, typů vstupu a typu výstupu. Podobný zápis lze použít při definici abstraktních metod , které neobsahují definici. Uzavřenou třídu lze vytvořit instanci, spíše by bylo nutné vytvořit novou odvozenou třídu, která poskytuje definici metody, aby se vytvořila instance třídy. Počínaje jazykem Java 8 byl výraz lambda zahrnut do jazyka, který lze zobrazit jako deklaraci funkce.

Prohlášení a definice

V rodině programovacích jazyků C se deklarace často shromažďují do hlavičkových souborů , které jsou zahrnuty v jiných zdrojových souborech, které odkazují a používají tyto deklarace, ale nemají přístup k definici. Informace v souboru záhlaví poskytuje rozhraní mezi kódem, který používá deklaraci, a tím, který ji definuje, což je forma skrývání informací . Deklarace se často používá k přístupu k funkcím nebo proměnným definovaným v různých zdrojových souborech nebo v knihovně . Neshoda mezi typem definice a typem deklarace generuje chybu kompilátoru.

U proměnných definice přiřazují hodnoty oblasti paměti, která byla vyhrazena během fáze deklarace. Pro funkce definice dodávají tělo funkce. Zatímco proměnná nebo funkce může být deklarována mnohokrát, je obvykle definována jednou (v C ++ se to nazývá Pravidlo jedné definice nebo ODR).

Dynamické jazyky, jako je JavaScript nebo Python, obecně umožňují předefinování funkcí, to znamená opětovné svázání ; funkce je proměnná jako každá jiná, se jménem a hodnotou (definice).

Zde je několik příkladů deklarací, které nejsou definicemi, v jazyce C:

extern char example1;
extern int example2;
void example3(void);

Zde je několik příkladů deklarací, které jsou definicemi, opět v jazyce C:

char example1; /* Outside of a function definition it will be initialized to zero.  */
int example2 = 5;
void example3(void) { /* definition between braces */ }

Nedefinované proměnné

V některých programovacích jazycích je implicitní deklarace poskytována poprvé, kdy je taková proměnná nalezena v době kompilace . V jiných jazycích se takové použití považuje za chybu, která může vyústit v diagnostickou zprávu. Některé jazyky mají začal s implicitním chováním prohlášení, ale když vyzrál poskytli možnost jej zakázat (např Perl je " use strict " nebo Visual Basic je " Option Explicit „).

Viz také

Poznámky

Reference

externí odkazy