Deklaracja (programowanie komputerowe)

W programowaniu komputerowym deklaracja jest konstrukcją językową określającą właściwości identyfikatora : deklaruje znaczenie słowa (identyfikatora) . Deklaracje są najczęściej używane dla funkcji , zmiennych , stałych i klas , ale mogą być również używane dla innych jednostek, takich jak wyliczenia i definicje typów. Oprócz nazwy (sam identyfikator) i rodzaju podmiotu (funkcja, zmienna itp.) deklaracje zazwyczaj określają typ danych (dla zmiennych i stałych) lub sygnaturę typu (dla funkcji); typy mogą również zawierać wymiary, takie jak dla tablic . Deklaracja służy do poinformowania kompilatora o istnieniu podmiotu ; jest to ważne w tych silnie typowanych językach, które wymagają określenia funkcji, zmiennych i stałych oraz ich typów w deklaracji przed użyciem, i jest używane w deklaracji forward . Termin „deklaracja” jest często przeciwstawiany terminowi „definicja”, ale znaczenie i użycie różni się znacznie w zależności od języka; patrz poniżej.

Deklaracje są szczególnie widoczne w językach należących do tradycji ALGOL , włączając rodzinę BCPL , przede wszystkim C i C++ , a także Pascal . Java używa terminu „deklaracja”, chociaż Java nie wymaga osobnych deklaracji i definicji.

Deklaracja a definicja

Jedna podstawowa dychotomia dotyczy tego, czy deklaracja zawiera definicję: na przykład, czy deklaracja zmiennej lub stałej określa jej wartość , czy tylko jej typ; i podobnie czy deklaracja funkcji określa treść ( implementację ) funkcji, czy tylko jej sygnaturę typu. Nie wszystkie języki dokonują tego rozróżnienia: w wielu językach deklaracje zawsze zawierają definicję i mogą być określane jako „deklaracje” lub „definicje”, w zależności od języka. Pojęcia te są jednak rozróżniane w językach wymagających deklaracji przed użyciem (dla których stosuje się deklaracje forward) oraz w językach, w których interfejs i implementacja są rozdzielone: ​​interfejs zawiera deklaracje, implementacja zawiera definicje.

W nieformalnym użyciu „deklaracja” odnosi się tylko do czystej deklaracji (tylko typy, bez wartości lub treści), podczas gdy „definicja” odnosi się do deklaracji zawierającej wartość lub treść. Jednak w formalnym użyciu (w specyfikacjach językowych) „deklaracja” obejmuje oba te znaczenia, z dokładniejszymi różnicami w zależności od języka: w C i C++ deklaracja funkcji, która nie zawiera treści, nazywana jest prototypem funkcji, podczas gdy deklaracja funkcji, która zawiera treść, nazywana jest „definicją funkcji”. W Javie deklaracje występują w dwóch postaciach. W przypadku metod publicznych mogą być one prezentowane w interfejsach jako sygnatury metod, które składają się z nazw metod, typów wejść i typów danych wyjściowych. Podobny zapis można zastosować w definicji metod abstrakcyjnych , które nie zawierają definicji. Można utworzyć instancję klasy otaczającej, zamiast tego należy utworzyć nową klasę pochodną, ​​która zawiera definicję metody, aby utworzyć instancję klasy . Począwszy od Javy 8 wyrażenie lambda było zawarte w języku, co można było postrzegać jako deklarację funkcji.

Deklaracje i definicje

W językach programowania z rodziny C deklaracje są często gromadzone w plikach nagłówkowych , które są zawarte w innych plikach źródłowych, które odwołują się do tych deklaracji i z nich korzystają, ale nie mają dostępu do definicji. Informacje w pliku nagłówkowym zapewniają interfejs między kodem, który używa deklaracji, a tym, który ją definiuje, forma ukrywania informacji . Deklaracja jest często używana w celu uzyskania dostępu do funkcji lub zmiennych zdefiniowanych w różnych plikach źródłowych lub w bibliotece . Niezgodność między typem definicji a typem deklaracji generuje błąd kompilatora.

W przypadku zmiennych definicje przypisują wartości do obszaru pamięci, który był zarezerwowany podczas fazy deklaracji. W przypadku funkcji definicje dostarczają treść funkcji. Chociaż zmienną lub funkcję można zadeklarować wiele razy, zazwyczaj definiuje się ją raz (w języku C++ jest to znane jako reguła jednej definicji lub ODR).

Języki dynamiczne, takie jak JavaScript czy Python , generalnie pozwalają na redefiniowanie funkcji, czyli ponowne wiązanie ; funkcja jest zmienną, podobnie jak każda inna, z nazwą i wartością (definicja).

Oto kilka przykładów deklaracji, które nie są definicjami, w C:

  
  
  przykład  znaku  zewnętrznego1  ;  extern  int  przykład2  ;  pusty  przykład3  (  pusty  ); 

Oto kilka przykładów deklaracji, które są definicjami, ponownie w C:

  
   
     przykład  znaku1  ;  /* Poza definicją funkcji zostanie ona zainicjowana na zero. */   int  przykład2  =  5  ;  void  example3  (  void  )  {  /* definicja między nawiasami klamrowymi */  } 

Niezdefiniowane zmienne

W niektórych językach programowania niejawna deklaracja jest dostarczana przy pierwszym napotkaniu takiej zmiennej w czasie kompilacji . W innych językach takie użycie jest uważane za błąd, który może skutkować komunikatem diagnostycznym. Niektóre języki zaczynały od zachowania deklaracji niejawnych, ale w miarę dojrzewania oferowały możliwość ich wyłączenia (np. „ use strict ” Perla lub „ Option Explicit ” Visual Basica ).

Zobacz też

Notatki

Linki zewnętrzne