O que significa quando os dados são escalares?

79

Não sei exatamente o que escalar significa, mas estou tentando ver se estou pensando corretamente. Escalar está relacionado à arbitrariedade em que o tipo de dados pode ser qualquer tipo ou um sistema não pode saber com antecedência quais são os dados.

Ryan M
fonte
Curiosidade: a plataforma XML em que passo meus dias recentemente (usando XQuery) gosta de chamar esses valores de Atomic. Eu acho que isso está intimamente relacionado, adicionando comentários para termos de referência / pesquisa.
charles ross

Respostas:

113

O termo "escalar" vem da álgebra linear , onde é usado para diferenciar um único número de um vetor ou matriz. O significado na computação é semelhante. Ele distingue um valor único como um número inteiro ou flutuante de uma estrutura de dados como uma matriz. Essa distinção é muito proeminente em Perl, onde o $sigilo (que se assemelha a um 's') é usado para denotar uma variável escalar e um @sigil (que se assemelha a um 'a') indica uma matriz. Não tem nada a ver com o tipo do elemento em si. Pode ser um número, caractere, sequência ou objeto. O que importa ser chamado de escalar é que existe um deles.

Karl Bielefeldt
fonte
6
Este é um bom exemplo de como o mesmo termo pode significar coisas diferentes em contextos diferentes. Em linguagens como C ou Pascal, escalar refere-se a tipos simples de "blocos de construção" como intou char, tipos não estruturados como objetos (mesmo se houver apenas um).
Caleb
2
Eu também acrescentaria que, além de matrizes, um escalar não é uma estrutura de dados composta, como uma struct ou classe. A diferença de ser uma matriz é de vários elementos do mesmo tipo, enquanto uma estrutura é de vários elementos de tipos arbitrários.
1
Além disso, uma string pode ser um valor não escalar. Idiomas como o Perl o tratam como escalar, mas em qualquer linguagem baseada em C eu diria que é uma matriz ou objeto.
1
@Karl Não conheço Perl, mas você pode esclarecer o que é um sigilo ?
Geek
2
@ Geek, é um símbolo que você coloca antes de uma variável, como $variable. Veja a página da Wikipedia .
Karl Bielefeldt
27

Um escalar é simplesmente uma variável que possui um valor individual . Para os propósitos desta discussão, vamos supor que um escalar seja um número único, e não uma coleção de números.

Por exemplo, o resultado de uma consulta SQL que retorna um número em vez de uma tupla, assim como o método ExecuteScalar () na classe SQLCommand , que retorna o valor da primeira coluna da primeira linha no conjunto de resultados retornado pela consulta. Geralmente, é usado para recuperar um valor agregado, como COUNT ou AVERAGE, o ID de um novo registro ou o número de registros processados ​​por uma consulta.

Robert Harvey
fonte
19

Um mnemônico suplementar, à grande resposta de Karl Bielefeldt:

Uma maneira simples de pensar sobre isso é "isso pode ser em escala?"

Um número inteiro pode estar em uma escala.

Um número inteiro de tamanho fixo pode estar em uma escala, por exemplo, de -2147483648 a 2147483647.

Um número real pode estar em uma escala.

Um caractere, um valor booleano ou um decimal de precisão fixa podem estar em uma escala. Mesmo uma string pode estar em uma escala (usamos isso na classificação).

Daí "escalar".

Uma linha do banco de dados não pode estar em uma escala. Um número complexo não pode estar em uma escala. Um objeto que representa uma mensagem de email não pode estar em uma escala. Uma matriz, vetor ou matriz não pode estar em uma escala.

Jon Hanna
fonte
10
Se uma string pode estar em uma escala, por que não uma matriz? "isso pode ser em escala?" não dá resultados intuitivos, pelo menos para mim.
VBCPP
2
@VBCPP, em uma escala que contém {1, 2} {2, 1} fica? Antes ou depois? Agora, concedido, podemos impor uma ordem, mas não há uma ordem clara. Lembre-se também de que estou tentando oferecer uma maneira fácil de pensar sobre isso (a resposta de Karl Bielefeldt faz um bom trabalho em fornecer uma resposta mais precisa à IMO, e eu não tentaria melhorá-la, apenas suplemente). Dito isto, há um elemento de contexto aqui. Uma string pode ou não ser considerada escalar, dependendo do contexto; no SQL é escalar por um bom motivo, em C não é, também por um bom motivo.
Jon Hanna
7
Isso está errado .
Andrew Medico
2
Eu discordo que é "simplesmente errado", obviamente, embora eu ache que Karl Bielefeldt deva entender. Este é um mnemótico demorado demais para ser um comentário, essa é a melhor resposta.
Jon Hanna
2
Acho que o comentário "está errado" vem da idéia de que a resposta não faz sentido e sua resposta à pergunta do @VBCPP não responde à pergunta dele. Eu com certeza gosto da idéia do mnemônico, mas você ainda precisa explicar o significado de, por exemplo, um número inteiro em uma escala. Pode muito bem estar falando sobre colocar um gato na TV.
turboladen
10

Como é o caso de muitos termos em computação; a origem da palavra está relacionada a mais propriedades físicas. O termo escalar é relativamente antigo em computação. Sua definição é menos rigorosa atualmente. Quando você armazena dados na memória do computador, esses dados podem caber em um endereço (1 byte *) ou não. Quando isso acontecia, era chamado de escalar; quando não era, era chamado de composto. Principalmente porque as CPUs podiam lidar apenas com um endereço / parte de dados (= 1 byte) por vez. Conforme afirmado por @Karl Bielefeldt; o termo foi realmente tirado da álgebra.

Chamamos uma string de string porque é uma string de caracteres. Um caractere é / era um escalar, enquanto uma string é / era um composto. Armazenar 1 dado (um dado) em vários endereços embaçou um pouco a linha. Pense assim: quando uma CPU podia processar um dado em uma instrução, era escalar.

Atualmente, um escalar é qualquer valor singular, e o que é um valor singular pode ser definido de maneira diferente entre diferentes idiomas. números inteiros, flutuantes, caracteres, seqüências de caracteres, booleanos e enumerações são, na maioria dos casos, escalares considerados hoje em dia. Matrizes, listas, árvores, objetos etc. não são.

(* Digo 1 byte para manter as coisas claras, mas tecnicamente estou falando dos dias em que 6 bits eram mais comumente usados ​​em cartões perfurados, por exemplo, e mais tarde em tiras magnéticas)

Isenção de responsabilidade: não consigo encontrar nenhuma referência disso na internet, obtive as informações da escola e de livros antigos, entre os quais (penso): Tabelas Matemáticas e outras ajudas à computação de 1944. Dito isto, minha memória é não o que costumava ser; portanto, se alguém puder alterar / confirmar ou negar minha resposta, seria bom.

Evert
fonte
9

Um escalar é um valor numérico único e simples (como em 1, 2/3, 3.14, etc.), geralmente inteiro, ponto fixo ou flutuante (simples ou duplo), em oposição a uma matriz, estrutura, objeto, vetor complexo ( componentes reais mais imaginários ou magnitude mais ângulos), vetor dimensional mais alto ou matriz (etc.) que contém mais de um único valor numérico.

No entanto, observe que um tipo de dados grande e muito complexo do tipo que também pode ser achatado e representado em bytes de 8 bits da memória do computador também pode ser representado como um único número escalar binário muito longo / grande. Turing usou essa técnica para representar programas de computador inteiros como apenas um número escalar.

hotpaw2
fonte
Isso permite conceitos como números ilegais e números primos ilegais - representações numéricas de programas "ilegais".
Andrew
Um escalar não precisa ser numérico. Uma string, booleana ou data / hora também é um escalar.
David.pfx
E se eu criar uma classe complexa de data com base em campos de vários escalares (por exemplo, um int para o mês, um para o ano e um para o dia)?
Pierre Arlaud
1
@ david.pfx: Uma string quando vista como uma matriz de caracteres não é escalar.
MSalters
1
@ MSalters: Claro, e um número inteiro visto como uma matriz de bits também não é. Tudo o que pode ser armazenado e recuperado como um único valor anônimo imutável é escalar e a maioria dos idiomas permite fazer isso com string, data, complexo, ponto etc., mesmo que também possam ser vistos de outras maneiras.
David.pfx
1

A palavra escalar deriva da palavra latina scalaris, uma forma adjetiva de scala (latim para "escada"). A palavra em inglês "escala" também vem de scala. Fonte

Um escalar é uma variável que possui um valor individual.

Por exemplo:

Variável escalar : diga que você está tentando representar os nomes de vários alunos como um conjunto de variáveis. Cada uma das variáveis ​​individuais é uma variável escalar da seguinte maneira

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

Funções escalares : As funções escalares SQL retornam um único valor, com base no valor de entrada.

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