POO à gogo - Apprendre la notion d'enregistrements dans Free Pascal et Lazarus partie 1 sur 2
Un tutoriel de Gilles Vasseur
Le 2017-03-28 16:47:22, par gvasseur58, Responsable Lazarus & Pascal
Les enregistrements simples et le compactage
À l'aide de ce tutoriel, vous devriez être capable d'utiliser au mieux les enregistrements dans vos programmes. Les novices apprendront à :
Ceux qui manipulent déjà bien ces notions trouveront l'occasion de réviser leurs connaissances et de critiquer si nécessaire la présentation qui en est faite.
Dans un tutoriel à suivre prochainement, il sera temps d'aborder les enregistrements étendus introduits par la Programmation Orientée Objet.
http://gilles-vasseur.developpez.com...egistrements1/
Que pensez-vous de ce tutoriel ?
Les enregistrements sont-ils trop connus pour que vous vous y intéressiez ?
À l'aide de ce tutoriel, vous devriez être capable d'utiliser au mieux les enregistrements dans vos programmes. Les novices apprendront à :
- définir un type enregistrement simple avec ou sans variantes ;
- affecter des valeurs à des champs et les retrouver à la demande ;
- tenir compte des limites des enregistrements ;
- comprendre les mécanismes régissant le compactage afin de l'utiliser à bon escient.
Ceux qui manipulent déjà bien ces notions trouveront l'occasion de réviser leurs connaissances et de critiquer si nécessaire la présentation qui en est faite.
Dans un tutoriel à suivre prochainement, il sera temps d'aborder les enregistrements étendus introduits par la Programmation Orientée Objet.
http://gilles-vasseur.developpez.com...egistrements1/
-
thewolfMembre habituéBonjour. Merci pour ce tutoriel très intéressant.
Cependant, je ne comprends pas très bien l'exemple de code ci-dessous. Comment se fait le lien entre point1 et Point2 d'une part et MyRect d'autre part ?Code : 1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21type TPoint = record X: LongInt; Y: LongInt; end; TRect = record case Integer of 0: (Left,Top,Right,Bottom: Longint); 1: (TopLeft,BottomRight: TPoint); end; var Point1, Point2: TPoint; MyRect: TRect; […] Point1.X := 15; Point1.Y := 32; Point2.X := 125; Point2.Y := 232; Memo1.Lines.Add(Format('Largeur : %d', [MyRect.BottomRight.X - MyRect.TopLeft.X]));
le 13/04/2017 à 19:18 -
JipétéExpert éminent séniorRhôôô, magnifique !
Juste un mot :Cet ensemble de connaissances va vous permettre à présent d'aborder les enregistrements étendus introduits par la Programmation Orientée Objet : ce sont des outils puissants, pour la plupart rencontrés à l'occasion de la manipulation d'objets, qui s'offrent ainsi aux programmeurs.
Ben vi, tu nous mets l'eau à la bouche, là...
Comme Yves : toujours bon de relire certains points même basiques, on en apprend tous les jours (les "packed" avec les petits champs plutôt à la fin, c'est noté !)
Un dernier mot : précise "record" entre parenthèses après "enregistrements" dans le titre, il m'a fallu un certain temps pour capter qu'on n'allait pas parler magnétophones et multimédia, et oui...le 28/03/2017 à 19:48 -
gvasseur58Responsable Lazarus & PascalJe ne suis pas bon commerçant, mais j'apprends à faire languir le chaland
. Il faudra patienter un tout petit peu encore...
C'est fait. le 28/03/2017 à 20:20 -
Roland ChastainRédacteur/ModérateurBonjour !
Excellent article, qui dit tout (me semble-t-il) sur le sujet.
Il y a une petite correction à faire dans l'exemple suivant :Code : 1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23uses sysutils; type TPoint = record X: LongInt; Y: LongInt; end; TRect = record case Integer of 0: (Left,Top,Right,Bottom: Longint); 1: (TopLeft,BottomRight: TPoint); end; var Point1, Point2: TPoint; MyRect: TRect; begin Point1.X := 15; Point1.Y := 32; Point2.X := 125; Point2.Y := 232; WriteLn(Format('Largeur : %d', [MyRect.BottomRight.X - MyRect.TopLeft.X])); end.
P.-S. Pour les enregistrements avec constructeur, je n'en vois pas l'intérêt mais je suis prêt à changer d'avis en lisant la deuxième partie de l'article.le 29/03/2017 à 8:46 -
Jon ShannowMembre extrêmement actif
Que pensez-vous de ce tutoriel ? Excellent, comme tous les autres...
Les enregistrements sont-ils trop connus pour que vous vous y intéressiez ? Y a jamais de mal à revoir les fondamentaux... Et puis, on apprend toujours, même sur un truc qu'on a utilisé et ré-utilisé pendant des décennies.
Encore merci pour ces excellents tutos... (par contre je passe de 4 à 6 ? Ou est le 5... J'en ai loupé un ?) le 29/03/2017 à 10:57 -
gvasseur58Responsable Lazarus & PascalBonjour et merci pour les remarques.
Le lien entre les points Point1 et Point2 est très simple : il n'existe pas. Il s'agit en effet d'une erreur de ma part qui ai laissé un ancien morceau de code.
Il fallait lire :Code : 1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22type TPoint = record X: LongInt; Y: LongInt; end; TRect = record case Integer of 0: (Left,Top,Right,Bottom: Longint); 1: (TopLeft,BottomRight: TPoint); end; var MyRect: TRect; […] MyRect.Top := 15; MyRect.Left := 32; MyRect.Bottom := 125; MyRect.Right := 232; Memo1.Lines.Add(Format('Largeur : %d', [MyRect.BottomRight.X - MyRect.TopLeft.X]));
Gillesle 14/04/2017 à 17:08 -
tourlourouModérateurA priori, la taille d'un Double fait toujours huit octets avec FPC.le 28/03/2017 à 22:18
-
gvasseur58Responsable Lazarus & PascalNon, non, c'est moi qui ai le cerveau en marmelade
. Je constate l'alignement sur un multiple de 8, mais je n'ai pas la réponse technique du pourquoi de ce choix, y compris en 32 bits : est-ce une recherche d'homogénéité du compilateur ? A vérifier... le 28/03/2017 à 22:29 -
Jon ShannowMembre extrêmement actifJ'avais loupé celui des jeux de dés...le 29/03/2017 à 14:46
-
droggoExpert confirméBonjour,
Joli, mais je me dois quand même de rappeler que les Record et leur manipulation n'ont rien à voir avec la POOle 29/03/2017 à 16:54