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í int
prvku. 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 int
není 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
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
- Označení : BIGINT, BIN, BIN FIXED, BINARY, BYTE, COMP, INT, INTEGER , LONG, LONG INT, LONGINT, MEDIUMINT, SHORT, SHORTINT, SMALLINT
- Rozsah hodnot: Většinou 32 bitů (−2 31 … 2 31 -1), 8 bitů, 16 bitů, 64 bitů
- Operace: +, -, * , <,>, = , celočíselné dělení , modulo , bitové operátory
Přirozená čísla
- Označení : BYTE, CARDINAL, DWORD, NATURAL, UINT, UNSIGNED, UNSIGNED CHAR, UNSIGNED INT, UNSIGNED LONG, UNSIGNED SHORT, WORD
- Rozsah hodnot: Většinou 32 bitů (0… 2 32 -1), 8 bitů, 16 bitů, 64 bitů
- Operace: +, -, * , <,>, = , celočíselné dělení , modulo , bitové operátory
Čí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: +, -, *, / , <,>, =
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ě.)
- Ř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ě.
- řetězec binárních znaků s proměnnou délkou. Délku lze určit pomocí proměnné nebo standardní funkce.
-
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
Jáva
SQL
- Popis datových typů v PostgreSQL s odkazy na standardní shodu podle ANSI / ISO (anglicky)
- Kapitola 11. Datové typy v referenční příručce MySQL 5.1
Ada
Individuální důkazy
- ↑ 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 .
- ↑ 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 .
- ↑ C-Standard ISO / IEC 9899: TC3 Committee Draft open-std.org (PDF) p. 338