WikiDer > Datentyp
EIN Datentyp, ebenfalls Datentyp erwähnt ist in der Informatik eine bestimmte Art von Daten, wie z ganze Zahlen, boolesch, echt, Zeichen, Saiten. In einem Programmiersprache wird mit jedem Variable, und allgemeiner mit jedem Ausdruck, ein zugeordneter Datentyp. Dieser Datentyp bestimmt, welche Werte die Variable oder der Ausdruck annehmen kann, wie diese Werte im Speicher gespeichert werden und welche Operationen mit der Variablen oder dem Ausdruck ausgeführt werden können.
Jeder Datentyp ist mit einer Sammlung der möglichen Werte verknüpft, die eine Variable oder ein Ausdruck dieses Typs annehmen kann. Es enthält auch ein System zum Codieren der Werte. Ein Wert kann manchmal durch mehrere Datentypen allein innerhalb einer Programmiersprache dargestellt werden: Beispielsweise kann die Zahl 5 durch verschiedene Typen von Integer und Real dargestellt werden (es gibt oft mehrere Typen von jedem mit unterschiedlicher Anzahl von Bits).
Ausdrücke
Ein Ausdruck hat denselben Datentyp wie das Ergebnis des Ausdrucks. In einigen Programmiersprachen wird die Art des Ergebnisses vollständig durch die Operation und die Typen der Operanden bestimmt, manchmal auch durch deren Werte. Zum Beispiel ergibt eine Division von zwei ganzen Zahlen in einigen Programmiersprachen immer eine reelle Zahl, während es in anderen davon abhängt, ob das arithmetische Ergebnis eine ganze Zahl ist.
Layout
Datentypen können in primitive (Primitive), Singular (einfach) und zusammengesetzt (Komplex) Typen. Primitive Datentypen bilden die Grundlage für die Definitionen anderer Datentypen.
Primitiver Typ
EIN primitiver Typ wird durch die Sprache selbst definiert und kann durch keinen anderen Datentyp beschrieben werden. In der Programmiersprache C, sind zum Beispiel verkohlen, int und schweben primitive Typen.
Gängige primitive Typen sind:[1][2]
- boolesch, auch bekannt als bool, Flagge oder Logik. Kann der Wert Ja oder Nein enthalten. Andere Namen für diese Werte sind wahr und falsch, oder, häufiger, die Engländer wahr und falsch.
- Charakter, auch bekannt als Charakter oder verkohlen. Dieser kann genau einer sein ANSIA- oder EBCDIC- oder UnicodeCharakter enthalten. Die Anzahl der Bytes, die dieser Typ belegt, hängt von der Sprache ab. Historisch war das normalerweise 1 Byte, aber heutzutage unterstützen viele Sprachen ondersteunen Unicode und mehr Bytes sind für eine Variable vom Typ reserviert verkohlen.
- ganze Zahl, auch bekannt als int, kurz, Lunge, unterzeichnet ist die Darstellung für ganze Zahlen, obwohl betont werden sollte, dass die beiden nicht gleich sind, a ganze Zahl hat einen begrenzten Bereich, während eine ganze Zahl dies nicht tut. Normalerweise werden Definitionen so gewählt, dass eine ganze Zahl in ein Register passt, aber dies ist kein a Gesetz der Meder und Perser, da Operationen mit einer 64-Bit-Ganzzahl relativ einfach in zwei 32-Bit-Operationen oder sogar 4 16-Bit-Operationen aufgeteilt werden können.
- Real, auch bekannt als schweben, Single, doppelt; alle nicht ganzzahligen Zahlen. Für den Bereich von a Real ist das gleiche wie das einer ganzen Zahl.
- Dezimal, auch bekannt als Fest, kann eine feste Anzahl von Stellen vor und nach dem Komma enthalten.
- Leere', auch bekannt als Null oder Einheit. Der Typ Leere hat keinen Wert. Dieser Typ weist auf das Fehlen eines Werts hin.[3][4]
Von jedem Datentyp gibt es Varianten. Die Varianten können sich in Genauigkeit (Anzahl Bytes), interner Darstellung (in der Erinnerung) oder der Funktionen das kann man darauf anwenden. Bekannte Varianten des Integer-Typs sind ohne Vorzeichen, ohne Vorzeichen, also nur nicht negative Werte, und unterzeichnet, mit Vorzeichen, damit auch negative Werte möglich sind.
Unterschiedliche Typen lassen sich mittels ineinander umwandeln Typumwandlung. In manchen Fällen ist dies ohne Informationsverlust möglich (zum Beispiel bei der Umwandlung einer ganzen Zahl in eine reelle Zahl). In anderen Fällen können Informationen verloren gehen (z. B. beim Umwandeln einer reellen Zahl in eine ganze Zahl).
Der Typ Leere wird manchmal in Sprachen verwendet, die nicht unterscheiden Verfahren und Funktionen. In solchen Sprachen (wie C und Java) eine Funktion, die den Wert des Typs zurückgibt Leere führt zum gleichen Verhalten wie eine Prozedur. Im funktionale Sprachen wird der Typ Leere (häufig Union genannt) für Ausdrücke verwendet, die einen Nebeneffekt erzeugen (z. B. in OCaml[5]).
EIN Variable eines primitiven Typs wird oft nach seinem Typ benannt. Beispielsweise wird eine Variable vom Typ Integer normalerweise als Integer bezeichnet.
Einzeltyp
EIN Einzeltyp ist ein primitiver Typ oder ein vom Programmierer basierend auf einem primitiven Typ definierter Typ. Das Kriterium hierbei ist, dass ein einzelner Datentyp nur als Ganzes manipuliert und gelesen werden kann.
Eine Art foo kann beispielsweise definiert werden als int:
Typdefintfoo;Dies ist kein primitiver Typ, da er benutzerdefiniert ist, sondern ein Singular (einfach) Art.
Saiten
Saiten sind Zeichenfolgen. Es gibt mehrere Möglichkeiten, Zeichenfolgen darzustellen.
- Als primitiver Wert.
- Als Array von Zeichen (Ada)
- wenn Zeiger zu einem Array von Zeichen (C).
- wenn aufführen (Listen) von Zeichen (Haskell, sehen Streicher in Haskell). Beachten Sie, dass eine Liste einen anderen Datentyp als ein Array hat.)
- Wenn Gegenstände (Java).
Verbundtyp
Ein zusammengesetzter (Komplex)-Typ besteht aus mehreren einfachen Typen, die separat bearbeitet und gelesen werden können. Dazu gehören Strukturen, Arrays und Listen, die sich aus Elementen zusammensetzen, die selbst auch aus zusammengesetzten Typen bestehen können: Listen von Listen beispielsweise oder verschachtelte Strukturen. Im Gegensatz zu primitiven Typen, die nur in einer begrenzten Anzahl von Arten existieren, ist die Anzahl der möglichen zusammengesetzten Typen prinzipiell unbegrenzt. Beispiele für zusammengesetzte Typnamen in verschiedenen Programmiersprachen sind: Array, Klasse, strukturieren und Aufzeichnung.
Bilder (Zuordnungen)
EIN Bild ergänzt Elemente des Sammelwagens ein Element aus der Sammlung oben. Wir schreiben: .
In Programmiersprachen stoßen wir auf zwei Arten von Bildern: Funktionen und Arrays.
Arrays
Die einfachste Form von a Array ist eine angegebene Sammlung von Variablen eines bestimmten Datentyps. In der Praxis bilden die Indizes oft eine Reihe aufeinanderfolgender diskreter Werte. Das unterste Element der Indizes ist der untere Grenze, das höchste Element de Obergrenze. Das Länge des Arrays ist die Anzahl der Elemente in der Indexmenge.
Viele Sprachen begrenzen die Indizes auf ganze Zahlen, möglicherweise beginnend bei 0 oder mit 0 als Untergrenze. Es gibt jedoch auch Sprachen, die dem Programmierer die Wahl des Typs der Indizes frei lassen, solange es sich um einen diskreten primitiven Typ handelt (Beispiel: Ada).
Die meisten Sprachen unterstützen auch mehrdimensionale Arrays. Für ein -dimensionales Array, der Index selbst ist ein Array mit dem Indizes als Elemente (-Tupel).
Assoziatives Array
Ein Array ist im Grunde eine Sonderform von a assoziatives Array. An einer assoziatives Array der Index muss keine sequentielle Reihe sein. Oft ist es auch erlaubt, andere (primitive) Typen als Integer als Index zu verwenden, zB Strings.
Einige Sprachen unterstützen 'reine' Arrays, aber keine assoziativen Arrays (zB C und Java). Andere Sprachen haben nur assoziative Arrays und implementieren reguläre Arrays als assoziative Arrays (zum Beispiel PHP). Dies hat einige Nachteile in Bezug auf Effizienz und Speichernutzung. Es gibt auch Sprachen, die beides unterstützen (zum Beispiel perl).
Funktionen
EIN Funktion ist ein Bild einer Sammlung , jetzt meistens Streit oder Original benannt, nach einer Sammlung , Statue oder Funktionswert erwähnt. Wenn es eine Funktion mit mehreren Argumenten gibt, wieder aus Tupeln. Im Gegensatz zu Arrays können Funktionen die Quellsammlung verwenden unendlich sein.
Abgesehen von der Tatsache, dass eine Funktion unendlich viele Ressourcen haben kann, liegt der Hauptunterschied in der Implementierung.
Struktur, Datensatz und Tupel
Viele Programmiersprachen ermöglichen es, einen neuen Typ zu definieren, der aus (anderen) Typen besteht. Es gibt mehrere Begriffe für einen solchen zusammengesetzten Datentyp: Aufzeichnung (zum Beispiel in Pascal), Struktur oder strukturieren (zum Beispiel in C) oder Tupel (zum Beispiel in funktionalen Programmiersprachen wie Haskell.
Unabhängig vom Namen kann dieser Typ als Tupel seiner konstituierenden Typen definiert werden. EIN Aufzeichnung (oder strukturieren) der Typen und ist ein Typ wofür: .
Das heißt, die Typen 'record', 'structs' und 'tuple' sind diekartesisches Produkt ihrer konstituierenden Typen. Nehmen Sie das folgende Pascal-Fragment:
Artt=Aufzeichnungein:ganze Zahl;b:verkohlenEnde;Eine Variable vom Typ t kann alle Werte annehmen, die aus a . bestehen ganze Zahl gefolgt von einem verkohlen. Jeder dieser Werte kann durch ein Tupel beschrieben werden in welchem eine ganze Zahl ist und ein char. Der Unterschied zwischen Datensätzen und Strukturen einerseits und Tupeln andererseits besteht darin, dass die konstituierenden Werte mit einem Namen in ersterem identifiziert werden können. Die Bestandteile von Tupeln werden durch ihre Position angezeigt.
Was wäre, wenn wir zwei Typen definieren, die aus denselben Bestandteilen bestehen, wie im Pascal-Fragment unten?
Artt1=Aufzeichnunga1:ganze Zahl;b1:verkohlenEnde;t2=Aufzeichnunga2:ganze Zahl;b2:verkohlenEnde;Es sind nun 2 Typen definiert, die beide aus einem Tupel aus Integer und char bestehen. Das heißt für alle für die , gilt auch . Die Typen t1 und t2 sein strukturelles Äquivalent. Allerdings lassen nicht alle Sprachen zu, dass zwei strukturell äquivalente Typen austauschbar verwendet werden. Das folgende Pascal-Fragment gibt einen Fehler aus:
varv1,v2:t1;v3:t2;loslegenv1.a1:=3;v1.b1:='z';v2:=v1;v3:=v1;Ende.Der Grund dafür ist, dass Pascal Namensgleichheit.
Klassen und Objekte
In einem objektorientierten Programmiersprache prägt jeden Klasse ein zusammengesetzter Typ. Die Menge von Werten, die mit einem bestimmten verbunden sind Klassentyp hören, sind alle Objekte, die a . haben Beispiel sind von dieser Klasse.
In ihrer Struktur unterscheidet sich ein Objekt nicht von strukturieren oder Aufzeichnung Typen. Ein Objekt ist ein Aufzeichnung das die Werte enthält, die für jede Instanz derselben Klasse eindeutig sind, die Attribute(oder Eigenschaften). zusätzlich zu diesen Attribute eine Klasse definiert auch eine Reihe von Funktionen, die auf Objekten dieser Klasse ausgeführt werden können, aber diese werden nicht mit jedem Objekt gespeichert. Der große Unterschied zwischen Objekten und 'regulären' Datensätzen liegt in der Implementierung und der Art und Weise, wie Objekte und Klassen verwendet werden können.
Boxen
Im objektorientierten Programmiersprachen kann es nützlich sein, primitive Typen in package zu packen Objekte; Das wird sein Boxen erwähnt. Diese Objekte enthalten dann nur den Wert des primitiven Typs. Dies kann nützlich sein, wenn Sie die primitiven Werte wie Objekte verwenden möchten.
Namensäquivalenz und strukturelle Äquivalenz
Im obigen Beispiel für Datensätze in Pascal sind zwei Typen mit derselben Struktur definiert. Ein gültiger Wert für einen Typ ist per Definition ein gültiger Wert für den anderen Typ. Ob diese Typen gemischt werden dürfen, hängt davon ab, wie eine Sprache definiert, ob zwei Typen verwendet werden Äquivalent sein.
als Sprache strukturelle Äquivalenz zwei Typen sind gleich, wenn sie die gleichen Werte haben. Ob dies der Fall ist, wird durch Vergleich der Struktur des Verbundtyps festgestellt. Biene Namensgleichheit es wird geprüft, ob die beiden Typen an derselben Stelle definiert sind, d.h. ob sie der selbe Name haben.
Ein Beispiel für eine Sprache, die Namensgleichheit verwendet wird, ist Pascal. Daher ist es im obigen Beispiel nicht erlaubt, eine Variable des einen Typs einer Variablen des anderen Typs zuzuweisen, obwohl die beiden Typen vom Namen her gleichwertig sind.
Die Programmiersprache C hat beide Typen: auf neuen Typen, die mit . definiert sind aufzählen, strukturieren oder Union wird Namensgleichheit angewendet. Bei neuen Typen, die mit definiert sind Typdef wird strukturelle Äquivalenz angewendet.[6]
Siehe auch
| Quellen, Anmerkungen und/oder Verweise Fußnoten Quellen
|
| Siehe die Kategorie Datumstypen von Wikimedia Commons für Mediendateien zu diesem Thema. |