Datový typ

Z Multimediaexpo.cz

Datový typ definuje v programování druh proměnných (a konstant). Je určen oborem hodnot a zároveň výpočetními operacemi, které lze s daty provádět (srovnej abstraktní datový typ). Datový typ nemůže být určen pouze oborem hodnot, protože existují i datové typy, které se liší pouze v operacích nad těmito typy. Téměř každý programovací jazyk má některé datové typy předdefinované. Pomocí nich může programátor tvořit typy nové (abstraktní datové typy).

Obsah

Prázdný datový typ

  • void – nenabývá žádných hodnot (deklarace funkce, která nemá návratovou hodnotu) nebo označuje data nespecifikovaného typu (ukazatel typu void v jazyce C)

Jednoduché datové typy

Nemají vnitřní strukturu. Složitější typy jsou ve skutečnosti složeny z těchto základních.

  • logická hodnota (boolean) – true nebo false (také 1 nebo 0)
  • celé číslo (integer) – např. 256, 1, 0, -65535, 0xA9 (tzv. hexadecimální zápis), …
  • znak (char) – např. 'a', 'A', 'g', ' ', '5', '%', …

Tyto typy jsou ordinální – hodnoty tohoto typu tvoří lineárně uspořádanou množinu, kde pro každý prvek je přesně definovaný předchůdce i následovník (z posledního prvku dojde k tzv. přetečení na první).

  • reálné číslo, číslo s plovoucí řádovou čárkou (float, real) – 3.14, 0.5 (podle anglosaské konvence zapsané s desetinnou tečkou)

Strukturovaný datový typ

Datový typ obsahuje jeden nebo více prvků. Říkáme, že je homogenní, jsou-li prvky stejného typu.

  • pole (array) – [21, -5, 11], může být vícerozměrné (např. dvourozměrné označujeme jako matici),
  • textový řetězec (string) – „Ahoj“, " ", „loopback 127.0.0.1“,
  • výčtový typ (enum) – programátorem definovaný typ, např. pro barvu karet:
 enum barva {
   piky,
   srdce,
   kary,
   krize
 };

Jednotlivé prvky strukturovaného typu jsou dostupné pod číslem, které určuje jejich pořadí (tzv. index), obvykle počítáno od 0. Pro výše uvedené příklady: pole[1] = -5, retezec[0] = 'A' (resp. ' ' a 'l'), obdobně pro výčtový typ.

Heterogenní datový typ

Datový typ je složen z prvků různých datových typů (opak homogenního) a navenek se chová jako kompaktní celek. Např. v jazyku Pascal typ record nebo v jazyku C typ struct:

 typedef struct {
    int vek;
    char *jmeno;
    enum { muz, zena } pohlavi;
 } Osoba;
  • seznam (list) – obdoba pole, ['a', 'b', 9, „cokoliv?“]

Zvláštní datové typy

  • ukazatel (pointer) – ukazuje na místo v paměti (např. na jinou proměnnou nebo na určitý prvek pole)
  • soubor (file) – reprezentuje (ukazatel na) soubor (ať už uložený na pevném disku či virtuální)
  • komplexní číslo – např. v jazyku Python: (2+4j)

Generický datový typ

Datový typ, který je možné parametrizovat jiným typem. V jazyce Pascal to může být např. typ pole s parametrem a jaké prvky budou v poli uloženy (např. array of char). Mnohem větší možnosti, jak parametrizovat typy, poskytuje systém šablon v C++ nebo generické typy uvedené v jazycích Java 5, či C# 2.0.

Rozsah datového typu

V paměti počítače jsou všechna data reprezentována posloupností 1 a 0 (dvojková soustava). Počet míst (bitů) vyhrazených pro daný datový typ omezuje rozsah hodnot, kterých může nabýt. Existuje tak např. několik datových typů pro celé číslo (liší se podle jazyka, v tabulce jsou uvedeny obvyklé hodnoty):

Datový typ Velikost v paměti Rozsah
Celočíselné typy
Boolean 1 bit (ačkoliv obvykle uložen jako 1 bajt) 0 až 1
Byte 8 bitů (= 1 bajt) 0 až 255
Word 2 bajty 0 až 65 535
Double Word 4 bajty 0 až 4 294 967 295
Integer 4 bajty –2 147 483 648 až 2 147 483 647
Double Integer 8 bajtů –9 223 372 036 854 775 808 až 9 223 372 036 854 775 807
Typy s plovoucí čárkou
Real 4 bajty 1E-37 až 1E+37 (6 desetinných míst)
Double Float 8 bajtů 1E-307 až 1E+308 (15 desetinných míst)

Některé jazyky nevyžadují deklaraci délky proměnné a dynamicky (za běhu programu) přiřazují další paměť, je-li to potřeba. Programátor např. může spojovat řetězce nebo přidávat další prvky do pole bez omezení.

Typová signatura

Signatura jednoduchého datového typu Bool a operací (funkcí) na něm by se dala symbolicky zapsat: Druhy dat:

  • Bool

Operace:

  • true, false : Bool
  • not : Bool → Bool
  • and : Bool, Bool → Bool
  • eq : Bool, Bool → Bool

Související články