it-swarm.com.de

Was versteht man unter einem primitiven Datentyp?

Mein Verständnis eines primitiven Datentyps ist das

Es ist ein Datentyp, der implizit von einer Sprache bereitgestellt wird (andere sind benutzerdefinierte Klassen).

Verschiedene Sprachen haben also unterschiedliche Datentypen, die für diese bestimmte Sprache als primitiv angesehen werden. Ist das richtig?

Und was ist der Unterschied zwischen einem "Basisdatentyp" und einem "eingebauten Datentyp"? Wikipedia sagt, dass ein primitiver Datentyp einer der beiden ist.

PS - Warum wird der Typ "Zeichenfolge" in SNOBOL4 als primitiver Typ betrachtet und nicht in Java?

42
jsp99

Es hängt irgendwie von der Sprache ab.

In Sprachen wie C und C++ sind beispielsweise mehrere Skalartypen integriert: int, float, double, char usw. Diese sind "primitiv" in dem Sinne, dass sie nicht in einfachere Komponenten zerlegt werden können. Aus diesen Grundtypen können Sie neue Typen definieren - Zeigertypen, Arraytypen, Strukturtypen, Vereinigungstypen usw.

Dann haben Sie eine Sprache wie Old-School-LISP, in der alles entweder ein Atom oder ein Liste ist. Wiederum ist nach der obigen Definition ein atom "" primitiv "in dem Sinne, dass es nicht in etwas Einfacheres zerlegt werden kann.

Bearbeiten

Für mich sind die Begriffe "primitiv", "grundlegend" und "eingebaut" ziemlich austauschbar. Wenn Sie jedoch wirklich pedantisch erhalten möchten, können Sie zwischen Typen unterscheiden, die "integriert" sind (die explizit durch die Sprachdefinition bereitgestellt werden), und Typen, die von den integrierten Typen abgeleitet sind, die noch vorhanden sind "primitiv" oder "grundlegend", da sie nicht in einfachere Elemente zerlegt werden können. Mit der Funktion typedef von C können Sie neue Typnamen für vorhandene Typen erstellen. Mit Ada können Sie neue Skalartypen erstellen, für die Einschränkungen gelten. Sie können beispielsweise einen Latitude-Typ aus dem integrierten Floating-Typ ableiten, mit der Einschränkung, dass er keine Werte außerhalb des Bereichs [-90.0, 90.0] annehmen kann. Es ist immer noch ein primitiver oder grundlegender Typ, da es nicht in einfachere Komponenten zerlegt werden kann, aber da es benutzerdefiniert ist, wird es nicht als "eingebauter" Typ betrachtet.

Auch diese Konzepte sind etwas verschwommen und hängen wirklich vom Kontext ab. Zum Beispiel ist der Begriff eines "eingebauten" Typs für eine typenlose Sprache wie BLISS bedeutungslos.

34
John Bode

Aus der Perspektive Java:

In Java gibt es eine sehr klare Unterscheidung zwischen primitiven und nicht-primitiven Typen.

Eine Variable eines primitiven Typs enthält direkt den Wert dieses Typs (mit anderen Worten, es handelt sich um Werttypen ).

Eine Variable eines nicht primitiven Typs enthält den Wert nicht direkt. Stattdessen handelt es sich um eine Referenz (ähnlich einem Zeiger) auf ein Objekt. (In Java ist es nicht möglich, benutzerdefinierte Werttypen zu erstellen).

Java hat acht primitive Typen: byte, short, int, long, char, boolean, float und double. Alles andere ist ein nicht primitiver Typ.

19
Jesper

Ein Grundelement ist ein Basisdatentyp, der nicht aus anderen Datentypen besteht. Es kann nur einen einzigen Wert darstellen. Alle Grundelemente sind notwendigerweise integrierte Datentypen (der Compiler muss sie kennen), aber nicht alle integrierten Datentypen sind Grundelemente.

In einigen Sprachen verfügt der Compiler über integrierte Kenntnisse über bestimmte Typen, die aus anderen Dingen aufgebaut sind, da er in der Lage sein muss, diese auf besondere Weise zu behandeln. Beispiele wären die Variante in Delphi und Visual Basic (und das Boo-Äquivalent "Duck") und die Basisobjektklasse in den meisten OO Sprachen).

9
Mason Wheeler

Warum wird der Typ "Zeichenfolge" in SNOBOL4 als primitiver Typ betrachtet und nicht in Java?

Weil die Java Sprachspezifikation sehr klar angibt, was das Wort "primitiv" im Kontext von Java bedeutet, und Javas String dieser Spezifikation nicht entspricht, während die SNOBOL4-Sprache Die Spezifikation definiert, was "primitiv" im Kontext von SNOBOL4 bedeutet, und die Zeichenfolge von SNOBOL4 entspricht dieser Spezifikation.

Da ist wirklich nichts mehr dran. Die Spezifikation der jeweiligen Sprache definiert, was bestimmte Wörter bedeuten, und etwas passt entweder zu dieser Beschreibung oder nicht. Zum Beispiel definiert die C-Sprachspezifikation die Bedeutung der Wort "Funktion" als etwas, das sehr klar ist nicht was die Wort "Funktion" normalerweise bedeutet, aber so wird das Wort innerhalb der verwendet C Gemeinschaft.

5
Jörg W Mittag

Ich stieß auf einige Informationen und hatte das Gefühl, dass sie den anderen Antworten helfen würden. Also will es teilen -

Wikipedia sagt -

In der Informatik ist der primitive Datentyp einer der folgenden:

Ein Basistyp ist ein Datentyp, der von einer Programmiersprache als Basisbaustein bereitgestellt wird. In den meisten Sprachen können kompliziertere zusammengesetzte Typen ausgehend von Basistypen rekursiv erstellt werden.
Ein eingebauter Typ ist ein Datentyp, für den die Programmiersprache integrierte Unterstützung bietet.

In den meisten Programmiersprachen sind alle grundlegenden Datentypen integriert. Darüber hinaus bieten viele Sprachen auch eine Reihe von zusammengesetzten Datentypen (Typ "Zeichenfolge" in Java).

Ich würde es gerne so sagen -
Ein grundlegender Datentyp ist ein Datentyp, der nicht weiter aufgeschlüsselt werden kann (der Typ "Zeichenfolge" kann aus "char" gebildet werden, aber char kann nicht in einen Datentyp "zerlegt" werden (in den meisten Programmiersprachen) es ist ein grundlegender Datentyp)

Der String-Typ in SNOBOL4 wird als primitiv betrachtet. Obwohl ich den genauen Grund dafür nicht kenne. Es ist sowohl einfach als auch in SNOBOL4 integriert.

In der Java-Spezifikation wird die Liste der Datentypen, die als primitiver Typ betrachtet werden, deutlich erwähnt. Da der Zeichenfolgentyp nicht in ihrer Spezifikation enthalten ist, handelt es sich nicht um einen primitiven Datentyp in Java, obwohl es sich um einen integrierten Typ handelt. -)

0
jsp99

Ein 'primitiver' Datentyp bedeutet, dass Sie einen Wert im Speicher gespeichert haben - dieser Wert hat keine Methoden oder interne Struktur. Ein Grundelement kann nur von externen Operationen bearbeitet werden.

In Java sind Grundelemente Zahlen (int, long usw.) und char. http://docs.Oracle.com/javase/tutorial/Java/nutsandbolts/datatypes.html

Wenn Ihr Wert strukturiert ist (ich denke hier an Streben), dann ist er kein Primitiv. Wenn es Methoden (ein Objekt oder eine Klasse) hat, ist es kein Grundelement.

0
JoshRagem