Depende del idioma.
Por ejemplo, en lenguajes como C y C ++, tiene un número de tipos incorporados escalares - int
, float
, double
, char
, etc Estas son "primitivo" en el sentido de que no se pueden descomponer en componentes más simples. A partir de estos tipos básicos, puede definir nuevos tipos: tipos de puntero, tipos de matriz, tipos de estructura, tipos de unión, etc.
Entonces tienes un lenguaje como la vieja escuela Lisp, donde todo es un átomo o una lista . Nuevamente, según la definición anterior, un átomo es "primitivo" en el sentido de que no puede descomponerse en algo más simple.
Editar
En lo que a mí respecta, los términos "primitivo", "básico" e "incorporado" son bastante intercambiables. Sin embargo, si desea ser realmente pedante, puede distinguir entre los tipos que están "incorporados" (aquellos proporcionados explícitamente por la definición del lenguaje) y los tipos derivados de los tipos incorporados que aún son "primitivos" o "básicos". en que no se pueden descomponer en elementos más simples. C'stypedef
La función le permite crear nuevos nombres de tipo para los tipos existentes. Ada le permite crear nuevos tipos escalares que tienen restricciones sobre 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]. Todavía es un tipo primitivo o básico en el sentido de que no puede desglosarse en ningún componente más simple, pero como está definido por el usuario, no se considera un tipo "incorporado".
Una vez más, estos conceptos son un poco confusos, y realmente depende del contexto. Por ejemplo, la noción de un tipo "incorporado" no tiene sentido para un lenguaje sin tipo como BLISS.
char
un tipo primitivo yString
un tipo compuesto.Desde la perspectiva de Java :
En Java, hay una distinción muy clara entre 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 tipo no primitivo no contiene el valor directamente; en cambio, es una referencia (similar a un puntero) a un objeto. (No es posible en Java crear tipos de valores definidos por el usuario).
Java tiene ocho tipos primitivos:
byte
,short
,int
,long
,char
,boolean
,float
ydouble
. Cualquier otra cosa es de tipo no primitivo.fuente
String
hace tener un estatus especial en el idioma (se pone literales, está en la firmamain
, hay internar que supongo que se encuentra habilitado explícitamente por los JLS, es automágicamente disponible, etc.) pero no es un primitivo tipo de datos. Uno podría llamarlo incorporado .Un primitivo 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 tiene que saber sobre ellas), pero no todos los tipos de datos incorporados son primitivas.
En algunos idiomas, el compilador tiene un conocimiento incorporado de ciertos tipos que se basan en otras cosas, porque tiene que ser capaz de tratarlos de una manera especial. 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 lenguajes OO.
fuente
Debido a que la Especificación del lenguaje Java especifica muy claramente lo que significa la palabra "primitivo" en el contexto de Java, y Java
String
no se ajusta a esta especificación, mientras que la Especificación del lenguaje SNOBOL4 define lo que significa "primitivo" en el contexto de la cadena SNOBOL4 y SNOBOL4 se ajusta a esa especificación.Realmente no hay nada más. La especificación del idioma 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 lo que la palabra "función" generalmente significa, pero así es como se usa la palabra dentro de la comunidad C.
fuente
Un tipo de datos 'primitivo' significa que tiene un valor almacenado en la memoria; este valor no tiene métodos ni estructura interna. Un primitivo solo puede ser operado por operaciones externas.
En Java, las primitivas son números (int, long, etc.) y char. http://docs.oracle.com/javase/tutorial/java/nutsandbolts/datatypes.html
Si su valor tiene estructura (estoy pensando en puntales aquí), entonces no es primitivo. Si tiene métodos (un objeto o clase) no es un primitivo.
fuente
int
tipo de datos hace tener métodos ...var myString = 3.ToString();
(Ver Int32.ToString () ). Tengaint
en cuenta que en C # es sinónimo deInt32
, es decir,Int32
es un tipo primitivo (a diferencia de Java, dondeInteger
es diferente deint
). Por lo tanto,3.ToString()
en C # no implica el boxeo!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 tipos básicos.
Un tipo incorporado es un tipo de datos para el cual el lenguaje de programación proporciona soporte incorporado.
En la mayoría de los lenguajes de programación, todos los tipos de datos básicos están integrados. 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 de "char", pero el char no se puede "desglosar" en ningún tipo de datos (en la mayoría de la programación idiomas). Entonces es un tipo de datos básico)
Tipo de cadena, en SNOBOL4 se considera primitivo. Aunque no sé la razón exacta por qué. 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, a pesar de ser un tipo incorporado.
fuente
Las primitivas son tipos de datos fundamentales proporcionados por el propio lenguaje. Ejemplo en lenguaje C son los tipos de datos int, float, 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 almacene 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.
Edite con más explicaciones y aborde el comentario . Pienso que las primitivas son variables que vinieron originalmente con el lenguaje y no variables 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.
Responda su comentario: 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 una cadena en C ++. Esta no es una variable central y se declara usando la nueva palabra clave. Entonces no es primitivo.
fuente
string
tipo de datos como tal; Las cadenas se representan como agregados del tipo primitivochar
. C ++ introdujo unstring
tipo de datos adecuado , pero si es o no un tipo "primitivo" depende de a quién se le pregunte. Personalmente, no lo clasificaría como tal. Sin embargo, clasificaría un tipo de cadena BASIC de la vieja escuela como un tipo primitivo, por razones que probablemente sean completamente arbitrarias.Para comprender mejor el concepto de tipos primitivos y tipos de datos definidos por el usuario, todo lo que falta a las otras respuestas es el concepto de
compiler
.Si comprende el concepto de que los lexemas se seleccionen como tokens , sabrá que las primitivas son los únicos tipos de datos que un compilador conoce por sí mismo.
fuente