# Delphi/Types
## Définition

Tout d’abord, définissons un type.
En Delphi, comme en C, VB et contrairement au PHP, JavaScript, Python ou autre langage moderne, une variable est dites typée et ne peut contenir que des valeurs de ce type. En clair, un type est un attribut de la variable.

## Types de base

Delphi est extrêmement complet à ce niveau et il existe une multitude de types prédéfinis sans compter la possibilité de créer ses propres types (on verra ça plus tard). Voici un tableau contenant les types de base (ou types primitifs) les plus utiles:
| Type | Description | Taille | Valeur |
| boolean | booléen | 1 bit | True/False (Vrai/Faux) |
| char | caractère | 1 octet | un élément de la table ascii (ou ANSI) |
| string | chaîne de caractères | En fonction de sa taille | tableau dynamique d'éléments de la table ascii (ou ANSI) |
| integer | entier | 4 octets signés | -2147483648 à 2147483647 |
| cardinal | entier non signé | 4 octets non signés | 0 à 4294967295 |
| real (double est équivalent) | réel | 8 octets | 5.0 x 10^-324 à 1.7 x 10^308 |
    Remarque : Ce sont les types prédéfinis les plus utilisés. Il en existe une dizaine d'autres rien que pour les entiers (smallint, longint, int64..) dont l’utilisation est adaptée pour ajuster de manière plus précise les tailles de variable aux données que l’on va y placer et ainsi optimiser l’utilisation de la mémoire. Pour plus d'information à ce sujet, vous pouvez vous documenter dans l'aide Delphi à ce sujet.

## char

Un char (caractère) est une donnée telle que '#', 'A', '2', ';', '.', '?' et ainsi de suite. Il est associé à un nombre dans la bibliothèque des caractère, la table ASCII. En Delphi, un char est écrit entre apostrophes. Si le caractère en question est aussi un apostrophe, alors il faut le doubler, ce qui donne au total quatre apostrophes à la suite.

## string

Vous avez déjà travaillé avec des strings dans les chapitres précédents, tel que 'Hello World' ou 'Hi there' et ainsi de suite. Un string est une séquence de char.
Et ensuite écrivez entre begin et end:
Si vous voulez écrire un apostrophe dans un string, doublez-le:
Les strings se comportent comme des tableaux. Vous pouvez accéder à un caractère par son index :
Le premier indice est 1 (et non 0).

## Entiers

Les Integers sont des entiers, que l’on écrit comme suit :

## Nombres décimaux

Les nombres décimaux sont des nombres à virgule flottante, que l’on écrit comme suit :
Un Extended est plus précis qu'un Real, mais consomme plus de place mémoire.

## Booléen

Un Boolean est une valeur logique. Il peut être vrai (True) ou faux (False). Écrivez :
Mais il est difficile de comprendre l’intérêt du booléen tant que vous n'aurez pas vu les structures conditionnelles au chapitre Structures conditionnelles et répétitives.

## Enregistrement

Un enregistrement (appelé structure dans certains langages) représente un ensemble de données hétérogènes. Chaque élément est appelé un champ ; la déclaration d'un type enregistrement spécifie le nom et le type de chaque champ. Une déclaration de type enregistrement a la syntaxe suivante :
Par exemple, la déclaration suivante crée un type enregistrement nommé TDateRec.
Chaque TDateRec contient trois champs : une valeur entière appelée Annee, une valeur d'un type énuméré appelé Mois et une autre valeur entière comprise entre 1 et 31 appelée Jour. Les identificateurs Annee, Mois et Jour sont des noms de champs de TDateRec qui se comportent comme des variables. Néanmoins, la déclaration de type TDateRec n'alloue pas de mémoire pour les champs Annee, Mois et Jour ; la mémoire est allouée quand vous instanciez l'enregistrement, de la manière suivante :
var Record1, Record2: TDateRec;
Cette déclaration de variable crée deux instances de TDateRec, appelées Record1 et Record2.
Vous pouvez accéder aux champs de l'enregistrement en qualifiant le nom de champ avec le nom de l'enregistrement :
Ou en utilisant une instruction with :
| Variables et constantes | Opérateurs |