Saltar al contenido

Tipo de datos escalares versus primitivos: ¿son lo mismo?

Solución:

No creo que sean intercambiables. Con frecuencia son similares, pero la diferencia existe y parece estar principalmente en lo que se contrasta y lo que es relevante en el contexto.

Escalares se contrastan típicamente con compuestos, como matrices, mapas, conjuntos, estructuras, etc. Un escalar es un valor “único” – entero, booleano, quizás una cadena – mientras que un compuesto está formado por múltiples escalares (y posiblemente referencias a otros compuestos). “Escalar” se usa en contextos donde la distinción relevante es entre valores simples / simples / atómicos y valores compuestos.

Tipos primitivos, sin embargo, se contrastan con, por ejemplo, tipos de referencia, y se utilizan cuando la distinción relevante es “¿Es esto directamente un valor, o es una referencia a algo que contiene el valor real?”, como en los tipos primitivos vs. referencias de Java. Veo esto como una distinción de nivel algo más bajo que escalar / compuesto, pero no del todo.

Realmente depende del contexto (y con frecuencia de qué familia lingüística se está discutiendo). Para tomar uno, posiblemente patológico, ejemplo: cuerdas. En C, una cadena es un compuesto (una matriz de caracteres), mientras que en Perl, una cadena es un escalar. En Java, una cadena es un objeto (o tipo de referencia). En Python, todo es (conceptualmente) un tipo de objeto / referencia, incluidas cadenas (y números).

Hay mucha confusión y mal uso de estos términos. A menudo, uno se usa para significar otro. Esto es lo que realmente significan esos términos.

“Nativo” se refiere a los tipos que están integrados en el lenguaje, a diferencia de los que proporciona una biblioteca (incluso una biblioteca estándar), independientemente de cómo se implementen. Las cadenas de Perl son parte del lenguaje Perl, por lo que son nativas de Perl. C proporciona semántica de cadenas sobre punteros a caracteres utilizando una biblioteca, por lo que el puntero a char es nativo, pero las cadenas no lo son.

“Atómico” se refiere a un tipo que ya no se puede descomponer. Es lo contrario de “compuesto”. Los compuestos se pueden descomponer en una combinación de valores atómicos u otros compuestos. Los enteros nativos y los números de coma flotante son atómicos. Las fracciones, los números complejos, los contenedores / colecciones y las cadenas son compuestos.

“Escalar” – y este es el que confunde a la mayoría de la gente – se refiere a valores que pueden expresar escala (de ahí el nombre), como tamaño, volumen, conteos, etc. Los enteros, números de coma flotante y fracciones son escalares. Los números complejos, booleanos y cadenas son NO escalares. Algo que es atómico no es necesariamente escalar y algo que es escalar no es necesariamente atómico. Los escalares pueden ser nativos o proporcionados por bibliotecas.

Algunos tipos tienen clasificaciones extrañas. Los tipos BigNumber, generalmente implementados como una matriz de dígitos o enteros, son escalares, pero técnicamente no son atómicos. Pueden parecer atómicos si la implementación está oculta y no puede acceder a los componentes internos. Pero los componentes solo están ocultos, por lo que la atomicidad es una ilusión. Casi siempre se proporcionan en bibliotecas, por lo que no son nativos, pero podrían serlo. En el lenguaje de programación de Mathematica, por ejemplo, los números grandes son nativos y, dado que no hay forma de que un programa de Mathematica los descomponga en sus bloques de construcción, también son atómicos en ese contexto, a pesar de que son compuestos bajo el cubre (donde ya no estás en el mundo del lenguaje Mathematica).

Estas definiciones son independientes del idioma que se utilice.

En pocas palabras, parecería que un tipo ‘escalar’ se refiere a un solo elemento, en contraposición a un compuesto o colección. Entonces, los escalares incluyen tanto valores primitivos como cosas como un valor de enumeración.

http://ee.hawaii.edu/~tep/EE160/Book/chap5/section2.1.3.html

Quizás el término ‘escalar’ pueda ser un retroceso a C:

donde los escalares son objetos primitivos que contienen un solo valor y no están compuestos por otros objetos C ++

http://www.open-std.org/jtc1/sc22/wg21/docs/papers/1995/N0774.pdf

Tengo curiosidad por saber si esto se refiere a si estos elementos tendrían un valor de ‘escala’. – Como contar números.

¡Haz clic para puntuar esta entrada!
(Votos: 0 Promedio: 0)



Utiliza Nuestro Buscador

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *