Sign in Join
Wiki copytemporary

Record/fr: what changed

Revision 0 to 1. Removed lines have a minus sign; added lines have a plus sign.

Title: Record/fr

OldNewLine
1+Un **enregistrement** est un [[Type/fr|type de donnée]] hautement structuré en [[Pascal/fr|Pascal]]. Les enregistrements sont très largement utilisés en Pascal pour regrouper logiquement des éléments de données.
2+
3+Alors que de simples structures de données tels les [[Array/fr|tableaux]] ou les [[Set/fr|ensembles]] sont constitués d'éléments tous du même type, un enregistrement peut être constitué d’éléments de types différents et prendre une forme très complexe. Chaque partie séparée d'un enregistrement est appelé un champ.
4+
5+## Déclaration
6+
7+### Structure fixe
8+
9+``` pascal
10+type
11+ TMember = record
12+ firstname, surname : string;
13+ address: array [1..3] of string;
14+ phone: string;
15+ birthdate: TDateTime;
16+ paidCurrentSubscription: boolean
17+end;
18+```
19+
20+### Structure variable
21+
22+Des structures plus complexes sont possibles, par exemple :
23+
24+``` pascal
25+type
26+ maritalStates = (unmarried, married, widowed, divorced);
27+ TPerson = record
28+ (* PARTIE CONSTANTE *)
29+ (* les enregistrements peuvent être imbriqués *)
30+ name: record
31+ first, middle, last: string;
32+ end;
33+ sex: (male, female);
34+ (* date de naissance *)
35+ dob: TDateTime;
36+ (* PARTIE VARIABLE *)
37+ case maritalStatus: maritalStates of
38+ unmarried: ( );
39+ married, widowed: (marriageDate: TDateTime);
40+ divorced: (marriageDate, divorceDate: TDateTime;
41+ isFirstDivorce: boolean)
42+ end;
43+```
44+
45+Ce dernier type d'enregistrement est appelé enregistrement avec variantes. La variable (facultative) qui suit le case est appelé discriminant. Le type seul peut être mentionné s'il n'est pas besoin de manipuler le discriminant dans le code. Dans un enregistrement, on ne peut avoir qu'une seule partie variable qui doit se trouver à la fin de cet enregistrement ; rien n'empêche cependant d'imbriquer des enregistrements avec variantes... La taille du type est égale à la somme de celle de la partie fixe et de celle de la partie variante la plus grande. Attention : comme les différentes alternatives se superposent en mémoire, l'affectation des champs d'une variante modifie le contenu des champs des autres variantes sans vérifier la cohérence de ces changements.
46+
47+### Enregistrement avancé
48+
49+Un enregistrement avec des [[Method/fr|méthodes]] et des [[Property/fr|propriétés]].
50+
51+- Souvenez-vous qu'il faut ajouter la directive de compilation {\$MODESWITCH ADVANCEDRECORDS}.
52+
53+## Adressage
54+
55+### Champs
56+
57+On accède aux champs en plaçant un point entre le nom de l'enregistrement et le nom du champ, ainsi :
58+
59+``` pascal
60+ a.firstname := 'George';
61+ a.surname := 'Petersen';
62+ a.phone := '789534';
63+ a.paidCurrentSubscription := true;
64+```
65+
66+Éventuellement, l'accès aux groupes de champs peut être effectué sans répéter le nom de l'enregistrement à l'aide de la construction [[With/fr|with]] :
67+
68+``` pascal
69+with a do
70+begin
71+ firstname := 'George';
72+ surname := 'Petersen';
73+ phone := '789534';
74+ paidCurrentSubscription := true
75+end;
76+```
77+
78+### Instances
79+
80+Un enregistrement est traité par le programme comme une entité entière. Par exemple, un enregistrement entier peut être copié dans un autre de même type à l'aide d'une seule affectation :
81+
82+``` pascal
83+var
84+ a, b: TMember;
85+
86+(* programme principal *)
87+begin
88+ { ... affecte les valeurs vers le champs de a dans l'enregistrement b .. }
89+ b := a
90+ { maintenant b contient la copie de a }
91+ { à ne pas confondre avec les références : }
92+ { a et b sont des entités différentes de TMember }
93+end.
94+```
95+
96+## Enregistrement constant
97+
98+``` pascal
99+type
100+ //record declaration
101+ TSpecialDay = record
102+ DayName : string;
103+ month : integer;
104+ day : integer;
105+ end;
106+
107+const
108+ // TSpecialDay constant
109+ ChristmasDay : TSpecialDay =
110+ (
111+ DayName : 'Christmas Day';
112+ month : 12;
113+ day : 25;
114+ );
115+```
116+
117+## Voir aussi
118+
119+- [[Basic Pascal Tutorial/Chapter 5/Records/fr|Enregistrements]], tutoriel qui couvre les enregistrements.
120+- [[Object/fr|Object]]
121+- [[Class/fr|Class]]
122+
123+---
124+*From the Free Pascal wiki, page "Record/fr", as it stood on 2023-01-25 after a change by Kai Burghardt, out of the wiki's dump of 2024-05-26. Copyright stays with the author who wrote it, according to the old wiki's [[Licensing]] page. If you have concerns about this material, [message the admin](/wiki-contact).*

Back to history