En informatique et en programmation , un type de données (ou simplement type ) est un ensemble de valeurs de données , généralement spécifié par un ensemble de valeurs possibles, un ensemble d'opérations autorisées sur ces valeurs et/ou une représentation de ces valeurs sous forme de types machine. La spécification d'un type de données dans un programme contraint les valeurs possibles qu'une expression , telle qu'une variable ou un appel de fonction, peut prendre. Pour les données littérales, elle indique au compilateur ou à l'interpréteur comment le programmeur entend les utiliser. La plupart des langages de programmation prennent en charge les types de données de base suivants : nombres entiers (de tailles variables), nombres à virgule flottante (qui approchent les nombres réels ), caractères et booléens .
Python , `int`intreprésente un entier de précision arbitraire doté des opérations numériques classiques telles que l'addition, la soustraction et la multiplication. En Java , en revanche , le type `int` intreprésente l'ensemble des entiers 32 bits dont les valeurs sont comprises entre -2 147 483 648 et 2 147 483 647, les opérations arithmétiques provoquant un dépassement de capacité . En Rust, ce type entier 32 bits est noté `int` et génère une panique en cas de dépassement de capacité en mode débogage. i32La plupart des langages de programmation permettent également au programmeur de définir des types de données supplémentaires, généralement en combinant plusieurs éléments d'autres types et en définissant les opérations valides du nouveau type de données. Par exemple, un programmeur pourrait créer un nouveau type de données appelé « nombre complexe » qui comprendrait des parties réelle et imaginaire, ou un type de données de couleur représenté par trois octets indiquant les quantités de rouge, de vert et de bleu, et une chaîne de caractères représentant le nom de la couleur.
Les types de données sont utilisés au sein de systèmes de types , qui offrent diverses manières de les définir, de les implémenter et de les utiliser. Dans un système de types, un type de données représente une contrainte imposée à l'interprétation des données, décrivant la représentation, l'interprétation et la structure des valeurs ou des objets stockés en mémoire. Le système de types utilise les informations de type pour vérifier la correction des programmes qui accèdent aux données ou les manipulent. Un compilateur peut utiliser le type statique d'une valeur pour optimiser l'espace de stockage nécessaire et le choix des algorithmes pour les opérations sur cette valeur. Dans de nombreux compilateurs Cbits , conformément à la spécification IEEE pour les nombres à virgule flottante simple précision . Ils utiliseront donc des opérations spécifiques aux microprocesseurs pour les nombres à virgule flottante (addition, multiplication, etc.).
Définition
syntaxique associée à une variable lors de sa déclaration. Bien qu'utiles pour les systèmes de types avancés tels que les systèmes de types sous-structurels , ces définitions ne fournissent aucune signification intuitive des types.
La définition en termes de représentation était souvent employée dans les langages impératifs tels qu'ALGOL et Pascal , tandis que la définition en termes d'espace de valeurs et de comportement était utilisée dans les langages de plus haut niveau tels que Simula et CLU . Les types incluant un comportement correspondent davantage aux modèles orientés objet , tandis qu'un modèle de programmation structurée tend à ne pas inclure de code et désigne alors de simples structures de données .
Classification
Les types de données peuvent être catégorisés selon plusieurs facteurs :
- Les types de données primitifs , ou types de données intégrés, sont des types inhérents à l'implémentation d'un langage. Les types de données définis par l'utilisateur ne sont pas des types primitifs. Par exemple, les types numériques de Java sont primitifs, tandis que les classes sont définies par l'utilisateur.
- Une valeur de type atomique est une donnée unique qui ne peut être décomposée en éléments constitutifs. Une valeur de type composite ou agrégé est un ensemble de données accessibles individuellement. Par exemple, un entier est généralement considéré comme atomique, bien qu'il soit constitué d'une séquence de bits, tandis qu'un tableau d'entiers est assurément composite.
- Les types de données de base , ou types de données fondamentaux, sont définis axiomatiquement à partir de notions fondamentales ou par énumération de leurs éléments. Les types de données générés , ou types de données dérivés, sont spécifiés et partiellement définis à partir d'autres types de données. Tous les types de base sont atomiques. Par exemple, les entiers sont un type de base défini en mathématiques, tandis qu'un tableau d'entiers est le résultat de l'application d'un générateur de type tableau au type entier.
La terminologie varie – dans la littérature, les termes primitif, intégré, basique, atomique et fondamental peuvent être utilisés de manière interchangeable.
Exemples
Types de données machine
Dans les ordinateurs à électronique numérique, toutes les données sont représentées par des bits (0 et 1) au niveau le plus bas. La plus petite unité de données adressable est généralement un groupe de bits appelé octet (généralement un octet , soit 8 bits). L'unité traitée par les instructions du code machine est appelée mot ( programmation système ou dans les langages de bas niveau . Dans les langages de haut niveau, la plupart des types de données sont abstraits et ne possèdent pas de représentation machine définie par le langage. Le langage C , par exemple, fournit des types tels que les booléens, les entiers, les nombres à virgule flottante, etc., mais la représentation binaire précise de ces types est définie par l'implémentation. Le seul type C possédant une représentation machine précise est le chartype représentant un octet.
Type booléen
Le type booléen représente les valeurs vrai et faux . Bien que seules deux valeurs soient possibles, elles sont plus souvent représentées par un octet ou un mot plutôt que par un seul bit, car le stockage et la récupération d'un bit individuel nécessitent davantage d'instructions machine. De nombreux langages de programmation n'ont pas de type booléen explicite ; ils utilisent plutôt un type entier et interprètent (par exemple) 0 comme faux et les autres valeurs comme vrai. Les données booléennes font référence à la structure logique de l'interprétation du langage par le langage machine. Dans ce cas, un 0 booléen correspond à la valeur logique faux. Vrai est toujours différent de zéro, en particulier 1, également appelé 1 booléen.
Types numériques
Presque tous les langages de programmation proposent un ou plusieurs types de données entiers . Ils peuvent soit fournir un petit nombre de sous-types prédéfinis, limités à certaines plages (comme `int` shortet long`int` et leurs unsignedvariantes en C/C++), soit permettre à l'utilisateur de définir librement des sous-plages, par exemple de 1 à 12 (comme en Pascal / Ada ). Si un type natif correspondant n'existe pas sur la plateforme cible, le compilateur le décomposera en code utilisant les types existants. Par exemple, si un entier 32 bits est demandé sur une plateforme 16 bits, le compilateur le traitera implicitement comme un tableau de deux entiers 16 bits.
Les types de données à virgule flottante représentent certaines valeurs fractionnaires ( nombres rationnels , mathématiquement parlant). Bien que leurs valeurs maximales et leur précision soient limitées, on les appelle parfois, à tort, « réels » (en référence aux nombres réels mathématiques ). Ils sont généralement stockés en interne sous la forme décimale .
Les types de données à virgule fixe sont pratiques pour représenter les valeurs monétaires. Ils sont souvent implémentés en interne sous forme d'entiers, ce qui impose des limites prédéfinies.
Pour s'affranchir des détails d'architecture, un type Bignum ou à précision arbitrairenumeric peut être fourni. Ce type représente un entier ou un nombre rationnel avec une précision limitée uniquement par la mémoire et les ressources de calcul disponibles sur le système. Les implémentations Bignum des opérations arithmétiques sur des valeurs de taille machine sont nettement plus lentes que les opérations machine correspondantes.
Énumérations
Le type énuméré possède des valeurs distinctes, comparables et assignables, mais qui n'ont pas nécessairement de représentation concrète en mémoire ; les compilateurs et interpréteurs peuvent les représenter arbitrairement. Par exemple, les quatre couleurs d'un jeu de cartes peuvent être représentées par quatre énumérateurs nommés TRUB , DIAMOND , HEART et SPADE , appartenant à un type énuméré nommé suit . Si une variable V est déclarée avec suit comme type de données, on peut lui assigner n'importe laquelle de ces quatre valeurs. Certaines implémentations permettent aux programmeurs d'assigner des valeurs entières aux valeurs de l'énumération, voire de les traiter comme des entiers.
Types de chaînes et de textes
Les chaînes de caractères sont des séquences de caractères utilisées pour stocker des mots ou du texte brut , le plus souvent des langages de balisage textuel représentant du texte formaté . Un caractère peut être une lettre de l' alphabet , un chiffre, un espace, un signe de ponctuation, etc. Les caractères sont issus d'un jeu de caractères tel que l'ASCII ou l'Unicode . Les types de caractères et de chaînes peuvent avoir différents sous-types selon l'encodage. L'ASCII original, sur 7 bits, s'est avéré limité et a été remplacé par des jeux de 8, 16 et 32 bits, capables d'encoder une grande variété d'alphabets non latins (comme l'hébreu et le chinois ) et d'autres symboles. Les chaînes peuvent être de longueur variable ou fixe, et certains langages de programmation proposent les deux types. Elles peuvent également être classées selon leur taille maximale.
Étant donné que la plupart des jeux de caractères incluent les chiffres , il est possible d'avoir une chaîne numérique, telle que « 0"1234" ». Ces chaînes numériques sont généralement considérées comme distinctes des valeurs numériques telles que « 0 » 1234, bien que certaines langues effectuent une conversion automatique entre elles.
Types d'union
Une union étiquetée (également appelée variante , enregistrement de variante, union discriminée ou union disjointe) contient un champ supplémentaire indiquant son type actuel pour une sécurité de type améliorée.
Types de données algébriques
S'il n'existe qu'un seul constructeur, le type abstrait de données (TAD) correspond à un type produit similaire à un tuple ou à un enregistrement. Un constructeur sans champ correspond au produit vide (type unité). Si aucun constructeur n'a de champ, le TAD correspond à un type énuméré .
Un type abstrait de données (TAD) courant est le type option , défini en Haskell comme . structures de données . Parmi les structures de données courantes, on trouve :
- Un tableau (aussi appelé vecteur, liste ou séquence) stocke plusieurs éléments et permet d'accéder aléatoirement à chacun d'eux. Les éléments d'un tableau doivent généralement (mais pas toujours) être du même type. Les tableaux peuvent être de longueur fixe ou extensible. Les indices d'un tableau doivent généralement être des entiers (sinon, on parle de tableau associatif ) appartenant à un intervalle spécifique (si tous les indices de cet intervalle ne correspondent pas à des éléments, il s'agit alors d'un tableau creux ).
- Un enregistrement (également appelé tuple ou structure) est une structure de données parmi les plus simples . Il s'agit d'une valeur contenant d'autres valeurs, généralement en nombre et en séquence fixes, et indexées par des noms. Les éléments d'un enregistrement sont généralement appelés champs ou membres .
- Un objet contient un certain nombre de champs de données, comme un enregistrement, et offre également un certain nombre de sous-routines pour y accéder ou les modifier, appelées méthodes .
- la liste simplement chaînée , qui peut être utilisée pour implémenter une file d'attente et qui est définie en Haskell comme le type abstrait de données (TAD) , et
arbre binaire , qui permet une recherche rapide, et peut être défini en Haskell comme le TADtype de données abstrait est un type de données qui ne spécifie pas sa représentation concrète. Il est décrit par une spécification formelle basée sur ses opérations. Toute implémentation de cette spécification doit respecter les règles définies. Par exemple, une pile possède des opérations d'empilement et de dépilement qui suivent la règle du dernier entré, premier sorti (LIFO) et peut être implémentée concrètement à l'aide d'une liste ou d'un tableau. Les types de données abstraits sont utilisés en sémantique formelle et en vérification de programmes , et, de façon moins stricte, en conception .
Conseils et références
Types de fonctions
Int -> Booldésignant les fonctions prenant un entier et renvoyant un booléen. En C, une fonction n'est pas un type de données de première classe, mais les pointeurs de fonction peuvent être manipulés par le programme. Java et C++ ne disposaient pas initialement de valeurs de fonction, mais les ont ajoutées respectivement en C++11 et Java 8.constructeurs de types
Types de raffinement
Types dépendants
intersection ensembliste de `List` et `Interface` . Il est également possible de définir un type d'intersection dépendant, noté `Interface` , où le type peut dépendre de la variable `term` . Métatypes
Plus d articles de Worldlex Wiki
Revenez a l index pour explorer davantage de pages sur l histoire, la science, la culture, la geographie et la societe en francais.
Explorer l index