Datový typ

Formálně nazývaný datový typ (z anglického datového typu ) nebo typ dat v počítačové vědě kombinace souborů objektů s definovanými operacemi na nich . Pouze názvy těchto sad objektů a operací jsou specifikovány datovým typem datového záznamu pomocí takzvaného podpisu . Takto specifikovaný datový typ zatím nemá žádnou sémantiku .

Mnohem častěji používaný, ale konkrétnější význam pojmu datový typ pochází z oblasti programovacích jazyků a popisuje kombinaci konkrétních rozsahů hodnot a operací na nich definovaných do jednotky. Příkladem mohou být celá čísla nebo desetinná místa, řetězce znaků nebo složitější typy, jako je datum / čas nebo objekty . K rozlišení těchto datových typů se v literatuře používá také termín konkrétní datový typ . Diskuse o tom, jak se programovací jazyky zabývají datovými typy, najdete v tématu psaní .

Koncepční přechod od formální definice k definici konkrétních datových typů používaných v prostředí programovacího jazyka probíhá prostřednictvím postupného zavádění sémantiky do formálně specifikovaných názvů sad objektů a operací. Specifikace operační sady vede k abstraktním datovým typům nebo algebraickým strukturám . Konkrétní datový typ vyplývá z další specifikace sady objektů.

Formální definice datového typu prostřednictvím podpisu

Podpis je dvojice (druhy, operace), kde druhy představují názvy objektů sady a operace jmen pro operace na těchto sad. Příklad je určen k ukázce pro zjednodušenou verzi známého (konkrétního) datového typu Integer , který je podrobněji popsán níže , který se nazývá Simple Integer :

Jednoduché celé číslo
druhy int
Operace   nula: -> int
+ : int x int -> int
- : int x int -> int
Konec jednoduchého celého čísla

Toto je podpis pro předpokládaný datový typ Simple Integer , u kterého jsou povoleny pouze dvě operace + a - (navíc k „operaci výrobce“). Jmenujeme jedinou odrůdu int. Operace nula se používá k vytvoření intprvku. Operace + a - každá má dvě číslice a každá vrací prvek odrůdy int. Je důležité, aby se jednalo o čistě syntaktickou specifikaci. Co je a intnení nikde definováno. Za tímto účelem by název odrůdy musel být přiřazen sadě. V tomto případě by smysluplným přiřazením byla sada přirozených čísel . O způsobu fungování operací není řečeno nic jiného než jejich arény a jejich výsledky. Není zde uvedeno, zda symbol + odpovídá operaci operace součtu - to by bylo také zcela nemožné, protože není ani známo, zda operace funguje na přirozených číslech. Taková zadání spadají do oblasti sémantiky. Specifikace rozšířená o sémantiku by tedy mohla vypadat takto:

Jednoduché celé číslo
/ * čistá syntaxe * /
druhy int            
Operace   nula: -> int
+ : int x int -> int
- : int x int -> int
/ * Přiřazení sémantiky * /
množství int = IN
Funkce nula = 0
+ : int x int   odpovídají součtu dvou čísel z IN
- : int x int   odpovídají aritmetickému rozdílu mezi dvěma čísly z IN
Konec jednoduchého celého čísla

To však již přesahuje rozsah podpisu. Tato specifikace by byla spíše označována jako algebra . Tímto způsobem se však specifikace blíží porozumění pojmu datový typ v programovacím jazyce , kterému je věnována velká část zbytku článku.

Datové typy v programovacích jazycích

Python 3. Standardní typ hierarchy.png

Mnoho programovacích jazyků nabízí vlastní sadu předdefinovaných datových typů, u nichž je princip příslušného rozsahu hodnot, jako jsou celá čísla , čísla s plovoucí desetinnou čárkou nebo znakové řetězce , stejný. Skutečné názvy těchto datových typů a přesné definice rozsahů hodnot a souvisejících operací se však v některých případech velmi liší, protože závisí na použitém programovacím jazyce, použité platformě a dalších faktorech závislých na kompilátoru .

Datové typy v programování používané k ukládání oblastí přiřazují konkrétní sémantiku . Tyto oblasti paměti se nazývají proměnné nebo konstanty . Datové typy umožňují kompilátoru nebo běhové prostředí pro kontrolu na kompatibilitu typu z operací uvedených u programátora . Nepřípustné operace jsou někdy již rozpoznán při kompilaci , takže například rozdělení do znakového řetězce ‚HANS‘ číslem ‚5‘, která není užitečná a není definován v běžných programovacích jazyků, je zabráněno.

Rozlišuje se mezi elementárními a složenými datovými typy. Dalším klasifikačním termínem je pořadový datový typ .

Obyčejné datové typy

Řadové datové typy se vyznačují tím, že je na nich definován pevný vztah , který svým hodnotám přiřazuje jedinečné číslo objednávky. To definuje pořadí hodnot. V důsledku toho má

  • každá hodnota kromě první má přesně jednoho přímého předchůdce a
  • každá hodnota kromě poslední má přesně jednoho přímého nástupce.

To, zda je elementární datový typ také řadovým datovým typem, závisí na definici v konkrétním programovacím jazyce. Příklady:

  • Typ výčtu je řadový datový typ v PASCALU, protože hodnoty jsou seřazeny zleva doprava; Nástupce a předchůdce lze určit pomocí standardních funkcí. V C tomu tak není.
  • Boolean je speciální typ výčtu se dvěma hodnotami „false“ (pořadová hodnota 0) a „true“ (pořadová hodnota 1), v angličtině se obvykle nazývá „false“ a „true“.
  • Celá čísla a přirozená čísla jsou ze své podstaty řadové datové typy.

Elementární datové typy

Elementární datové typy , nazývané také jednoduché datové typy nebo primitivní datové typy , mohou přijímat pouze jednu hodnotu odpovídajícího rozsahu hodnot. Mají pevný počet hodnot ( diskrétnost ) i pevnou horní a dolní hranici ( konečnost ). Skutečná čísla proto mohou být reprezentována pouze jako čísla s plovoucí desetinnou čárkou s určitým stupněm přesnosti. U elementárních datových typů jsou základní operace definovány v programovacím jazyce; u čísel jsou to základní aritmetické operace . V závislosti na programovacím jazyce a rozsahu hodnot mají datové typy různá jména a jsou psány velkými nebo malými písmeny (pro přehled zde všechna velká písmena).

Celá čísla

Přirozená čísla

Čísla s pevnou čárkou (desetinná čísla)

  • Označení: COMP-3, MĚNA, PACKED DECIMAL, DEC, DECIMAL, MONEY, NUMERIC
  • Rozsah hodnot: Rozsah hodnot přímo závislý na maximálním počtu číslic, který se obvykle upřesňuje; MĚNA (64 bitů): -922337203685477.5808… 922337203685477.5807
  • Operace: +, -, * , <,>, = , celočíselné dělení , modulo

Typy výčtu

  • Označení: ENUM, SET nebo implicitní
  • Rozsah hodnot: Volně volitelné, například (ČERNÁ, ČERVENÁ, MODRÁ, ŽLUTÁ)
  • Operace: <,>, =

Boolean (logické hodnoty)

  • Označení: BOOL, BOOLEAN, LOGICAL, nebo (implicitně bez identifikátoru)
  • Rozsah hodnot: (PRAVDA, NEPRAVDA) nebo (= 0, ≠ 0) nebo (= -1, = 0)
  • Operace: NOT , AND , XOR , NOR , NAND , OR , =, ≠

Znak (jeden znak)

  • Označení: CHAR , CHARACTER
  • Rozsah hodnot: Všechny prvky znakové sady (například písmena)
  • Operace: <,>, = , převod na INTEGER, ...

Čísla s plovoucí desetinnou čárkou

  • Popis: DVOJNÁSOBEK, DVOJNÁSOBEK, ROZŠÍŘENÝ, PLOCHÝ, POLOVINOVÝ, DLOUHODOBÝ, SKUTEČNÝ, JEDNODUCHÝ, KRÁTKÝ
  • Rozsah hodnot: Různé definice (viz níže)
  • Operace: +, -, *, / , <,>, =
Přesnost typů s plovoucí desetinnou čárkou
Počet bitů
n
Rozsah hodnot
od ... do
významné
číslice
POLOVINA 16 3,1 · 10 −5 6,6 · 10 4 4. místo
JEDINÉ, SKUTEČNÉ 32 1,5 · 10 −45 3,4 · 10 38 7-8
NEMOVITÝ 48 2,9 · 10 −39 1,7 · 10 38 11-12
DVOJNÁSOBEK, SKUTEČNÝ 64 5,0 · 10 −324 1,7 x 10 308 15-16
NEMOVITÝ 64 1,1 · 10 −306 1,8 x 10 308 15-16
ROZŠÍŘENO 80 1,9 · 10 −4951 1,1 x 10 4932 19-20

Bitové sady

Bitové sady představují sadu několika bitů.V některých programovacích jazycích existuje samostatný datový typ a samostatné operátory (například pro sjednocení nebo křižovatku ) pro bitové sady pro zachování bezpečnosti typu .

Bitové sady nelze zaměňovat s typy výčtů nebo datovými poli , protože lze adresovat několik prvků datového typu (nebo sady) současně. V mnoha programovacích jazycích se k reprezentaci bitových sad používají celočíselné datové typy, takže čísla a sady bitů jsou kompatibilní s přiřazením , ačkoli aritmetické operátory nedávají smysl s bitovými sadami a operátory sad ve spojení s celými čísly.

  • Označení: SET , BITSET
  • Rozsah hodnot: {} pro prázdnou množinu, {i} pro množinu s prvkem i, {i, j} pro množinu s prvky i a j
  • Operace: operátor porovnání , převod typu na celé číslo nebo prvek znakové sady , operátory sady

Typy ukazatelů / dynamické datové typy

Ukazatele jsou specialitou , jejíž skutečný rozsah hodnot zůstává v mnoha programovacích jazycích anonymní, protože jsou „pouze“ odkazy na jakékoli jiné datové typy. V závislosti na odkazovaném typu jsou ukazatele na určité prvky pojmenovány samostatně, například ukazatele na soubory , tiskárny nebo kanály .

Objektově orientované programovací jazyky ukládají datový typ, na který odkazuje ukazatel (například v případě instančních proměnných) spolu s adresou, na kterou ukazatel odkazuje, takže je možné kontrolovat kompatibilitu přiřazení nejen pro datový typ adresování , ale také pro odkazovaný obsah. To je pak dokonce možné za běhu a je také nutné pro některé aplikace (například v případě polymorfismu ).

ukazatel

  • Označení: PŘÍSTUP, POINTER, IntPtr nebo jen hvězdička ( *)
  • Rozsah hodnot: Adresa základního typu (často anonymní)
  • Operace: reference, dereference, v některých jazycích: +, -, *, /

Ukazatel konstantní nuly

  • Označení: NULL, VOID, None, NIL, Nothing
  • Rozsah hodnot: žádný
  • Operace : =
  • Význam: Tento ukazatel se liší od všech ukazatelů na objekty.

Typy procedur

Některé programovací jazyky, například Oberon , používají typy procedur, které se používají pro proměnné ukazatele, které mohou ukazovat na různé procedury se shodnými formálními seznamy parametrů .

Složené datové typy

Složené datové typy jsou datová konstrukce, která se skládá z jednodušších datových typů. Vzhledem k tomu, že se teoreticky mohou stát libovolně složitými, jsou často již počítány mezi datové struktury . Většina programovacích jazyků má společné:

  • Sekvence ( řazená kolekce členů ), tabulka; Pole (nejednoznačné!)
    • Označení : ARRAY , (implicitní definice s [n] nebo (n) bez identifikátoru)
    • Rozsah hodnot: Mapování konečné sady (sady indexů) na rozsah hodnot základního typu (typ prvku). Sada indexů musí být pořadová. Použití více indexů vytvoří vícerozměrné pořadí.
    • Operace: <,>, = , přiřazení s kompatibilitou přiřazení
    • Příklad: type 3D-Vektor is ARRAY(1..3) of INTEGER;
  • Řetězce znaků s pevnou délkou ( Řetězce znaků jsou v zásadě pouze sekvencí typu znaků. Jelikož jsou však předdefinovány v mnoha programovacích jazycích, jsou zde uvedeny samostatně.)
    • Označení : Array of CHAR, CHAR (n), CHAR [n]
    • Rozsah hodnot: Všechny možné řetězce
    • Operace: Řetězcové funkce (podřetězec, zřetězení [složení]), <,>, =
  • Řetězec znaků s proměnnou délkou. Délku lze určit implicitně pomocí metaznaku jako koncového znaku řetězce (ASCII \ 0), explicitně pomocí proměnné nebo pomocí standardní funkce. Často jako abstraktní datový typ ve standardní knihovně.
    • Označení : String , Array of CHAR, VARCHAR, CLOB , Text
    • Rozsah hodnot: řetězce znaků proměnné délky
    • Operace: Řetězcové funkce (podřetězec, délka, zřetězení [složení]), <,>, =
  • řetězec binárních znaků s proměnnou délkou. Délku lze určit pomocí proměnné nebo standardní funkce.
    • Název : BLOB
    • Rozsah hodnot: řetězce binárních znaků různé délky
    • Operace: délka, zřetězení [složení], =
  • Sloučenina , věta, struktura, oblast
    • Označení : RECORD, STRUCT, CLASS (rozšířený význam), (implicitní definice pomocí čísel úrovní)
    • Rozsah hodnot: Síť obsahuje řadu různých komponent, které mohou mít různé datové typy. Jako typ součásti je povolen jakýkoli typ. V některých objektově orientovaných programovacích jazycích (například Oberon ) mohou mít skupiny také postupy specifické pro typ pro popis chování komponent sítě pomocí metod .
    • Operace: porovnání (pouze rovnost nebo rozdíl), přiřazení s kompatibilitou přiřazení nebo bez (silně závislé na programovacím jazyce)
    • Příklad: type Prüfung is RECORD (Fach: STRING, Schueler: STRING, Punkte: INTEGER, Lehrer: STRING, Termin: DATUM)
    • V mnoha programovacích jazycích existují možnosti pro několikanásobné interpretování paměťové oblasti sítě. Toto se nazývá záznam varianty nebo UNION . Ve většině případů však již neexistuje žádné zabezpečení typu .

Další informace o individuálním formátu

Při použití datových typů ve zdrojovém kódu programu jsou často implementovány individuální a další specifikace formátu pro vybraný datový typ. Například datum (nebo obecně čas) může být vytvořeno jako integrální elementární datový typ, ke kterému lze přidat informace o formě zpracování / reprezentace. Datum je pak např. B. uloženy v milisekundách od 1. ledna 1970 00:00 a na základě toho mohou být převedeny do určitých jiných forem (například „DD.MM.RRRR“ nebo „MM.TT hh: ss“); prosím, podívejte se. Alternativně může být datum také reprezentováno jako složené (např. Ze tří čísel pro den, měsíc a rok).

Funguje jako hodnoty prvního řádu

V mnoha současných programovacích jazycích jsou kromě ukazatelů funkcí k dispozici také běžné funkční hodnoty, literály funkcí a anonymní funkce . Ty byly vyvinuty na základě lambda kalkulu a implementovány v LISP již v roce 1958 (byť s vadným dynamickým spojením). Správný, tj. H. statická vazba byla např. B. specifikováno pro Algol 68 . Funguje to dodnes. Některé z nich nejsou chápány jako hodnoty, je to kvůli šíření tohoto konceptu mimo informatiku, která se teprve nyní začíná šířit.

Univerzální datový typ

Univerzálním datovým typem se rozumí typ hodnot v programovacím jazyce s podporou nezadaných proměnných. Většinou se jedná o diskriminované sjednocení typů vyskytujících se hodnot (elementární, složené, funkce atd.). Univerzální datový typ se typicky vyskytuje v univerzálních skriptovacích jazycích . Příklady použití univerzálních datových typů v jazycích jiných žánrů jsou lambda kalkul , ve kterém jsou funkce jedinými hodnotami, a Prolog , ve kterém jsou data dána Herbrandovou strukturou .

Abstraktní datové typy

definice
Abstraktní datový typ (ADT) je sbírka dat v proměnných - spojená s definicí všech operací, které k nim přistupují.

Protože přístup (čtení nebo zápis) je možný pouze prostřednictvím zadaných operací, jsou data zapouzdřena zvenčí . Každý ADT obsahuje datový typ nebo datovou strukturu.

Objektově orientované programovací jazyky podporují vytváření ADT prostřednictvím jejich koncepce třídy, protože data a operace jsou zde propojeny a data mohou být chráněna. Některé modulární programovací jazyky jako Ada nebo Modula-2 také specificky podporují vytváření abstraktních datových typů.

Z technického hlediska abstraktní datový typ definuje definovaný rozsah hodnot s technickým významem a jeho specifickými charakteristikami. Datový typ „zákaznické číslo“ může být elementárního typu „celá čísla“, ale liší se definovanou délkou a např. B. kontrolní číslice na poslední číslici. - Tvoří podmnožinu všech celých čísel v definované délce. Komplexní data se vzájemnou závislostí lze zde také kombinovat jako ADT. To je běžné v příkladu znázornění časových období. Počáteční datum a koncové datum (oba mají datový typ „Datum“) jsou propojeny prostřednictvím podmínky integrity. V důsledku toho je přípustný rozsah hodnot pro datum ukončení v konečném důsledku spojen s dalšími podmínkami. - ADT je ​​nakonec jakýkoli komplexní rozsah hodnot, který je vázán na statické a / nebo dynamické hodnoty a přiřazená pravidla pro určování hodnoty.

Anonymní datové typy

Některé programovací jazyky a definiční jazyk struktury XML, schéma XML, podporují koncept anonymního datového typu . Jedná se o datový typ, pro který není definován žádný název.

webové odkazy

Commons : Datové typy  - sbírka obrázků, videí a zvukových souborů
Wikislovník: datový typ  - vysvětlení významů, původ slov, synonyma, překlady

Jáva

SQL

Ada

Individuální důkazy

  1. David Axmark, Michael „Monty“ Widenius a kol.: Typy sloupců BLOB a TEXT. (Online již není k dispozici.) In: MySQL 5.1 Reference Manual. MySQL AB, 11. srpna 2008, archivováno z originálu 18. července 2008 ; Citováno 28. srpna 2008 .
  2. Jack Melnick a kol .: Operace LOB a BFILE. In: Oracle Call Interface Programmer's Guide, 11g Release 1 (11.1). Oracle, květen 2008, přístup 28. srpna 2008 .
  3. C-Standard ISO / IEC 9899: TC3 Committee Draft open-std.org (PDF) p. 338