Datentyp

Die Standardtyphierarchie von Python 3

Im Informatik und Computerprogrammierung, a Datentyp (oder einfach Typ) ist eine Reihe von möglichen Werten und eine Reihe von zulässigen Operationen. Ein Datentyp sagt dem mit Compiler oder Dolmetscher Wie der Programmierer beabsichtigt, die Daten zu verwenden. Die meisten Programmiersprachen unterstützen grundlegende Datentypen von ganze Zahl Zahlen (unterschiedlicher Größen), Schwimmpunkt Zahlen (die ungefähr reale Nummern), Figuren und Booleschen. Ein Datentyp schränkt die möglichen Werte ein Ausdruck, wie z. B. eine Variable oder eine Funktion, dürfen. Dieser Datentyp definiert die Operationen, die für die Daten, die Bedeutung der Daten und die Art und Weise, wie Werte dieses Typs gespeichert werden können, durchgeführt werden.[1][2]

Konzept

Datentypen werden in Typsystemen verwendet, die verschiedene Möglichkeiten zur Definition, Implementierung und Verwendung bieten. Verschiedene Typsysteme gewährleisten unterschiedliche Grade von Geben Sie Sicherheit ein.

Fast alle Programmiersprachen enthalten explizit den Begriff des Datentyps, obwohl verschiedene Sprachen unterschiedliche Terminologie verwenden können.

Gemeinsame Datentypen umfassen:

Zum Beispiel in der Java -Programmiersprache, der Typ int repräsentiert den Satz von 32-Bit Ganzzahlen Der Wert von –2.147.483.648 bis 2.147.483.647 sowie die Operationen, die bei Ganzzahlen wie Addition, Subtraktion und Multiplikation durchgeführt werden können. Eine Farbe dagegen könnte durch drei dargestellt werden Bytes Bezeichnung der Beträge von jeweils rot, grün und blau und eine Schnur, die den Namen der Farbe darstellt.

Die meisten Programmiersprachen ermöglichen es dem Programmierer auch, zusätzliche Datentypen zu definieren, normalerweise durch Kombination mehrerer Elemente anderer Typen und Definieren der gültigen Vorgänge des neuen Datentyps. Beispielsweise kann ein Programmierer einen neuen Datentyp namens erstellen. "komplexe Zahl"Dazu gehören reale und imaginäre Teile. Ein Datentyp stellt auch eine Einschränkung für die Interpretation von Daten in a dar Typ System, Beschreibung der Darstellung, Interpretation und Struktur von Werte oder Objekte im Computerspeicher gespeichert. Das Typ -System verwendet Datentypinformationen, um zu überprüfen Korrektheit von Computerprogrammen dieser Zugriff oder manipuliert die Daten.

Die meisten Datentypen in Statistiken Haben Sie vergleichbare Typen in der Computerprogrammierung und umgekehrt, wie in der folgenden Tabelle gezeigt:

Statistiken Programmierung
echt bewertet (Intervall-Skala)) Schwimmpunkt
echt bewertet (Verhältnisskala))
Daten zählen (normalerweise nicht negativ) ganze Zahl
Binärdaten Boolesche
Kategoriale Daten Aufzähliger Typ
zufälliger Vektor aufführen oder Array
Zufällige Matrix zweidimensional Array
zufälliger Baum Baum

Definition

Parnas, Shore & Weiss 1976 identifizierte fünf Definitionen eines "Typs", der - in der Literatur implizit - in der Literatur verwendet wurde:

Syntaktisch
Ein Typ ist rein syntaktisch Etikett mit a Variable wenn es deklariert wird. Obwohl nützlich für fortschrittliche Typsysteme wie z. SubstruktursystemeSolche Definitionen bieten keine intuitive Bedeutung der Typen.
Darstellung
Ein Typ wird in Bezug auf seine Zusammensetzung primitiverer Typen definiert - häufig Maschinentypen.
Darstellung und Verhalten
Ein Typ ist definiert als seine Darstellung und ein Satz von Betreiber Diese Darstellungen manipulieren.
Wertspeicher
Ein Typ ist ein Satz möglicher Werte, die eine Variable besitzen kann. Solche Definitionen ermöglichen es, darüber zu sprechen (disjunkt) Gewerkschaften oder Kartesische Produkte von Typen.
Wertraum und Verhalten
Ein Typ ist ein Satz von Werten, die eine Variable besitzen kann und ein Satz von Funktionen dass man für diese Werte angewendet werden kann.

Die Definition in Bezug auf eine Darstellung wurde oft in imperativen Sprachen wie durchgeführt, z. Algol und Pascal, während die Definition in Bezug auf einen Wertraum und Verhalten in höheren Sprachen wie z. B. verwendet wurde Simula und Clu. Typen, einschließlich Verhaltens objektorientierter Modelle, während a Strukturierte Programmierung Das Modell würde tendenziell keinen Code einschließen und werden genannt einfache alte Datenstrukturen.

Klassen von Datentypen

Primitive Datentypen

Primitive Datentypen sind normalerweise Typen, die für eine Sprachimplementierung integriert oder grundlegend sind.

Maschinendatentypen

Alle Daten in Computern, die auf digitaler Elektronik basieren Bits (Alternativen 0 und 1) auf der niedrigsten Ebene. Die kleinste adressierbare Dateneinheit ist normalerweise eine Gruppe von Bits, die als a genannt werden Byte (normalerweise an Oktett, was 8 Bit ist). Die Einheit verarbeitet von Maschinensprache Anweisungen heißt a Wort (Ab 2011, normalerweise 32 oder 64 Bit). Die meisten Anweisungen interpretieren das Wort als binäre Zahl, so dass ein 32-Bit-Wort nicht signierte Ganzzahlwerte von 0 nach darstellen kann oder signierte Ganzzahlwerte von zu . Durch Zwei ergänztDie Maschinensprache und Maschine müssen größtenteils zwischen diesen nicht signierten und signierten Datentypen unterscheiden.

Floating-Punkt-Nummern, die für die arithmetische Gleitkomma verwendet werden, verwenden eine andere Interpretation der Bits in einem Wort. Sehen Schwimmende Punktarithmetik für Details.

Maschinendatentypen müssen sein ausgesetzt oder zur Verfügung gestellt in Systeme oder Programmiersprachen mit niedriger EbeneFeinkörnige Kontrolle über Hardware. Das C ProgrammierspracheZum Beispiel liefert beispielsweise ganzzahlige Arten verschiedener Breiten, wie z. kurz und lang. Wenn auf der Zielplattform ein entsprechender nationaler Typ nicht vorhanden ist, unterteilt der Compiler sie mithilfe von Typen, die vorhanden sind, in Code. Wenn beispielsweise eine 32-Bit-Ganzzahl auf einer 16-Bit-Plattform angefordert wird, behandelt der Compiler ihn stillschweigend als eine Reihe von zwei 16-Bit-Gassen.

Bei der Programmierung auf höherer Ebene sind Maschinendatentypen häufig versteckt oder abstrahiert Als Implementierungsdetail, das Code weniger tragbar macht, wenn sie freigelegt werden. Zum Beispiel ein Generikum numerisch Der Typ kann anstelle von Ganzzahlen einer bestimmten Bitbreite geliefert werden.

Boolescher Typ

Das Boolescher Typ repräsentiert die Werte Stimmt und FALSCH. Obwohl nur zwei Werte möglich sind, werden sie aus Effizienzgründen selten als einzelne binäre Ziffer implementiert. Viele Programmiersprachen haben keinen expliziten booleschen Typ, sondern interpretieren (zum Beispiel) 0 als falsche und andere Werte als wahr. Boolesche Daten beziehen sich auf die logische Struktur, wie die Sprache in die Maschinensprache interpretiert wird. In diesem Fall bezieht sich ein Boolean 0 auf die Logik falsch. True ist immer eine Null, insbesondere eine, die als Boolean 1 bekannt ist.

Aufzählungen

Das Aufzähliger Typ hat unterschiedliche Werte, die verglichen und zugeordnet werden können, aber nicht unbedingt eine bestimmte konkrete Darstellung im Speicher des Computers aufweisen. Compiler und Dolmetscher können sie willkürlich darstellen. Zum Beispiel können die vier Anzüge in einem Kartenspiel vier Aufzählern genannt werden VEREIN, DIAMANT, HERZ, SPATEN, gehört zu einem aufzähligen Typ mit dem Namen passen. Wenn eine Variable V wird deklariert passen Als Datentyp kann man ihm einen dieser vier Werte zuweisen. Einige Implementierungen ermöglichen es den Programmierern, den Aufzählungswerten ganzzahlige Werte zuzuweisen oder sie sogar als Typäquivalent für Ganzzahlen zu behandeln.

Numerische Typen

Wie zum Beispiel:

  • Das ganze Zahl Datentypen oder "Nicht-Fraktionsnummern". Kann nach ihrer Fähigkeit, negative Werte einzudämmen (z. ohne Vorzeichen in C und C ++). Kann auch eine kleine Anzahl vordefinierter Subtypen haben (wie z. kurz und lang in C/C ++); oder erlauben Sie den Benutzern, Teilungen wie 1..12 frei zu definieren (z. Pascal/Ada).
  • Schwimmender Punkt Datentypen repräsentieren normalerweise Werte als hochpräzisen Fraktionswerte (Rationale Zahlenmathematisch), werden aber manchmal irreführend als Realität bezeichnet (evokativ von mathematisch reale Nummern). Sie haben normalerweise vordefinierte Grenzen sowohl für ihre maximalen Werte als auch für ihre Präzision. Typischerweise intern in der Form gespeichert a × 2b (wo a und b sind Ganzzahlen), aber in Vertrauten angezeigt Dezimal bilden.
  • Fixpunkt Datentypen sind bequem, um Geldwerte darzustellen. Sie werden oft als Ganzzahlen intern implementiert, was zu vordefinierten Grenzen führt.
  • Bignum oder willkürliche Präzision In den numerischen Typen fehlen vordefinierte Grenzen. Sie sind keine primitiven Typen und werden aus Effizienzgründen sparsam eingesetzt.

Zusammengesetzte Typen

Zusammengesetzte Typen werden von mehr als einem primitiven Typ abgeleitet. Dies kann auf verschiedene Arten erfolgen. Die Art und Weise, wie sie kombiniert werden, werden genannt Datenstrukturen. Das Zusammenpassen eines primitiven Typs in einen zusammengesetzten Typ führt im Allgemeinen zu einem neuen Typ, z. Array-of-Totier ist ein anderer Typ als ganze Zahl.

  • Ein Array (auch Vektor genannt, aufführenoder Sequenz) speichert eine Reihe von Elementen und bietet bereit Zufallszugriff zu individuellen Elementen. Die Elemente eines Arrays sind in der Regel (jedoch nicht in allen Kontexten), die vom gleichen Typ sein müssen. Arrays können festgelegt oder erweiterbar sein. Indizes in ein Array müssen in der Regel Ganzzahlen sein (wenn nicht, kann diese Entspannung betonen, indem man über eine spricht Assoziatives Array) aus einem bestimmten Bereich (wenn nicht alle Indizes in diesem Bereich entsprechen Elementen, kann es a sein Spärmer Array).
  • Aufzeichnung (auch Tupel oder Struktur bezeichnet) Aufzeichnungen gehören zu den einfachsten Datenstrukturen. Ein Datensatz ist ein Wert, der andere Werte enthält, typischerweise in fester Zahl und Sequenz und typischerweise mit Namen indiziert. Die Elemente von Aufzeichnungen werden normalerweise genannt Felder oder Mitglieder.
  • Union. In einer Gewerkschaftstypdefinition wird angegeben, welche einer Reihe von zulässigen primitiven Typen in ihren Fällen gespeichert werden kann, z. "Float oder Long Ganzzahl". Kontrast zu a Aufzeichnung, was definiert werden könnte, um einen Schwimmer zu enthalten und eine Ganzzahl; Während in einer Gewerkschaft jeweils nur ein Typ erlaubt ist.
    • A Tagged Union (auch a genannt Variante, Variante Aufzeichnung, diskriminierte Gewerkschaft oder Disjoint Union) enthält ein zusätzliches Feld, das seinen aktuellen Typ für die Sicherheit des Typs angibt.
  • A einstellen ist ein Abstrakte Datenstruktur das kann bestimmte Werte ohne bestimmte speichern bestellenund keine wiederholten Werte. Die Werte selbst werden nicht aus Sätzen abgerufen, sondern einen Wert für die Mitgliedschaft, um einen Booleschen "in" oder "nicht in" zu erhalten.
  • Ein Objekt Enthält eine Reihe von Datenfeldern wie ein Datensatz und auch eine Reihe von Unterroutinen zum Zugriff auf oder ändern Sie sie. Methoden.

String- und Texttypen

Saiten sind eine Sequenz von Figuren verwendet, um Wörter zu speichern oder einfacher Text, meistens textuell Markup -Sprachen Repräsentation Formatierter Text. Charaktere können ein Brief von einigen sein Alphabet, eine Ziffer, ein leerer Raum, ein Interpunktionszeichen usw. Zeichen werden aus einem Zeichensatz wie z. ASCII. Zeichen- und String -Typen können unterschiedliche Subtypen entsprechend der Zeichenkodierung haben. Es wurde festgestellt hebräisch und Chinesisch) und andere Symbole. Zeichenfolgen können entweder variable Länge oder feste Länge haben, und einige Programmiersprachen haben beide Typen. Sie können auch durch ihre maximale Größe untertroffen werden.

Da die meisten Charakter -Sets die enthalten ZiffernEs ist möglich, eine numerische Zeichenfolge zu haben, wie z. "1234". Diese numerischen Zeichenfolgen werden normalerweise als unterscheidet von numerischen Werten wie z. 1234, obwohl einige Sprachen automatisch zwischen ihnen konvertieren.

Andere Arten

Viele andere Typen sind möglich, aber sie sind tendenziell weitere Variationen und Verbindungen der oben genannten. Insbesondere wenn ein Feld eines Datensatzes ein Zeiger auf einen anderen Datensatz sein kann, können ziemlich komplizierte Typen konstruiert werden. Die willkürliche Verwendung von Zeigern in einer Datenstruktur kann genauso viel Verwirrung verursachen wie willkürliche Sprünge in den Programmcode.

Zum Beispiel a verlinkte Liste Kann dieselben Daten wie ein Array speichern, bietet aber Sequentieller Zugriff eher als zufällig und wird von Aufzeichnungen in aufgebaut Dynamischer Speicher. Eine solche verknüpfte Liste kann verwendet werden, um a darzustellen Warteschlange. Ein weiterer häufig verwendeter Typ ist a Binärbaum, was eine ziemlich schnelle Suche ermöglichen kann. EIN Stapel kann entweder mit einer Liste oder einem Array implementiert werden und können mit dem Last-in-First-Out-Out-Situationen verwandt werden.

Abstrakte Datentypen

Jeder Datentyp, der nicht die konkrete Darstellung der Daten angibt Zusammenfassung Datentyp. Stattdessen eine formelle Spezifikation Basierend auf den Vorgängen des Datentyps wird es verwendet, um es zu beschreiben. Irgendein Implementierung einer Spezifikation muss die angegebenen Regeln erfüllen. Abstrakte Datentypen werden in formal verwendet Semantik und Programm Überprüfung und weniger ausschließlich in Entwurf.

Über die Überprüfung hinaus kann eine Spezifikation sofort in eine Implementierung verwandelt werden. Das Obj Familie von Programmiersprachen zum Beispiel basiert auf dieser Option mit Verwendung Gleichungen zur Spezifikation und umschreiben sie zu laufen. Algebraische Spezifikation[3] war ein wichtiges Thema der Forschung in CS um 1980 und zu dieser Zeit fast ein Synonym für abstrakte Datentypen. Es hat eine mathematische Grundlage in Universelle Algebra.[4] Die Spezifikationssprache kann durch Erlaubnis anderer Formeln als nur Gleichungen ausdrucksvoller gestaltet werden.

Ein typisches Beispiel ist die Boom -Hierarchie der Binärbaum, aufführen, Tasche und einstellen Datentypen.[5] Alle diese Datentypen können durch drei Operationen deklariert werden: Null, der den leeren Behälter konstruiert, Single, der einen Behälter aus einem einzigen Element konstruiert und anhängen, was zwei Container desselben Typs kombiniert. Die vollständige Spezifikation für die vier Datentypen kann dann angegeben werden, indem die folgenden Regeln für diese Vorgänge nacheinander hinzugefügt werden:

- Null ist das linke und rechte neutral für einen Baum: append (null, a) = a, append (a, null) = A.
- Listen fügen hinzu, dass Anhang assoziativ ist: append (append (a, b), c) = append (a, append (b, c)).
- Taschen Fügen Sie Niveaulichkeit hinzu: append (b, a) = append (a, b).
- Schließlich sind die Sets auch idempotent: anhängen (a, a) = A.

Der Zugriff auf die Daten kann durch Musteranpassung über die drei Vorgänge angegeben werden, z. a Mitglied Funktion für diese Container von:

- Mitglied (x, einzeln (y)) = Gl (x, y)
- Mitglied (x, null) = false
- Mitglied (x, append (a, b)) = oder (Mitglied (x, a), Mitglied (x, b))

Es muss darauf geachtet werden, dass die Funktion nach den entsprechenden Regeln für den Datentyp invariant ist.

Andere Arten

Typen können auf den oben erläuterten Grundtypen basieren oder abgeleitet werden. In einigen Sprachen wie C, Funktionen einen Typ haben, der sich aus dem Typ ihrer abgeleitet hat Rückgabewert.

Zeiger und Referenzen

Der wichtigste nicht-zusammengesetzte, abgeleitete Typ ist der Zeiger, ein Datentyp, dessen Wert direkt auf (oder "zeigt auf") einen anderen Wert, der an anderer Stelle in der gespeichert ist Computerspeicher mit seinem die Anschrift. Es ist eine primitive Art von Hinweis. (Alltags kann eine Seitenzahl in einem Buch als Datenstück angesehen werden, das sich auf eine andere bezieht). Zeiger werden oft in einem Format gespeichert, das einer Ganzzahl ähnlich ist. Der Versuch, einen Zeiger zu versuchen oder zu "nachschlagen", dessen Wert niemals eine gültige Speicheradresse war, würde ein Programm zum Absturz bringen. Um dieses potenzielle Problem zu verbessern, werden Zeiger als separate Art für die Art der Daten angesehen, auf die sie hinweisen, auch wenn die zugrunde liegende Darstellung gleich ist.

Funktionstypen

Während Funktionen auch ein Typ zugewiesen werden können, wird ihr Typ in der Einstellung dieses Artikels nicht als Datentyp angesehen. Hier werden Daten als anders angesehen von Algorithmen. Bei der Programmierung stehen Funktionen stark mit letzterem zusammen. Aber weil ein zentraler Grundsatz von Universelle Datenverarbeitung ist, dass Algorithmen sein können als Daten dargestelltz. B. Textbeschreibung und binäre Programme, der Kontrast zwischen Daten und Funktionen hat Grenzen. Tatsächlich können nicht nur Funktionen durch Daten dargestellt werden, sondern auch Funktionen können verwendet werden Daten codieren. Viele zeitgenössisch Typsysteme Konzentrieren Sie sich stark auf Funktionstypen und viele moderne Sprachen ermöglichen es Funktionen, als wirken erstklassige Bürger.

Funktionen aus dem als Datentypen behandelten Funktionen in verwandten Bereichen nicht ungewöhnlich zu machen. Prädikatlogik Zum Beispiel erlaubt die Anwendung von nicht Quantifizierer auf Funktions- oder Prädikatnamen.

Meta -Typen

Einige Programmiersprachen repräsentieren die Typinformationen als Daten, die aktiviert sind Typ -Selbstbeobachtung und Betrachtung. Im Gegensatz, Auftrag von oben Typsysteme, während die Typen aus anderen Typen konstruiert und an Funktionen als Werte übergeben werden, vermeiden Sie normalerweise das Basis Computer Entscheidungen über sie.

Komforttypen

Aus Gründen der Bequemlichkeit können hochrangige Sprachen und Datenbanken fertige "reale" Datentypen liefern, beispielsweise Zeiten, Daten und Geldwerte (Währung).[6][7] Diese können in die Sprache integriert oder als zusammengesetzte Typen in einer Bibliothek implementiert werden.[8]

Typsysteme

A Typ System Associates Typen mit berechneten Werten. Durch die Untersuchung des Flusses dieser Werte versucht ein Typsystem zu beweisen, dass nein Geben Sie Fehler ein kann auftreten. Das betreffende Typsystem bestimmt, was einen Typfehler ausmacht. Ein Typ -System soll jedoch im Allgemeinen garantieren, dass Vorgänge, die eine bestimmte Art von Wert erwarten, nicht mit Werten verwendet werden, für die dieser Betrieb keinen Sinn macht.

A Compiler Kann den statischen Wert eines Wertes verwenden, um den von ihm benötigten Speicher und die Auswahl der Algorithmen für den Wert des Werts zu optimieren. In vielen C Compiler die float Der Datentyp ist beispielsweise in 32 dargestellt Bits, in Übereinstimmung mit dem IEEE-Spezifikation für schwimmende Punktzahlen mit einer Präzision. Sie werden somit schwimmende Punktspezifische verwenden Mikroprozessoroperationen auf diesen Werten (Floating-Punkt-Addition, Multiplikation usw.).

Die Tiefe der Typeinschränkungen und die Art ihrer Bewertung beeinflussen die Typisierung der Sprache. EIN Programmiersprache kann einen Betrieb mit unterschiedlichen Betonalgorithmen für jeden Typ bei jedem Typ weiter assoziieren Typ Polymorphismus. Typentheorie ist die Untersuchung von Typsystemen, obwohl die konkreten Typsysteme der Programmiersprachen aus praktischen Fragen der Computerarchitektur, der Compiler -Implementierung und des Sprachdesigns stammen.

Typsysteme können unterschiedlich sein statisch oder dynamisch, stark oder schwache Typisierung, und so weiter.

Siehe auch

Verweise

  1. ^ Typ Bei der Kostenloses Online-Wörterbuch des Computers
  2. ^ Shaffer, C. A. (2011). Datenstrukturen und Algorithmusanalyse in C ++ (3. Aufl.). Mineola, NY: Dover. 1.2. ISBN 978-0-486-48582-9.
  3. ^ Ehrig, H. (1985). Grundlagen der algebraischen Spezifikation 1 - Gleichungen und anfängliche Semantik. Springer-Verlag. ISBN 0-387-13718-1.
  4. ^ Wechler, Wolfgang (1992). Universalalgebra für Informatiker. Springer-Verlag. ISBN 0-387-54280-9.
  5. ^ Bunkenburg, Alexander (1994). "Die Boom -Hierarchie". Funktionelle Programmierung, Glasgow 1993: 1–8. Citeseerx 10.1.1.49.3252. doi:10.1007/978-1-4471-3236-3_1.
  6. ^ West, Randolph (27. Mai 2020). "Wie SQL Server Datentypen speichert: Geld". Geboren SQL. Abgerufen 28. Januar 2022. Vor einiger Zeit habe ich Geld als "Convenience" -Datentyp beschrieben, der praktisch gleich ist wie Decimal (19,4), [...]
  7. ^ "Einführung in Datentypen und Feldeigenschaften". Support.microsoft.com. Abgerufen 28. Januar 2022.
  8. ^ Wickham, Hadley. "16 Daten und Zeiten". R für die Datenwissenschaft: Importieren, ordentlich, transformieren, visualisieren und Modelldaten. Sebastopol, CA. ISBN 1491910399. Abgerufen 28. Januar 2022.

Weitere Lektüre

Externe Links

  • Medien im Zusammenhang mit Datentypen bei Wikimedia Commons