Qu'est-ce que cela signifie lorsque les données sont scalaires?

79

Je ne sais pas ce que signifie exactement scalaire, mais j'essaie de voir si j'y pense correctement. Est-ce que scalar se rapporte à l'arbitraire où le type de données pourrait être n'importe quel type, ou un système n'est pas capable de savoir ce que les données sont en avance.

Ryan M
la source
Anecdote: la plate-forme XML dans laquelle je passe mes journées (avec XQuery) aime appeler ces valeurs atomiques. Je pense que cela est étroitement lié, en ajoutant un commentaire pour les termes de référence / recherche.
Charles Ross

Réponses:

113

Le terme "scalaire" vient de l'algèbre linéaire , où il est utilisé pour différencier un nombre unique d'un vecteur ou d'une matrice. La signification en informatique est similaire. Il distingue une valeur unique, telle qu'un entier ou une valeur flottante, d'une structure de données telle qu'un tableau. Cette distinction est très importante en Perl, où le $sigil (qui ressemble à un "s") est utilisé pour désigner une variable scalaire et un @sigil (qui ressemble à un "a") désigne un tableau. Cela n'a rien à voir avec le type de l'élément lui-même. Ce peut être un nombre, un caractère, une chaîne ou un objet. Ce qui compte pour être appelé scalaire, c'est qu'il en existe un .

Karl Bielefeldt
la source
6
Ceci est un bon exemple de la façon dont le même terme peut signifier différentes choses dans différents contextes. Dans des langages tels que C ou Pascal, scalar fait référence à de simples types "bloc de construction" tels que intou char, et non à des types structurés tels que des objets (même s'il n'y en a qu'un).
Caleb
2
J'ajouterais également qu'en plus des tableaux, un scalaire n'est pas une structure de données composée telle qu'une structure ou une classe. La différence étant un tableau est constitué d'éléments multiples du même type, tandis qu'une structure est composée d'éléments multiples de types arbitraires.
1
En outre, une chaîne pourrait être une valeur non scalaire. Des langages tels que Perl le traitent comme un scalaire, mais dans n'importe quel langage basé sur C, je dirais qu'il s'agit d'un tableau ou d'un objet.
1
@ Karl Je ne connais pas Perl, mais pouvez-vous clarifier ce qu'est un sceau ?
Geek
2
@ Geek, c'est un symbole que vous mettez devant une variable, comme $variable. Voir la page wikipedia .
Karl Bielefeldt
27

Un scalaire est simplement une variable qui contient une valeur individuelle . Aux fins de cette discussion, supposons qu'un scalaire est un nombre unique, plutôt qu'un ensemble de nombres.

Par exemple, le résultat d'une requête SQL qui renvoie un nombre au lieu d'un tuple, comme le fait la méthode ExecuteScalar () dans la classe SQLCommand , qui renvoie la valeur de la première colonne de la première ligne du jeu de résultats renvoyé par la requête. Il est généralement utilisé pour extraire une valeur d'agrégat telle que COUNT ou AVERAGE, l'ID d'un nouvel enregistrement ou le nombre d'enregistrements traités par une requête.

Robert Harvey
la source
19

Un mnémonique supplémentaire, à la grande réponse de Karl Bielefeldt:

Une façon simple d’y réfléchir est la suivante: "cela peut-il être à l’échelle?"

Un entier peut être sur une échelle.

Un entier de taille fixe peut être sur une échelle, par exemple de -2147483648 à 2147483647.

Un nombre réel peut être sur une échelle.

Un caractère, un booléen ou une décimale à précision fixe peuvent tous figurer sur une échelle. Même une chaîne peut être sur une échelle (nous utilisons un tel tri).

D'où "scalaire".

Une ligne de base de données ne peut pas être sur une échelle. Un nombre complexe ne peut pas être sur une échelle. Un objet représentant un message électronique ne peut pas être sur une échelle. Un tableau, un vecteur ou une matrice ne peut pas être sur une échelle.

Jon Hanna
la source
10
Si une chaîne peut être sur une échelle, pourquoi pas un tableau? "cela peut-il être sur une échelle?" ne donne pas de résultats intuitifs, du moins pour moi.
VBCPP
2
@VBCPP, où sur une échelle contenant {1, 2} {2, 1} est-il assis? Avant ou après? Maintenant, d'accord, nous pouvons imposer un ordre, mais il n'y a pas d'ordre clair. N'oubliez pas non plus que j'essaie de proposer un moyen simple d'y penser (la réponse de Karl Bielefeldt fait un bon travail en donnant une réponse plus précise, IMO, et je n'essaierais pas de l'améliorer, mais simplement de l'ajouter). Cela dit, il y a un élément de contexte ici. Une chaîne peut être considérée ou non comme scalaire, selon le contexte. en SQL, il est scalaire pour une bonne raison, en C ce n'est pas le cas, également pour une bonne raison.
Jon Hanna
7
C'est juste faux .
Andrew Medico
2
Je ne suis pas d'accord pour dire que c'est "tout à fait faux", évidemment, bien que je pense que Karl Bielefeldt devrait avoir le tic-tac. C'est un mnémotique qui est trop long pour être un commentaire, c'est la meilleure réponse.
Jon Hanna
2
Je pense que le commentaire "c'est tout simplement faux" vient de l'idée que la réponse n'a aucun sens et que votre réponse à la question de @VBCPP ne répond pas à sa question. J'aime bien l'idée de mnémonique, mais vous devez toujours expliquer la signification, par exemple, d'un nombre entier sur une échelle. On pourrait aussi bien parler de mettre un chat à la télévision.
turboladen
10

Comme c'est le cas avec de nombreux termes en informatique; l'origine du mot se rapporte à plus de propriétés physiques. Le terme Scalar est relativement ancien en informatique. Sa définition est moins stricte ces jours-ci. Lorsque vous stockez des données dans la mémoire de l'ordinateur, ces données peuvent contenir une adresse (1 octet *) ou non. Quand cela s'est produit, cela s'appelait scalaire, alors que ça ne s'appelait pas composite. Principalement parce que les CPU ne pouvaient gérer qu’une seule adresse / donnée (= 1 octet) à la fois. Comme l'a déclaré @Karl Bielefeldt; le terme a bien été emprunté à l'algèbre.

Nous appelons une chaîne une chaîne parce que c'est une chaîne de caractères. Un caractère est / était un scalaire, alors qu'une chaîne est / était un composite. Stocker 1 donnée (une donnée) dans plusieurs adresses a quelque peu brouillé la ligne. Pensez-y comme ceci: lorsqu'un processeur pouvait traiter une donnée en une seule instruction, il était scalaire.

De nos jours, un scalaire est une valeur singulière, et ce qu'une valeur singulière peut être défini différemment selon les langues. les nombres entiers, les flottants, les caractères, les chaînes, les booléens et les enums sont, pour la plupart, des scalaires considérés de nos jours. Les tableaux, les listes, les arbres, les objets, etc. ne le sont pas.

(* Je dis 1 octet pour que tout soit clair, mais techniquement, je parle du temps où 6 bits étaient plus couramment utilisés sur les cartes perforées par exemple et plus tard sur des bandes magnétiques)

Déni de responsabilité: Je ne trouve aucune référence à cela sur Internet, j’ai reçu les informations à l’école et dans des livres anciens, parmi lesquels (je pense): Tableaux mathématiques et autres aides au calcul de 1944. Cela dit, ma mémoire est pas ce qu’elle était, alors si quelqu'un pouvait modifier / confirmer ou nier ma réponse, ce serait bien.

Evert
la source
9

Un scalaire est une simple valeur numérique unique (comme dans 1, 2/3, 3.14, etc.), généralement un entier, un point fixe ou un flottant (simple ou double), par opposition à un tableau, une structure, un objet, un vecteur complexe ( réel plus imaginaire ou magnitude plus composantes angulaires), type de données vecteur ou matrice dimensionnelle (etc.) de dimension supérieure, contenant plusieurs valeurs numériques.

Cependant, notez qu'un type de données très complexe très volumineux qui peut également être aplati et représenté dans des octets de 8 bits de mémoire d'ordinateur peut également être représenté sous la forme d'un seul nombre scalaire binaire très long / grand. Turing a utilisé cette technique pour représenter des programmes informatiques entiers sous la forme d'un seul nombre scalaire.

hotpaw2
la source
Cela permet des concepts tels que les nombres illégaux et les nombres premiers illégaux - représentations numériques de programmes "illégaux".
Andrew
Un scalaire ne doit pas nécessairement être numérique. Une chaîne, un booléen ou une date / heure est également un scalaire.
david.pfx
Et si je fais une classe complexe de date basée sur des champs de plusieurs scalaires (par exemple un int pour le mois, un l'année et un pour le jour)?
Pierre Arlaud
1
@ david.pfx: une chaîne, vue sous la forme d'un tableau de caractères, n'est pas scalaire.
MSalters
1
@MSalters: Bien sûr, et un entier considéré comme un tableau de bits ne l’est pas non plus. Tout ce qui peut être stocké et récupéré comme une seule valeur anonyme immuable est un scalaire et la plupart des langues vous permettent de le faire avec chaîne, date, complexe, point, etc., même si elles peuvent également être visualisées.
david.pfx
1

Le mot scalar dérive du latin scalaris, forme adjectivale de scala (latin pour "échelle"). Le mot anglais "scale" vient également de scala. La source

Un scalaire est une variable qui contient une valeur individuelle.

Par exemple:

Variable scalaire : Dites que vous essayez de représenter les noms de différents étudiants sous forme d'un ensemble de variables. Chacune des variables individuelles est une variable scalaire comme suit

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

Fonctions scalaires : Les fonctions scalaires SQL renvoient une valeur unique, basée sur la valeur d'entrée.

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