Cosa significa quando i dati sono scalari?


79

Non so cosa significhi esattamente lo scalare, ma sto cercando di vedere se ci sto pensando correttamente. Lo scalare si riferisce all'arbitrarietà in cui il tipo di dati potrebbe essere di qualsiasi tipo o un sistema non è in grado di sapere in anticipo quali siano i dati.


Curiosità: la piattaforma XML in cui passo i miei giorni di recente (usando XQuery) mi piace chiamare questi valori Atomic. Penso che questo sia strettamente correlato, aggiungendo un commento per riferimento / termini di ricerca.
charles ross,

Risposte:


113

Il termine "scalare" deriva dall'algebra lineare , dove viene utilizzato per differenziare un singolo numero da un vettore o una matrice. Il significato nell'informatica è simile. Distingue un singolo valore come un numero intero o float da una struttura di dati come una matrice. Questa distinzione è molto importante in Perl, dove il $sigillo (che ricorda una 's') viene usato per indicare una variabile scalare e un @sigillo (che ricorda una 'a') indica una matrice. Non ha nulla a che fare con il tipo di elemento stesso. Potrebbe essere un numero, un carattere, una stringa o un oggetto. Ciò che conta per essere chiamato scalare è che ce n'è uno .


6
Questo è un buon esempio di come lo stesso termine possa significare cose diverse in contesti diversi. In linguaggi come C o Pascal, scalare si riferisce a semplici tipi di "building block" come into char, non a tipi strutturati come oggetti (anche se ce n'è solo uno).
Caleb,

2
Vorrei anche aggiungere che oltre alle matrici, uno scalare non è una struttura di dati composta come una struttura o una classe. La differenza è che un array è costituito da più elementi dello stesso tipo, mentre una struttura è costituita da più elementi di tipi arbitrari.

1
Inoltre, una stringa potrebbe essere un valore non scalare. Linguaggi come il Perl lo trattano come uno scalare, ma in qualsiasi linguaggio basato su C, direi che è un array o un oggetto.

1
@Karl Non conosco Perl ma puoi chiarire per favore cos'è un sigillo ?
Geek,

2
@Geek, è un simbolo che metti prima di una variabile, come $variable. Vedi la pagina di Wikipedia .
Karl Bielefeldt,

27

Uno scalare è semplicemente una variabile che contiene un valore individuale . Ai fini di questa discussione, supponiamo che uno scalare sia un singolo numero, piuttosto che una raccolta di numeri.

Ad esempio il risultato di una query SQL che restituisce un numero anziché una tupla, così come il metodo ExecuteScalar () nella classe SQLCommand , che restituisce il valore della prima colonna della prima riga nel set di risultati restituito dalla query. In genere viene utilizzato per recuperare un valore aggregato come COUNT o MEDIA, l'ID di un nuovo record o il numero di record elaborati da una query.


19

Un mnemonico supplementare, alla grande risposta di Karl Bielefeldt:

Un modo semplice di pensarci è "può essere su una scala?"

Un numero intero può essere su una scala.

Un numero intero di dimensioni fisse può essere su una scala, ad esempio da -2147483648 a 2147483647.

Un numero reale può essere su una scala.

Un carattere, un valore booleano o un decimale a precisione fissa possono essere tutti su una scala. Anche una stringa può essere su una scala (usiamo tale nell'ordinamento).

Quindi "scalare".

Una riga del database non può essere su una scala. Un numero complesso non può essere su una scala. Un oggetto che rappresenta un messaggio e-mail non può essere su una scala. Un array, un vettore o una matrice non possono essere su una scala.


10
Se una stringa può essere su una scala, perché non un array? "può essere su una scala?" non dà risultati intuitivi, almeno per me.
VBCPP,

2
@VBCPP dove su una scala contenente {1, 2} si trova {2, 1}? Prima o dopo? Ora, scontato, possiamo imporre un ordine, ma non esiste un ordine chiaro. Tieni anche presente che sto cercando di offrire un modo semplice di pensarci (la risposta di Karl Bielefeldt fa un buon lavoro nel dare una risposta più precisa all'IMO, e non proverei a migliorarla, solo una supplica). Detto questo, c'è un elemento di contesto qui. Una stringa può o non può essere considerata scalare a seconda del contesto; in SQL è scalare per una buona ragione, in C non lo è, anche per una buona ragione.
Jon Hanna,

7
Questo è semplicemente sbagliato .
Andrew Medico,

2
Non sono d'accordo sul fatto che sia "solo sbagliato", ovviamente, anche se penso che Karl Bielefeldt dovrebbe avere il segno di spunta. Questo è un mnemotico che è troppo lungo per essere un commento, questa è la risposta migliore.
Jon Hanna,

2
Penso che il commento "è solo sbagliato" deriva dall'idea che la risposta non ha alcun senso e la tua risposta alla domanda di @VBCPP non risponde alla sua domanda. Mi piace l'idea del mnemonico, ma devi ancora spiegare il significato, ad esempio, di un numero intero su una scala. Potrebbe anche essere parlare di mettere un gatto in TV.
turboladen,

10

Come nel caso dell'informatica; l'origine della parola si riferisce a più proprietà fisiche. Il termine scalare è relativamente vecchio nell'informatica. La sua definizione è meno severa in questi giorni. Quando si memorizzano i dati nella memoria del computer, questi dati possono rientrare in un indirizzo (1 byte *) oppure no. Quando lo faceva, veniva chiamato scalare, quando non lo faceva veniva chiamato composito. Principalmente perché le CPU potevano gestire solo un indirizzo / pezzo di dati (= 1 byte) alla volta. Come affermato da @Karl Bielefeldt; il termine è stato effettivamente preso dall'algebra.

Chiamiamo una stringa una stringa perché è una stringa di caratteri. Un carattere è / era uno scalare, mentre una stringa è / era un composto. La memorizzazione di 1 pezzo di dati (un dato) in più indirizzi ha offuscato in qualche modo la linea. Pensala in questo modo: quando una CPU poteva elaborare un dato in un'istruzione, era scalare.

In questi giorni uno scalare è un valore singolare e quale valore singolare può essere definito in modo diverso tra lingue diverse. numeri interi, float, caratteri, stringhe, valori booleani ed enum sono, per la maggior parte, considerati scalari in questi giorni. Matrici, elenchi, alberi, oggetti, ecc. Non lo sono.

(* Dico 1 byte per chiarire le cose, ma tecnicamente sto parlando dei giorni in cui 6 bit sono stati più comunemente usati su schede perforate, ad esempio e in seguito su strisce magnetiche)

Disclaimer: non sono in grado di trovare riferimenti su questo su Internet, ho ottenuto le informazioni a scuola e da vecchi libri, tra cui (penso): Tabelle matematiche e altri aiuti al calcolo dal 1944. Detto questo, la mia memoria è non quello che era, quindi se qualcuno può modificare / confermare o negare la mia risposta, sarebbe bello.


9

Uno scalare è un semplice valore numerico singolo (come in 1, 2/3, 3,14, ecc.), Generalmente intero, punto fisso o float (singolo o doppio), al contrario di un array, struttura, oggetto, vettore complesso ( componenti reali più immaginari o magnitudo più angolo), tipo di dati vettoriale o matrice (ecc.) di dimensione superiore che contiene più di un singolo valore numerico.

Tuttavia, si noti che un grande tipo di dati molto complessi del tipo che può anche essere appiattito e rappresentato in byte di memoria a 8 bit del computer può anche essere rappresentato come un singolo numero scalare binario molto lungo / grande. Turing ha usato questa tecnica per rappresentare interi programmi per computer come un solo numero scalare.


Ciò consente concetti come numeri illegali e numeri primi illegali - rappresentazioni numeriche di programmi "illegali".
Andrew,

Uno scalare non deve essere numerico. Una stringa, un valore booleano o una data / ora è anche uno scalare.
david.pfx,

Quindi cosa succede se creo una classe complessa di date basata su campi di diversi scalari (ad esempio un int per il mese, uno per l'anno e uno per il giorno)?
Pierre Arlaud,

1
@ david.pfx: una stringa se vista come una matrice di caratteri non è scalare.
MSalters,

1
@MSalters: Certo, e neanche un numero intero visto come un array di bit. Tutto ciò che può essere archiviato e recuperato come un singolo valore anonimo immutabile è uno scalare e la maggior parte delle lingue ti consente di farlo con stringa, data, complesso, punto ecc., Anche se possono anche essere visualizzati in altri modi.
david.pfx,

1

La parola scalare deriva dalla parola latina scalaris, una forma aggettivale di scala (latino per "scala"). Anche la parola inglese "scale" deriva da scala. fonte

Uno scalare è una variabile che contiene un valore individuale.

Per esempio:

Variabile scalare : supponi che stai cercando di rappresentare i nomi di vari studenti come un insieme di variabili. Ciascuna delle singole variabili è una variabile scalare come segue

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

Funzioni scalari : le funzioni scalari SQL restituiscono un singolo valore, basato sul valore di input.

UCASE() - Converts a field to upper case
LCASE() - Converts a field to lower case
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.