Ich glaube nicht, dass sie austauschbar sind. Sie sind häufig ähnlich, aber der Unterschied besteht und scheint hauptsächlich darin zu liegen, was ihnen gegenübergestellt wird und was im Kontext relevant ist.
Skalare werden normalerweise mit Verbindungen wie Arrays, Maps, Mengen, Strukturen usw. verglichen. Ein Skalar ist ein "einzelner" Wert - Ganzzahl, Boolescher Wert, möglicherweise eine Zeichenfolge -, während eine Verbindung aus mehreren Skalaren (und möglicherweise Verweisen auf) besteht andere Verbindungen). "Skalar" wird in Kontexten verwendet, in denen die relevante Unterscheidung zwischen einzelnen / einfachen / atomaren Werten und zusammengesetzten Werten besteht.
Primitive Typen werden jedoch beispielsweise Referenztypen gegenübergestellt und verwendet, wenn die relevante Unterscheidung "Ist dies direkt ein Wert oder ist es eine Referenz auf etwas, das den realen Wert enthält?" Lautet, wie bei den primitiven Typen von Java im Vergleich zu Referenzen . Ich sehe dies als eine etwas niedrigere Unterscheidung als Skalar / Verbindung, aber nicht ganz.
Es hängt wirklich vom Kontext ab (und häufig davon, welche Sprachfamilie diskutiert wird). Um ein möglicherweise pathologisches Beispiel zu nennen: Zeichenfolgen. In C ist eine Zeichenfolge eine Verbindung (ein Array von Zeichen), während in Perl eine Zeichenfolge ein Skalar ist. In Java ist eine Zeichenfolge ein Objekt (oder ein Referenztyp). In Python ist alles (konzeptionell) ein Objekt- / Referenztyp, einschließlich Zeichenfolgen (und Zahlen).
Es gibt viel Verwirrung und Missbrauch dieser Begriffe. Oft wird eins verwendet, um ein anderes zu bedeuten. Hier ist, was diese Begriffe tatsächlich bedeuten.
"Native" bezieht sich auf Typen, die in die Sprache integriert sind, anstatt von einer Bibliothek (sogar einer Standardbibliothek) bereitgestellt zu werden, unabhängig davon, wie sie implementiert sind. Perl-Strings sind Teil der Perl-Sprache, daher sind sie in Perl nativ. C bietet eine Zeichenfolgensemantik über Zeiger auf Zeichen unter Verwendung einer Bibliothek, sodass der Zeiger auf Zeichen nativ ist, Zeichenfolgen jedoch nicht.
"Atomic" bezieht sich auf einen Typ, der nicht mehr zerlegt werden kann. Es ist das Gegenteil von "Composite" . Verbundwerkstoffe können in eine Kombination von Atomwerten oder anderen Verbundwerkstoffen zerlegt werden. Native Ganzzahlen und Gleitkommazahlen sind atomar. Brüche, komplexe Zahlen, Container / Sammlungen und Zeichenfolgen sind zusammengesetzt.
"Skalar" - und dies ist derjenige, der die meisten Menschen verwirrt - bezieht sich auf Werte, die Skalierung (daher der Name) ausdrücken können, wie Größe, Volumen, Anzahl usw. Ganzzahlen, Gleitkommazahlen und Brüche sind Skalare. Komplexe Zahlen, Boolesche Werte und Zeichenfolgen sind KEINE Skalare. Etwas, das atomar ist, ist nicht unbedingt skalar und etwas, das skalar ist, ist nicht unbedingt atomar. Skalare können nativ sein oder von Bibliotheken bereitgestellt werden.
Einige Typen haben ungerade Klassifikationen. BigNumber-Typen, die normalerweise als Array von Ziffern oder Ganzzahlen implementiert werden, sind Skalare, aber technisch gesehen nicht atomar. Sie können atomar erscheinen, wenn die Implementierung ausgeblendet ist und Sie nicht auf die internen Komponenten zugreifen können. Aber die Komponenten sind nur verborgen, so dass die Atomizität eine Illusion ist. Sie werden fast immer in Bibliotheken bereitgestellt, sind also nicht einheimisch, könnten es aber sein. In der Programmiersprache Mathematica sind beispielsweise große Zahlen nativ, und da ein Mathematica-Programm sie nicht in ihre Bausteine zerlegen kann, sind sie in diesem Zusammenhang auch atomar, obwohl sie unter dem zusammengesetzt sind Cover (wo Sie nicht mehr in der Welt der Mathematica-Sprache sind).
Diese Definitionen sind unabhängig von der verwendeten Sprache.
quelle
Einfach ausgedrückt scheint sich ein "Skalartyp" auf ein einzelnes Element zu beziehen, im Gegensatz zu einem Verbund oder einer Sammlung. Skalare enthalten also sowohl primitive Werte als auch Dinge wie einen Aufzählungswert.
http://ee.hawaii.edu/~tep/EE160/Book/chap5/section2.1.3.html
Vielleicht ist der Begriff "Skalar" ein Rückfall auf C:
http://www.open-std.org/jtc1/sc22/wg21/docs/papers/1995/N0774.pdf
Ich bin gespannt, ob sich dies darauf bezieht, ob diese Elemente den Wert "Skalierung" haben. - Wie das Zählen von Zahlen.
quelle
Ich mag die Antwort von Scott Langeberg, weil sie präzise ist und durch maßgebliche Links gestützt wird. Ich würde Scotts Antwort hochstimmen, wenn ich könnte.
Ich nehme an, dass der "primitive" Datentyp als primärer Datentyp betrachtet werden könnte, so dass sekundäre Datentypen von primären Datentypen abgeleitet werden. Die Ableitung erfolgt durch Kombinieren, beispielsweise durch eine C ++ - Struktur. Eine Struktur kann verwendet werden, um Datentypen (wie z. B. und int und ein Zeichen) zu kombinieren, um einen sekundären Datentyp zu erhalten. Der strukturdefinierte Datentyp ist immer ein sekundärer Datentyp. Primäre Datentypen werden nicht von irgendetwas abgeleitet, sondern sind in der Programmiersprache gegeben.
Ich habe eine Parallele zum Primitiven als Nomenklatur, was primär bedeutet. Diese Parallele ist "regulärer Ausdruck". Ich denke, die Nomenklatur "regelmäßig" kann als "regulierend" verstanden werden. Sie haben also einen Ausdruck, der die Suche reguliert.
Skalare Etymologie ( http://www.etymonline.com/index.php?allowed_in_frame=0&search=scalar&searchmode=none) ) bedeutet leiterartig. Ich denke, dies hängt mit der Programmierung zusammen, dass eine Leiter nur eine Dimension hat: Wie viele Sprossen vom Ende der Leiter. Ein skalarer Datentyp hat nur eine Dimension und wird somit durch einen einzelnen Wert dargestellt.
Ich denke, im Gebrauch sind primitiv und skalar austauschbar. Gibt es ein Beispiel für ein Primitiv, das nicht skalar ist, oder für einen Skalar, der nicht primitiv ist?
Obwohl austauschbar, bezieht sich das Grundelement darauf, dass der Datentyp ein Grundbaustein anderer Datentypen ist, und ein Grundelement besteht nicht aus anderen Datentypen.
Skalar bezieht sich auf einen einzelnen Wert. Skalar kontrastiert mit dem mathematischen Vektor. Ein Vektor wird nicht durch einen einzelnen Wert dargestellt, da (am Beispiel einer Vektortyp) ein Wert zur Darstellung der Vektorrichtung und ein anderer Wert zur Darstellung der Vektorgröße benötigt wird.
Referenzlinks: http://whatis.techtarget.com/definition/primitive http://en.wikipedia.org/wiki/Primitive_data_type
quelle
In C bilden Aufzählungstypen, Zeichen und die verschiedenen Darstellungen von Ganzzahlen eine allgemeinere Typklasse, die als Skalartypen bezeichnet wird. Daher sind die Operationen, die Sie für Werte eines beliebigen Skalartyps ausführen können, dieselben wie für Ganzzahlen.
quelle
Der Null-Typ ist das einzige, was der Definition eines "Skalartyps" am realistischsten entspricht. Sogar die Serialisierung von 'None' als 'N.' Das Einpassen in ein traditionell skalares 16-Bit-Wort - oder sogar in ein einzelnes Bit mit mehreren möglichen Werten - ist kein "einzelnes Daten".
quelle