Pole znacznikowe[1][2], pole wyróżnikowe[2], flaga[2], pole rozróżniające[1] – specjalny rodzaj pola dostępny w rekordach z wariantami, które określa aktualną postać rekordu, tzn. który wariant z dostępnego wykazu wariantów zawartych w definicji rekordu, ma przypisaną wartość aktualną.

Rodzaje pól znacznikowych edytuj

W różnych językach programowania pola znacznikowe mogą być:

  • jawne
  • anonimowe
  • ukryte.

Powyższe rodzaje pól znacznikowych mają następujące implikacje:

pole jawne
to pole znacznikowe wymagające jawnej deklaracji w definicji rekordu wariantowego, wymagane jest podanie identyfikatora dla tego pola oraz określenie jego atrybutów, w szczególności typu danych (w większości języków programowania istnieją istotne ograniczenia typu dla pola znacznikowego, często musi być to typ porządkowy[3][1]),

Przykład w języku Pascal - pole jawne wies typu Boolean:

type adres=record
    kod : string[6];
    poczta : ''string''[30];
    case wies : Boolean of
      True :  (nazwa : string[25]; numer : integer);
      False : (ulica : string[30]; numer : integer
               mieszkanie : integer);
  end;
pole anonimowe
to pole znacznikowe bez nazwy, wymagane jest jedynie określenie typu danych[3],

Przykład w języku Pascal - pole anonimowe typu Boolean:

type adres=record
    kod : string[6];
    poczta : ''string''[30];
    case Boolean of
      True :  (nazwa : string[25]; numer : integer);
      False : (ulica : string[30]; numer : integer
               mieszkanie : integer);
  end;
pole ukryte
to pole znacznikowe umieszczane w rekordzie wariantowym przez translator, bez jakiegokolwiek udziału programisty i bez możliwości odwoływania się do takiego pola, obsługa pola jest całkowicie ukryta przez implementację[2].

Stosowanie pól znacznikowych edytuj

Jawne pola znacznikowe umożliwiają dokonywanie w projektowanym algorytmie, kontroli, jaka jest aktualna postać rekordu, a tym samym prawidłowości bieżącego odwołania do pewnego pola. Jeżeli bowiem zostanie przypisana wartość do pola pewnego wariantu, to odwołanie do składowej dla innego wariantu może dać całkowicie błędną, przypadkową wartość (gdyż warianty są rozmieszczone począwszy od tego samego miejsca w pamięci). Może to być jednak zamierzone działanie programisty. Nie jest jednak zalecane przez literaturę przedmiotu, ze względu na zaciemnienie kodu i możliwość powstania trudno wykrywalnych błędów[2].

Natomiast pole anonimowe i ukryte (ale także jawne), w przypadku dostarczenia przez implementację odpowiednich mechanizmów, mogą umożliwiać automatyczną kontrolę poprawności odwołań i sygnalizowanie błędu lub ostrzeżenia, w przypadku odwołań od pól, które nie są składową aktualnego wariantu.

W języku Ada wymagane jest, aby pole znacznikowe było inicjalizowane, na etapie:

definicji typu
wartość pola znacznikowego jest wartością domyślną dla deklarowanych zmiennych, lub
deklaracji zmiennej
dla tak zadeklarowanych zmiennych nie ma możliwości późniejszej zmiany postaci rekordu (tzn. nie ma możliwości późniejszego wyboru innego wariantu niż podanego w inicjalizacji pola znacznikowego danej zmiennej),

Taka konstrukcja zapewnia, że zmienna ma od początku istnienia określoną postać[4].

Pole znacznikowe może być też bitem wykorzystywanym do przechowywania pewnej informacji logicznej. Najczęściej są to bity rejestru flag służące kontrolowaniu wykonywanego przez procesor kodu, choć często nazywa się nimi też wartości zbiorowego typu danych bądź wyliczeniowego typu danych (które zapamiętywane są jako bity pewnego słowa określonej długości).

Pola znacznikowe w językach programowania edytuj

Przegląd języków programowania - pole znacznikowe
język programowania pole jawne pole anonimowe pole ukryte
Ada[4]      
Algol 68[2][5]      
Modula 2[1]      
Pascal[6][3]      

Przypisy edytuj

  1. a b c d Niklaus Wirth, Modula 2, Wydawnictwa Naukowo-Techniczne, Warszawa 1987, Seria: Biblioteka Inżynierii Oprogramowania, ISBN 83-204-0828-8
  2. a b c d e f Michael Marcotty, Henry Ledgord, W kręgu języków programowania, tłumaczenie: Krystyna Jerzykiewicz, Wydawnictwa Naukowo-Techniczne, Warszawa 1980, Seria: Biblioteka Inżynierii Oprogramowania, ISBN 83-204-1342-7
  3. a b c Andrzej Marciniak, Borland Pascal 7.0, Wyd. Nakom, Poznań 1994 r., seria: Biblioteka Użytkownika Mikrokomputerów ISBN 83-85060-53-7, ISSN 0867-6011
  4. a b A. Nico Habermann, Dewayne E. Perry, Ada dla zaawansowanych, Wydawnictwa Naukowo-Techniczne, Warszawa 1989 r., seria: Biblioteka Inżynierii Oprogramowania, ISBN 83-204-1058-4
  5. Jan Małuszyński, Krzysztof Pisecki, Algol 68. Wprowadzenie do języka Algol 68, A. van Wijngaarden, B.J. Mailloux, J.E.L. Peck, C.H.A. Koster, M. Sintzoff, .H. Lindsey, L.G.L.T. Meertens, R.G. Fisker, w tłumaczeniu Jana Małuszyńskiego i Krzysztofa Piseckiego, Zmieniony raport o języku algorytmicznym Algol 68, Wydawnictwa Naukowo-Techniczne, Warszawa 1980, Seria: Informatyka, ISBN 83-204-0161-5
  6. Michał Iglewski, Jan Madey, Stanisław Matwin, Pascal. Język wzorcowy – Pascal 360., Wydawnictwa Naukowo-Techniczne, Warszawa 1984, wydanie trzecie – zmienione, Seria: Biblioteka Inżynierii Oprogramowania, ISBN 83-204-0597-1