Type Enregistrement
Contrairement au Type Tableau les enregistrements sont une collection d'éléments de différents types. Les composants (dans le cas des enregistrements on aime aussi parler de champs) ne sont pas non plus adressés via des index, mais se voient attribuer des noms.
En langage C, ces types sont appelés les "struct". Le type enregistrement préfigure les bases de la programmation objet.
La définition d'un type d'enregistrement est introduite par le mot réservé record, puis la soi-disant liste de champs suit, et le tout est conclu par le mot-clé end. Le nom de chaque champ et son type sont spécifiés dans la liste des champs.
Voici quelques exemples:
Pascal offre également la possibilité de déclarer des enregistrements dits variantes, ce sont ceux qui peuvent contenir des champs différents selon le type d'objet décrit (ceci préfigure le polymorphisme en programmation objet). Au cas où cela semble trop nébuleux, voici un exemple:type Date = record Annee: Integer; Mois: 1 .. 12; Jour: 1 .. 31; end; Rectangle = record x, y: Real; { Coordonnées du coin en haut à gauche } w, h: Real; { Largeur et hauteur } end;
Dans l'exemple, FigurRec contient des informations différentes selon le type de figure. Une seule des variantes peut être active à la fois. Le compilateur peut donc économiser de l'espace mémoire avec des enregistrements de variantes par toutes les variantes partageant le même espace.type FigurArt = (Rectangle, triangle, cercle); FigurRec = record x, y: Real; case Art: FigurArt of Rectangle: (Largeur, Hauteur: Real); Triangle: (Page1, Page2, angles: Real); Cercle: (Rayon: Real) end;
Le champ qui distingue la variante impliquée est appelé champ sélecteur ou champ de balise. Il peut également être omis si la variante active est toujours claire du contexte. Le type du champ de balise doit toujours être spécifié.
Les enregistrements de variantes permettent également d'interpréter les types de données comme d'autres types. Cela est parfois nécessaire pour les algorithmes au niveau de la machine. Voici un exemple:
La définition de FloatRec permet d'accéder à la représentation interne des nombres à virgule flottante. De telles constructions nécessitent une connaissance précise de la représentation interne des types de données et sont très dépendantes de la machine - cet exemple fonctionnerait avec Pure Pascal sur Atari, mais pas avec Turbo Pascal sur IBM PC.type FloatRec = record case boolean of false: (x: real); true: (exponent: word; mantHi, mantLo: longint) end;
Dans de nombreux cas, un type d'enregistrement variant est mieux représenté par les type objet.