web-dev-qa-db-fra.com

Que signifie un type de données primitif?

Ma compréhension d'un type de données primitif est que

Il s'agit d'un type de données fourni implicitement par un langage (les autres sont des classes définies par l'utilisateur)

Ainsi, différentes langues ont différents ensembles de types de données qui sont considérés comme primitifs pour cette langue particulière. Est-ce correct?

Et quelle est la différence entre un "type de données de base" et un "type de données intégré". Wikipedia indique qu'un type de données primitif est l'un des deux.

PS - Pourquoi le type "chaîne" est-il considéré comme un type primitif dans SNOBOL4 et non dans Java?

42
jsp99

Cela dépend en quelque sorte de la langue.

Par exemple, dans des langages comme C et C++, vous avez un certain nombre de types scalaires intégrés - int, float, double, char, etc. Ils sont "primitifs" dans le sens où ils ne peuvent pas être décomposés en composants plus simples. À partir de ces types de base, vous pouvez définir de nouveaux types - types de pointeurs, types de tableaux, types de structures, types d'unions, etc.

Ensuite, vous avez un langage comme le LISP à l'ancienne, où tout est soit un atome ou une liste . Encore une fois, selon la définition ci-dessus, un atom est "primitif" dans le sens où il ne peut pas être décomposé en quelque chose de plus simple.

Modifier

En ce qui me concerne, les termes "primitif", "de base" et "intégré" sont à peu près interchangeables. Si vous voulez obtenir vraiment pédant, cependant, vous pouvez distinguer les types qui sont "intégrés" (ceux explicitement fournis par la définition du langage) et les types dérivés des types intégrés qui sont toujours "primitifs" ou "basiques" en ce sens qu'ils ne peuvent pas être décomposés en éléments plus simples. La fonction typedef de C 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 à partir du type flottant intégré, avec la contrainte qu'il ne peut pas prendre de valeurs en dehors de la plage [-90.0, 90.0]. Il s'agit toujours d'un type primitif ou basique 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 type comme BLISS.

34
John Bode

Du point de vue Java:

En Java, il existe une distinction très claire entre les types primitifs et non primitifs.

Une variable d'un type primitif contient directement la valeur de ce type (en d'autres termes, ce sont types de valeur ).

Une variable de type non primitif ne contient pas directement la valeur; il s'agit plutôt d'une référence (similaire à un pointeur) à un objet. (Il n'est pas possible dans Java de créer des types de valeurs définis par l'utilisateur).

Java a huit types primitifs: byte, short, int, long, char, boolean, float et double. Tout le reste est un type non primitif.

19
Jesper

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 d'une manière spéciale. Des exemples seraient le Variant dans Delphi et Visual Basic (et l'équivalent Boo, "Duck") et la classe d'objet de base dans la plupart des langages OO.

9
Mason Wheeler

Pourquoi le type "chaîne" est-il considéré comme un type primitif dans SNOBOL4 et non dans Java?

Parce que la spécification de langage Java Java spécifie très clairement ce que signifie le mot "primitif" dans le contexte de Java et que le String de Java n'est pas conforme à cette spécification, tandis que le langage SNOBOL4 La spécification définit ce que signifie "primitif" dans le contexte de SNOBOL4 et la chaîne de SNOBOL4 est conforme à cette spécification.

Il n'y a vraiment plus rien. La spécification de la langue respective définit ce que certains mots signifient et quelque chose correspond à cette description ou non. Par exemple, la spécification du langage C définit la signification du mot "fonction" comme quelque chose qui est très clairement pas ce que le mot "fonction" signifie habituellement, mais c'est la façon dont le mot est utilisé à l'intérieur du Communauté C.

5
Jörg W Mittag

J'ai trouvé des informations et j'ai pensé que cela aiderait les autres réponses. Je veux donc le partager -

Wikipédia 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 comme 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 un support intégré.

Dans la plupart des langages de programmation, tous les types de données de base sont intégrés. De plus, de nombreux langages fournissent également un ensemble de types de données composites (type "string" en Java).

Je voudrais le dire de cette façon -
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 le caractère ne peut pas être "décomposé" en aucun type de données (dans la plupart des langages de programmation). Donc c'est un type de données basique)

Le type de chaîne, dans SNOBOL4 est considéré comme primitif. Bien que je ne connaisse pas la raison exacte. C'est à la fois basique et intégré à SNOBOL4.

La spécification Java mentionne clairement la liste des types de données qu'elle considère comme de type primitif. Parce que le type de chaîne n'est pas dans leur spécification , ce n'est pas un type de données primitif dans Java, malgré le fait qu'il soit de type intégré.

0
jsp99

Un type de données "primitif" signifie que vous avez une valeur stockée en mémoire - cette valeur n'a ni méthode ni 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 struts ici), ce n'est pas une primitive. S'il a des méthodes (un objet ou une classe), ce n'est pas une primitive.

0
JoshRagem