Was bedeutet es, wenn Daten skalar sind?

78

Ich weiß nicht genau, was Skalar bedeutet, aber ich versuche zu sehen, ob ich richtig darüber nachdenke. Bezieht sich Skalar auf Willkür, bei der der Datentyp ein beliebiger Typ sein kann, oder kann ein System nicht wissen, um welchen Datentyp es sich handelt?

Ryan M
quelle
Unterhaltsame Tatsache: Die XML-Plattform, in der ich in letzter Zeit meine Tage verbracht habe (mit XQuery), nennt diese Atomic-Werte gern. Ich denke, das hängt eng zusammen und füge einen Kommentar als Referenz / Suchbegriff hinzu.
Charles Ross

Antworten:

112

Der Begriff "Skalar" stammt aus der linearen Algebra und wird verwendet, um eine einzelne Zahl von einem Vektor oder einer Matrix zu unterscheiden. Die Bedeutung beim Rechnen ist ähnlich. Es unterscheidet einen einzelnen Wert wie eine Ganzzahl oder ein Gleitkomma von einer Datenstruktur wie einem Array. Diese Unterscheidung ist in Perl sehr ausgeprägt, wo das $Sigill (das einem 's' ähnelt) verwendet wird, um eine skalare Variable zu bezeichnen, und ein @Sigill (das einem 'a' ähnelt) ein Array bezeichnet. Es hat nichts mit dem Typ des Elements selbst zu tun. Dies kann eine Zahl, ein Zeichen, eine Zeichenfolge oder ein Objekt sein. Was zählt, um als Skalar bezeichnet zu werden, ist, dass es einen von ihnen gibt.

Karl Bielefeldt
quelle
6
Dies ist ein gutes Beispiel dafür, wie derselbe Begriff in verschiedenen Zusammenhängen unterschiedliche Bedeutungen haben kann. In Sprachen wie C oder Pascal, skalare bezieht sich auf einfache „Baustein“ Typen wie intoder char, nicht strukturierte Typen wie Objekte (auch wenn es nur eine).
Caleb
2
Zusätzlich zu Arrays ist ein Skalar keine zusammengesetzte Datenstruktur wie eine Struktur oder Klasse. Der Unterschied, ein Array zu sein, besteht aus mehreren Elementen desselben Typs, während eine Struktur aus mehreren Elementen beliebigen Typs besteht.
1
Ein String kann auch ein nicht skalarer Wert sein. Sprachen wie Perl behandeln es als Skalar, aber in jeder C-basierten Sprache würde ich behaupten, es ist ein Array oder ein Objekt.
1
@ Karl Ich kenne Perl nicht, aber kannst du bitte klarstellen, was ein Siegel ist ?
Geek
2
@Geek, es ist ein Symbol, das Sie vor eine Variable stellen, wie z $variable. Siehe die Wikipedia-Seite .
Karl Bielefeldt
27

Ein Skalar ist einfach eine Variable, die einen individuellen Wert enthält . Für die Zwecke dieser Diskussion nehmen wir an, dass ein Skalar eine einzelne Zahl ist und keine Ansammlung von Zahlen.

Zum Beispiel das Ergebnis einer SQL-Abfrage, die eine Zahl anstelle eines Tupels zurückgibt, sowie die ExecuteScalar () -Methode in der SQLCommand-Klasse , die den Wert der ersten Spalte der ersten Zeile in der von der Abfrage zurückgegebenen Ergebnismenge zurückgibt. Es wird normalerweise verwendet, um einen aggregierten Wert wie COUNT oder AVERAGE, die ID eines neuen Datensatzes oder die Anzahl der von einer Abfrage verarbeiteten Datensätze abzurufen.

Robert Harvey
quelle
19

Eine ergänzende Anmerkung zu Karl Bielefeldts großartiger Antwort:

Eine einfache Art, darüber nachzudenken, lautet: "Kann das auf einer Skala liegen?"

Eine ganze Zahl kann auf einer Skala liegen.

Eine Ganzzahl mit fester Größe kann auf einer Skala liegen, z. B. von -2147483648 bis 2147483647.

Eine reelle Zahl kann auf einer Skala liegen.

Ein Zeichen, ein Boolescher Wert oder eine Dezimalstelle mit fester Genauigkeit kann sich alle auf einer Skala befinden. Sogar eine Zeichenfolge kann sich auf einer Skala befinden (wir verwenden diese beim Sortieren).

Daher "Skalar".

Eine Datenbankzeile kann nicht skaliert werden. Eine komplexe Zahl kann nicht auf einer Skala liegen. Ein Objekt, das eine E-Mail-Nachricht darstellt, kann sich nicht auf einer Skala befinden. Ein Array, ein Vektor oder eine Matrix kann sich nicht auf einer Skala befinden.

Jon Hanna
quelle
10
Wenn eine Zeichenfolge auf einer Skala liegen kann, warum nicht ein Array? "Kann das auf einer Skala sein?" liefert zumindest für mich keine intuitiven Ergebnisse.
VBCPP
2
@VBCPP Wo auf einer Skala mit {1, 2} befindet sich {2, 1}? Vorher oder nachher? Natürlich können wir eine Bestellung erzwingen, aber es gibt keine klare Bestellung. Denken Sie auch daran, dass ich versuche, eine einfache Möglichkeit zu bieten, darüber nachzudenken (Karl Bielefeldts Antwort leistet gute Arbeit, um eine präzisere Antwort zu geben, IMO, und ich würde nicht versuchen, sie zu verbessern, nur zu ergänzen). Das heißt, es gibt hier ein Element des Kontexts. Ein String kann je nach Kontext als skalar angesehen werden oder nicht. In SQL ist es aus gutem Grund skalar, in C nicht, auch aus gutem Grund.
Jon Hanna
7
Das ist einfach falsch .
Andrew Medico
2
Ich bin nicht der Meinung, dass es "einfach falsch" ist, obwohl ich denke, dass Karl Bielefeldt die Zecke haben sollte. Dies ist ein Mnemotikum, das zu lang ist, um ein Kommentar zu sein, das ist die bessere Antwort.
Jon Hanna
2
Ich denke, der Kommentar "Es ist einfach falsch" kommt von der Idee, dass die Antwort keinen Sinn ergibt und Ihre Antwort auf die Frage von @VBCPP seine Frage nicht beantwortet. Ich mag zwar die Idee der Mnemonik, aber Sie müssen immer noch erklären, wie wichtig es ist, dass beispielsweise eine Ganzzahl auf einer Skala liegt. Könnte auch darüber reden, eine Katze in den Fernseher zu stecken.
Turboladen
10

Wie es bei vielen Begriffen in der Informatik der Fall ist; Der Ursprung des Wortes bezieht sich auf mehr physikalische Eigenschaften. Der Begriff Skalar ist in der Datenverarbeitung relativ alt. Seine Definition ist heutzutage weniger streng. Wenn Sie Daten im Computerspeicher speichern, können diese Daten entweder in eine Adresse (1 Byte *) passen oder nicht. Wenn es so war, wurde es Skalar genannt, wenn es nicht so war, wurde es Composite genannt. Hauptsächlich, weil die CPUs jeweils nur eine Adresse / ein Datenelement (= 1 Byte) verarbeiten konnten. Wie von Karl Bielefeldt angegeben; Der Begriff wurde in der Tat aus der Algebra übernommen.

Wir bezeichnen eine Zeichenfolge als Zeichenfolge, da es sich um eine Zeichenfolge handelt. Ein Zeichen ist / war ein Skalar, während eine Zeichenfolge ein zusammengesetztes Zeichen ist / war. Das Speichern von 1 Datenelement (einem Datum) in mehreren Adressen verwischte die Linie etwas. Stellen Sie sich das folgendermaßen vor: Wenn eine CPU ein Datum in einem Befehl verarbeiten konnte, war es skalar.

Heutzutage ist ein Skalar ein beliebiger Singularwert, und was ein Singularwert ist, kann in verschiedenen Sprachen unterschiedlich definiert sein. Ganzzahlen, Fließkommazahlen, Zeichenfolgen, Boolesche Werte und Aufzählungen werden heutzutage größtenteils als Skalare betrachtet. Arrays, Listen, Bäume, Objekte usw. sind es nicht.

(* Ich sage 1 Byte, um die Dinge übersichtlich zu halten, aber technisch gesehen spreche ich von den Tagen, als 6 Bits häufiger zum Beispiel auf Lochkarten und später auf Magnetstreifen verwendet wurden.)

Haftungsausschluss: Ich kann im Internet keine Hinweise darauf finden, ich habe Informationen in der Schule und aus alten Büchern erhalten, darunter (glaube ich): Mathematische Tabellen und andere Hilfsmittel zur Berechnung von 1944. Davon abgesehen ist mein Gedächtnis Nicht mehr das, was es früher war. Wenn also jemand meine Antwort ändern / bestätigen oder ablehnen kann, wäre es nett.

Evert
quelle
9

Ein Skalar ist ein einfacher einzelner numerischer Wert (wie in 1, 2/3, 3.14 usw.), normalerweise eine Ganzzahl, ein fester Punkt oder ein Gleitkomma (einfach oder doppelt), im Gegensatz zu einem Array, einer Struktur, einem Objekt oder einem komplexen Vektor ( Real plus Imaginär oder Magnitude plus Winkelkomponenten), höherdimensionaler Vektor oder Matrixdatentyp (usw.), der mehr als einen einzelnen numerischen Wert enthält.

Es ist jedoch zu beachten, dass ein großer, sehr komplexer Datentyp der Art, der auch abgeflacht und in 8-Bit-Bytes des Computerspeichers dargestellt werden kann, auch als eine einzige sehr lange / große binäre Skalarzahl dargestellt werden kann. Turing verwendete diese Technik, um ganze Computerprogramme als eine einzige skalare Zahl darzustellen.

hotpaw2
quelle
Dies ermöglicht Konzepte wie illegale Zahlen und illegale Primzahlen - numerische Darstellungen von "illegalen" Programmen.
Andrew
Ein Skalar muss nicht numerisch sein. Ein String, ein Boolescher Wert oder Datum / Uhrzeit ist ebenfalls ein Skalar.
david.pfx
Was ist, wenn ich eine komplexe Datumsklasse auf der Grundlage von Feldern mit mehreren Skalaren erstelle (zum Beispiel ein Int für den Monat, eines für das Jahr und eines für den Tag)?
Pierre Arlaud
1
@ david.pfx: Ein String, der als Array von Zeichen betrachtet wird, ist nicht skalar.
MSalters
1
@MSalters: Natürlich, und eine ganze Zahl, die als Array von Bits angesehen wird, ist es auch nicht. Alles, was als einzelner unveränderlicher anonymer Wert gespeichert und abgerufen werden kann, ist ein Skalar. In den meisten Sprachen können Sie dies mit Zeichenfolgen, Datumsangaben, Komplexen, Punkten usw. tun, auch wenn diese auf andere Weise angezeigt werden können.
david.pfx
1

Das Wort scalar leitet sich vom lateinischen Wort scalaris ab, einer Adjektivform von scala (lateinisch für "Leiter"). Das englische Wort "scale" kommt ebenfalls von scala. Quelle

Ein Skalar ist eine Variable, die einen individuellen Wert enthält.

Zum Beispiel:

Skalare Variable : Angenommen, Sie möchten die Namen verschiedener Schüler als eine Reihe von Variablen darstellen. Jede der einzelnen Variablen ist eine skalare Variable wie folgt

NAME01="Zara"
NAME02="Qadir"
NAME03="Mahnaz"
NAME04="Ayan"
NAME05="Daisy"

Skalarfunktionen : SQL-Skalarfunktionen geben basierend auf dem Eingabewert einen einzelnen Wert zurück.

UCASE() - Converts a field to upper case
LCASE() - Converts a field to lower case
Premraj
quelle