Cela dépend de la langue.
Par exemple, dans des langages comme C et C ++, vous avez un certain nombre de types intégrés scalaires - int
, float
, double
, char
, etc. Ce sont des « primitifs » dans le sens où ils ne peuvent pas être décomposés en éléments plus simples. À partir de ces types de base, vous pouvez définir de nouveaux types - types de pointeur, types de tableau, types de structure, types d'union, etc.
Ensuite, vous avez une langue comme le Lisp de la vieille école, où tout est soit un atome, soit une liste . Là encore, selon la définition ci-dessus, un atome est "primitif" en ce sens qu'il ne peut être décomposé en quelque chose de plus simple.
modifier
En ce qui me concerne, les termes "primitif", "basique" et "intégré" sont assez interchangeables. Cependant, si vous voulez être vraiment pédant, vous pouvez distinguer les types qui sont "intégrés" (ceux explicitement fournis par la définition du langage) des types dérivés des types intégrés qui sont toujours "primitifs" ou "de base". en ce qu'ils ne peuvent pas être décomposés en éléments plus simples. Ctypedef
Cette fonctionnalité vous permet de créer de nouveaux noms de types pour les types existants. Ada vous permet de créer de nouveaux types scalaires soumis à des contraintes. Par exemple, vous pouvez dériver un type Latitude du type flottant intégré, avec la contrainte qu'il ne peut pas accepter de valeurs en dehors de la plage [-90.0, 90.0]. Il s'agit toujours d'un type primitif ou de base, dans la mesure où il ne peut pas être décomposé en composants plus simples, mais comme il est défini par l'utilisateur, il n'est pas considéré comme un type "intégré".
Encore une fois, ces concepts sont un peu flous et cela dépend vraiment du contexte. Par exemple, la notion de type "intégré" n'a pas de sens pour un langage sans typage comme BLISS.
char
un type primitif etString
un type composé.Du point de vue de Java :
En Java, il existe une distinction très claire entre les types primitifs et non primitifs.
Une variable de type primitif contient directement la valeur de ce type (en d’autres termes, il s’agit de types valeur ).
Une variable de type non primitif ne contient pas directement la valeur; au lieu de cela, il s'agit d'une référence (similaire à un pointeur) à un objet. (Il n'est pas possible en Java de créer des types de valeur définis par l'utilisateur).
Java a huit types primitifs:
byte
,short
,int
,long
,char
,boolean
,float
etdouble
. Tout le reste est un type non primitif.la source
String
fait un statut particulier dans la langue (il obtient littéraux, il est dans la signaturemain
, il y a interner que je présume est explicitement autorisé par les JLS, il est automagiquement disponible, etc.) , mais il n'est pas une primitive de type de données. On pourrait appeler cela intégré .Une primitive est un type de données de base qui n'est pas construit à partir d'autres types de données. Il ne peut représenter qu'une seule valeur. Toutes les primitives sont des types de données intégrés par nécessité (le compilateur doit les connaître), mais tous les types de données intégrés ne sont pas des primitives.
Dans certaines langues, le compilateur a une connaissance intégrée de certains types qui sont construits à partir d’autres choses, car il doit pouvoir les traiter de manière spéciale. Les exemples sont les variantes dans Delphi et Visual Basic (et l'équivalent de Boo, "Duck") et la classe d'objets de base dans la plupart des langages OO.
la source
Parce que la spécification de langage Java spécifie très clairement ce que le mot "primitive" signifie dans le contexte de Java et que celui-ci
String
n'est pas conforme à cette spécification, alors que la spécification de langage SNOBOL4 définit ce que "primitive" signifie dans le contexte de la chaîne SNOBOL4 et SNOBOL4 conforme à cette spécification.Il n'y a vraiment rien de plus. La spécification du langage respectif définit la signification de certains mots. Quelque chose correspond à cette description ou non. Par exemple, la spécification du langage C définit la signification du mot "fonction" comme étant quelque chose qui n'est clairement pas ce que le mot "fonction" signifie habituellement, mais c'est la façon dont le mot est utilisé dans la communauté C.
la source
Un type de données 'primitive' signifie que vous avez une valeur stockée en mémoire - cette valeur n'a pas de méthode ni de structure interne. Une primitive ne peut être exploitée que par des opérations externes.
En Java, les primitives sont des nombres (int, long, etc.) et char. http://docs.oracle.com/javase/tutorial/java/nutsandbolts/datatypes.html
Si votre valeur a une structure (je pense aux jambes de force ici), alors ce n'est pas une primitive. S'il a des méthodes (un objet ou une classe), ce n'est pas une primitive.
la source
int
type de données n'ont des méthodes ...var myString = 3.ToString();
(voir Int32.ToString () ). Notez queint
dans C # est un synonyme deInt32
, c'est-à-Int32
dire un type primitif (contrairement à Java, oùInteger
est différent deint
). Ainsi,3.ToString()
en C # n'implique pas la boxe!Je suis tombé sur quelques informations et je pensais que cela aiderait les autres réponses. Alors envie de le partager -
Wikipedia dit -
En informatique, le type de données primitif est l’un des suivants:
Un type de base est un type de données fourni par un langage de programmation en tant que bloc de construction de base. La plupart des langages permettent la construction récursive de types composites plus complexes à partir de types de base.
Un type intégré est un type de données pour lequel le langage de programmation fournit une prise en charge intégrée.
Dans la plupart des langages de programmation, tous les types de données de base sont intégrés. En outre, de nombreux langages fournissent également un ensemble de types de données composites (type "chaîne" en Java).
Je voudrais le dire ainsi -
Un type de données de base est un type de données qui ne peut pas être décomposé davantage (le type "chaîne" peut être créé à partir de "char", mais char ne peut être "décomposé" en un type de données langues). C’est donc un type de données de base)
Le type de chaîne, dans SNOBOL4, est considéré comme primitif. Bien que je ne connaisse pas la raison exacte pourquoi. C'est à la fois basique et intégré dans SNOBOL4.
La spécification Java mentionne clairement la liste des types de données qu’il considère être du type primitif. Étant donné que le type de chaîne ne figure pas dans leurs spécifications , il ne s'agit pas d'un type de données primitif en Java, même s'il s'agit d'un type intégré.
la source
Les primitives sont des types de données fondamentaux fournis par le langage lui-même. Les exemples de langage C sont les types de données int, float, char. Il est fourni comme une partie fondamentale de la langue.
Les non primitives sont des variables ou des objets définis par l'utilisateur. Par exemple, vous pouvez définir un objet qui stocke des données ou vous pouvez utiliser struct en C pour définir vos propres variables. Celles-ci ne sont pas primitives car il fallait d'abord les définir pour pouvoir les utiliser.
Editez avec plus d'explications et en répondant au commentaire que je considère comme primitif comme des variables fournies à l'origine avec le langage et non comme des variables telles que String en C ++ que vous devez déclarer à l'aide du mot-clé New. Cela en fait un objet, donc une chaîne ne serait pas une primitive.
Répondez à votre commentaire: Cela a probablement à voir avec l'implémentation de la variable. Si cela faisait partie du noyau de la langue, c'est primitif. Si ce n'est pas le cas Exemple: String en C ++. Ce n'est pas une variable principale et est déclaré avec le mot-clé New. Donc, ce n'est pas primitif.
la source
string
type de données en tant que tel; les chaînes sont représentées sous forme d'agrégats du type primitifchar
. C ++ a introduit unstring
type de données approprié , mais le type "primitif" lui-même dépend de qui vous demandez. Personnellement, je ne le classerais pas comme tel. Cependant, je classerais un type de chaîne BASIC de la vieille école en un type primitif, pour des raisons probablement totalement arbitraires.Pour mieux comprendre le concept de types primitifs et les types de données définis par l'utilisateur, tout ce qui manque aux autres réponses est le concept de
compiler
.Si vous comprenez le concept de sélection de lexèmes en tant que jetons , vous saurez que les primitives sont les seuls types de données qu'un compilateur connaît par lui-même.
la source