¿Qué significa un tipo de datos primitivo?

38

Mi comprensión de un tipo de datos primitivo es que

  

Es un tipo de datos proporcionado por un idioma implícitamente (otros son clases definidas por el usuario)

Por lo tanto, diferentes idiomas tienen diferentes conjuntos de tipos de datos que se consideran primitivos para ese idioma en particular. ¿Es eso correcto?

Y cuál es la diferencia entre un "tipo de datos básico" y un "tipo de datos incorporado". Wikipedia dice que un tipo de datos primitivo es cualquiera de los dos.

PS: ¿Por qué se considera que el tipo de "cadena" es un tipo primitivo en SNOBOL4 y no en Java?

    
pregunta jsp99 14.03.2012 - 15:52

8 respuestas

31

Depende del tipo de idioma.

Por ejemplo, en lenguajes como C y C ++, tienes una cantidad de tipos escalares incorporados: int , float , double , char , etc. Estos son "primitivos" en el sentido que no pueden descomponerse en componentes más simples. Desde estos tipos básicos puede definir nuevos tipos: tipos de punteros, tipos de matriz, tipos de estructura, tipos de unión, etc.

Luego tienes un lenguaje como el de la vieja escuela Lisp, donde todo es un átomo o una lista . De nuevo, según la definición anterior, un átomo es "primitivo" en el sentido de que no se puede descomponer en algo más simple.

Edit

En lo que a mí respecta, los términos "primitivo", "básico" y "incorporado" son prácticamente intercambiables. Sin embargo, si desea obtener realmente pedante, puede distinguir entre los tipos que están "incorporados" (aquellos proporcionados explícitamente por la definición de idioma) y los tipos derivados de los tipos incorporados que aún son "primitivo" o "básico" en el sentido de que no se pueden descomponer en elementos más simples. La facilidad de typedef de C le permite crear nuevos nombres de tipo para los tipos existentes. Ada te permite crear nuevos tipos escalares que tienen restricciones en ellos. Por ejemplo, puede derivar un tipo de latitud del tipo flotante incorporado, con la restricción de que no puede tomar valores fuera del rango [-90.0, 90.0]. Sigue siendo un tipo primitivo o básico en el sentido de que no se puede dividir en componentes más simples, pero dado que es definido por el usuario, no se considera un tipo "incorporado".

Una vez más, estos conceptos son un poco borrosos, y realmente depende del contexto. Por ejemplo, la noción de un tipo "incorporado" no tiene sentido para un lenguaje sin tipo de letra como BLISS.

    
respondido por el John Bode 14.03.2012 - 16:11
18

Desde la perspectiva Java :

En Java, hay una distinción muy clara entre los tipos primitivos y no primitivos.

Una variable de un tipo primitivo contiene directamente el valor de ese tipo (en otras palabras, son tipos de valor ).

Una variable de un tipo no primitivo no contiene el valor directamente; en cambio, es una referencia (similar a un puntero) a un objeto. (En Java no es posible crear tipos de valor definidos por el usuario).

Java tiene ocho tipos primitivos: byte , short , int , long , char , boolean , float y double . Cualquier otra cosa no es un tipo primitivo.

    
respondido por el Jesper 14.03.2012 - 16:39
8

Una primitiva es un tipo de datos básico que no está construido a partir de otros tipos de datos. Solo puede representar un único valor. Todas las primitivas son tipos de datos incorporados por necesidad, (el compilador debe conocerlas), pero no todos los tipos de datos incorporados son primitivas.

En algunos idiomas, el compilador tiene conocimiento incorporado de ciertos tipos que se construyen a partir de otras cosas, porque tiene que ser capaz de tratarlos de una manera especial. Los ejemplos serían la Variante en Delphi y Visual Basic (y el equivalente de Boo, "Duck") y la clase de objeto base en la mayoría de los idiomas OO.

    
respondido por el Mason Wheeler 14.03.2012 - 16:11
5
  

¿Por qué el tipo "cadena" se considera como un tipo primitivo en SNOBOL4 y no en Java?

Debido a que la Especificación del lenguaje Java especifica muy claramente lo que significa la palabra "primitivo" en el contexto de Java, y el String de Java no se ajusta a esta especificación, mientras que la Especificación del lenguaje SNOBOL4 define lo que significa "primitivo" en el El contexto de la cadena SNOBOL4 y SNOBOL4 cumple con esa especificación.

Realmente no hay nada más que eso. La especificación del lenguaje respectivo define lo que significan ciertas palabras y algo se ajusta a esa descripción o no. Por ejemplo, la especificación del lenguaje C define el significado de la palabra "función" como algo que claramente no es no lo que significa la palabra "función", pero esa es la forma en que la palabra se usa dentro de Comunidad C

    
respondido por el Jörg W Mittag 16.03.2012 - 03:04
0

Un tipo de datos 'primitivo' significa que usted tiene un valor almacenado en la memoria; este valor no tiene métodos ni estructura interna. Una primitiva solo puede ser operada por operaciones externas.

En Java, las primitivas son números (int, long, etc.) y char. enlace

Si su valor tiene estructura (estoy pensando en puntales aquí), entonces no es un primitivo. Si tiene métodos (un objeto o una clase) no es un primitivo.

    
respondido por el JoshRagem 14.03.2012 - 16:08
0

Encontré algo de información y sentí que ayudaría a las otras respuestas. Así que quiero compartirlo -

Wikipedia dice -

En informática, el tipo de datos primitivos es uno de los siguientes:

Un tipo básico es un tipo de datos proporcionado por un lenguaje de programación como un bloque de construcción básico. La mayoría de los lenguajes permiten que los tipos compuestos más complicados se construyan recursivamente a partir de los tipos básicos.
Un tipo incorporado es un tipo de datos para el cual el lenguaje de programación brinda soporte integrado.

En la mayoría de los lenguajes de programación, todos los tipos de datos básicos están incorporados. Además, muchos idiomas también proporcionan un conjunto de tipos de datos compuestos (tipo "cadena" en Java).

Me gustaría decirlo de esta manera -
Un tipo de datos básico es un tipo de datos que no se puede desglosar más (el tipo de "cadena" se puede hacer desde "char", pero no se puede "dividir" en ningún tipo de datos (en la mayoría de los lenguajes de programación). Por lo tanto, es un tipo de datos básico)

El tipo de cadena, en SNOBOL4, se considera primitivo. Aunque no sé la razón exacta. Es tanto básico como integrado en SNOBOL4.

La especificación de Java menciona claramente la lista de tipos de datos que considera de tipo primitivo. Debido a que el tipo de cadena no está en su especificación , no es un tipo de datos primitivo en Java, por favor de ser un tipo incorporado.

    
respondido por el jsp99 16.03.2012 - 14:53
-2

Las primitivas son tipos de datos fundamentales proporcionados por el propio lenguaje. Ejemplo en lenguaje C son int, float, tipos de datos char. Se proporciona como parte fundamental del lenguaje.

Las no primitivas son variables u objetos definidos por el usuario. Por ejemplo, puede definir un objeto que almacena datos o puede usar struct en C para definir sus propias variables. Estos no son primitivos porque primero tenía que definirlos para poder usarlos.

  

Ejemplos: empleado, estudiante,   a_very_large_number_that_you_defined_yourself

Edite con más explicación y aborde el comentario Pienso en primitivas como variables que vinieron originalmente con el lenguaje y no como String en C ++ que debe declarar usando la palabra clave New. Eso lo convierte en un objeto, por lo que una cadena no sería primitiva.

Respuesta que comentas: probablemente tenga que ver con la implementación de la variable. Si era parte del núcleo del lenguaje, es primitivo. Si no, no lo es. El ejemplo es String en C ++. Esta no es una variable central y se declara usando una nueva palabra clave. Así que no es primitivo.

    
respondido por el Noname 14.03.2012 - 16:03
-2

Para comprender mejor el concepto de tipos primitivos y tipos de datos definidos por el usuario, lo único que faltan en las otras respuestas es el concepto de compiler .

Si entiende el concepto de lexemas , se seleccionará como tokens , llegará a saber que los primitivos son los únicos tipos de datos que un compilador conoce por sí mismo.

    
respondido por el Amit 09.04.2012 - 22:10

Lea otras preguntas en las etiquetas