Eu não acho que eles sejam intercambiáveis. Eles são freqüentemente semelhantes, mas a diferença existe e parece estar principalmente no que eles contrastam e no que é relevante no contexto.
Os escalares são tipicamente contrastados com compostos , como matrizes, mapas, conjuntos, estruturas, etc. Um escalar é um valor "único" - inteiro, booleano, talvez uma string - enquanto um composto é composto de vários escalares (e possivelmente referências a outros compostos). "Escalar" é usado em contextos em que a distinção relevante é entre valores simples / simples / atômicos e valores compostos.
Os tipos primitivos , no entanto, são contrastados com, por exemplo, os tipos de referência e são usados quando a distinção relevante é "Isso é diretamente um valor ou é uma referência a algo que contém o valor real?", Como nos tipos primitivos x referências do Java . Eu vejo isso como uma distinção de nível um pouco inferior ao escalar / composto, mas não exatamente.
Realmente depende do contexto (e freqüentemente que família de idiomas está sendo discutida). Para pegar um exemplo possivelmente patológico: strings. Em C, uma string é um composto (uma matriz de caracteres), enquanto em Perl, uma string é um escalar. Em Java, uma sequência é um objeto (ou tipo de referência). No Python, tudo é (conceitualmente) um objeto / tipo de referência, incluindo strings (e números).
Há muita confusão e mau uso desses termos. Muitas vezes, um é usado para significar outro. Aqui está o que esses termos realmente significam.
"Nativo" refere-se a tipos incorporados ao idioma, em vez de serem fornecidos por uma biblioteca (mesmo uma biblioteca padrão), independentemente de como eles são implementados. As seqüências de caracteres Perl fazem parte do idioma Perl, portanto, são nativas no Perl. C fornece semântica de strings sobre ponteiros para chars usando uma biblioteca; portanto, o ponteiro para char é nativo, mas as strings não são.
"Atômico" refere-se a um tipo que não pode mais ser decomposto. É o oposto de "composto" . Os compostos podem ser decompostos em uma combinação de valores atômicos ou outros compostos. Inteiros nativos e números de ponto flutuante são atômicos. Frações, números complexos, contêineres / coleções e seqüências de caracteres são compostos.
"Escalar" - e esse é o que confunde a maioria das pessoas - refere-se a valores que podem expressar escala (daí o nome), como tamanho, volume, contagens, etc. Inteiros, números de ponto flutuante e frações são escalares. Números complexos, booleanos e seqüências de caracteres NÃO são escalares. Algo que é atômico não é necessariamente escalar e algo que é escalar não é necessariamente atômico. Os escalares podem ser nativos ou fornecidos por bibliotecas.
Alguns tipos têm classificações ímpares. Os tipos BigNumber, geralmente implementados como uma matriz de dígitos ou números inteiros, são escalares, mas tecnicamente não são atômicos. Eles podem parecer atômicos se a implementação estiver oculta e você não puder acessar os componentes internos. Mas os componentes estão apenas ocultos, então a atomicidade é uma ilusão. Eles são quase sempre fornecidos em bibliotecas, portanto não são nativos, mas poderiam ser. Na linguagem de programação do Mathematica, por exemplo, grandes números são nativos e, como não há como um programa do Mathematica os decompor em seus blocos de construção, eles também são atômicos nesse contexto, apesar do fato de serem compostos sob a capas (onde você não está mais no mundo da linguagem Mathematica).
Essas definições são independentes do idioma que está sendo usado.
fonte
Simplificando, parece que um tipo 'escalar' se refere a um único item, em oposição a um composto ou coleção. Portanto, os escalares incluem valores primitivos e coisas como um valor enum.
http://ee.hawaii.edu/~tep/EE160/Book/chap5/section2.1.3.html
Talvez o termo 'escalar' possa ser um retrocesso para C:
http://www.open-std.org/jtc1/sc22/wg21/docs/papers/1995/N0774.pdf
Estou curioso para saber se isso se refere a se esses itens teriam um valor de 'escala'? - Como contar números.
fonte
Gosto da resposta de Scott Langeberg porque é concisa e apoiada por links oficiais. Eu votaria na resposta de Scott, se pudesse.
Suponho que o tipo de dados "primitivo" possa ser considerado tipo de dados primário, para que os tipos de dados secundários sejam derivados dos tipos de dados primários. A derivação é através da combinação, como uma estrutura C ++. Uma estrutura pode ser usada para combinar tipos de dados (como int e char) para obter um tipo de dados secundário. O tipo de dados definido por estrutura é sempre um tipo de dados secundário. Os tipos de dados primários não são derivados de nada, são dados na linguagem de programação.
Eu tenho um paralelo ao primitivo, sendo a nomenclatura que significa primária. Esse paralelo é "expressão regular". Eu acho que a nomenclatura "regular" pode ser entendida como "reguladora". Assim, você tem uma expressão que regula a pesquisa.
Etimologia escalar ( http://www.etymonline.com/index.php?allowed_in_frame=0&search=scalar&searchmode=none ) significa semelhante a uma escada. Eu acho que a maneira como isso se relaciona com a programação é que uma escada tem apenas uma dimensão: quantos degraus do final da escada. Um tipo de dados escalar possui apenas uma dimensão, representada por um único valor.
Eu acho que em uso, primitivo e escalar são intercambiáveis. Existe algum exemplo de uma primitiva que não é escalar ou de uma escalar que não é primitiva?
Embora intercambiável, primitivo refere-se ao tipo de dados que é um componente básico de outros tipos de dados e um primitivo não é composto de outros tipos de dados.
Escalar refere-se a ter um valor único. Escalar contrasta com o vetor matemático. Um vetor não é representado por um único valor porque (usando um tipo de vetor como exemplo) é necessário um valor para representar a direção do vetor e outro valor necessário para representar a magnitude do vetor.
Links de referência: http://whatis.techtarget.com/definition/primitive http://en.wikipedia.org/wiki/Primitive_data_type
fonte
Em C, tipos de enumeração, caracteres e as várias representações de números inteiros formam uma classe de tipo mais geral chamada tipos escalares. Portanto, as operações que você pode executar em valores de qualquer tipo escalar são as mesmas que para números inteiros.
fonte
tipo nulo é a única coisa que mais realisticamente se ajusta à definição de um "tipo escalar". Até a serialização de 'None' como 'N.' ajustar-se a uma palavra de 16 bits tradicionalmente escalar - ou mesmo um único bit com vários valores possíveis - não é um "dado único".
fonte