VI.  

DATOVÉ  TYPY


Typ datového objektu specifikuje jednak množinu jeho přípustných hodnot, jednak množinu definovaných operací, které lze nad těmito hodnotami provádět. V předchozích kapitolách byly probrány některé standardní datové typy, jejichž množiny hodnot i operací jsou předdefinovány jazykem. Turbo Pascal však umožňuje i použití typů uživatelských, které je však nutno v programu nejprve deklarovat. Pro tyto účely poskytuje několik konstrukcí, tzv. obecných neboli abstraktních datových typů, pro něž jsou předdefinovány množiny operací, nikoli však množiny hodnot. Definice množiny hodnot konkrétního uživatelského typu, vycházejícího z některého typu obecného, je pak předmětem jeho deklarace v programu. Každý z obecných typů tedy představuje celou třídu konkrétních uživatelských typů se společnou množinou operací a obecně různými množinami hodnot. Celkem je k dispozici devět obecných typů:

•  typ výčet
•  typ interval
•  typ pole
•  typ řetězec
•  typ záznam
•  typ množina
•  typ soubor
•  typ ukazatel
•  typ procedura

Každému z obecných typů odpovídá v syntaxi jazyka speciální konstrukce — popis typu. V popisu typu je specifikována množina hodnot typu, čímž je určen konkrétní typ dané třídy obecných typů. Například:

set of Char
set of Byte
V obou uvedených příkladech rezervovaná slova set of určují, že se jedná o popis množinového typu. Pro hodnoty obou těchto typů jsou tedy dostupné například množinové operace sjednocení, rozdílu a průniku. Volitelná část popisu pak specifikuje, že množinou hodnot příslušného konkrétního typu jsou množiny znaků (jejich prvky jsou typu Char) resp. množiny celých čísel z intervalu od 0 do 255 (jejich prvky jsou typu Byte).

Popis typu se může vyskytovat buď přímo v deklaraci proměnné nebo v deklaraci typu v úseku deklarací typů. V prvém případě je deklarované proměnné přidělen typ nepojmenovaný, ve druhém se deklarací zavádí identifikátor typu, použitelný na dalších místech v programu:

var M: set of Char;
type Mnozina = set of Char; ... var M: Mnozina;
Syntax úseku deklarací typů popisuje syntaktický diagram na obrázku 30. Za právě deklarovaným identifikátorem typu a symbolem = lze uvést namísto popisu identifikátor jiného (již deklarovaného) typu. Tato možnost dovoluje deklarovat totožné typy, lišící se pouze identifikátory — přidělit jednomu typu více identifikátorů. Každým výskytem popisu typu je naopak definován zcela nový typ, různý od všech ostatních.

Obrázek 30: Syntax úseku deklarací typů

VI.1. 

Identita a kompatibilita typů

Syntax jazyka vyžaduje v některých konstrukcích identitu typů resp. kompatibilitu typů nebo kompatibilitu typů vzhledem k přiřazení.

Identita   Identita typů je vyžadována mezi formálními a skutečnými parametry podprogramů, volanými odkazem. Typy T1T2 jsou identické, je-li splněn některý z následujících předpokladů:

V následujících deklaracích jsou identické pouze typy T1, T2T3 — typ T4 je různý od všech ostatních, i když je deklarován stejným popisem. Nesplňuje totiž žádnou z uvedených podmínek identity.

type T1 = array [1 .. 10] of Real;
     T2 = T1;
     T3 = T2;
     T4 = array [1 .. 10] of Real;
Proměnné jsou identických typů, jestliže typy uvedené v jejich deklaracích jsou identické nebo jestliže jsou všechny (proměnné) deklarovány v deklaraci jediné. V následujících deklaracích jsou identických typů proměnné P1P2 resp. P3P4, zatímco typy proměnných P5P6 jsou různé od všech ostatních.
var P1, P2 : array [1 .. 10] of Real;
    P3     : T1;
    P4     : T2;
    P5     : array [1 .. 10] of Real;
    P6     : array [1 .. 10] of Real;
Kompatibilita   Typová kompatibilita je vyžadována především mezi operandy některých operací. Dva typy jsou kompatibilní, je-li splněn některý z následujících předpokladů:

Kompatibilita vzhledem k přiřazení   V přiřazovacích příkazech a při dosazování hodnot skutečných parametrů do hodnotou volaných formálních parametrů podprogramů je vyžadována kompatibilita vzhledem k přiřazení. Typ H dosazované hodnoty je kompatibilní vzhledem k přiřazení s typem P proměnné, je-li splněna některá z následujících podmínek:

Běhová chyba programu může nastat i v případě splněné kompatibility vzhledem k přiřazení, je-li dosazovaná hodnota mimo rozsah hodnot typu P, za předpokladu povolené kontroly rozsahu (direktiva kompilátoru {$R+}). Pokud je však dosazovaná hodnota konstantním výrazem, kontrola rozsahu je bez ohledu na direktivu povolení nebo zákazu provedena již při překladu.