+ Répondre à la discussion Actualité déjà publiée
  1. #1
    Responsable Delphi

    Avatar de gvasseur58
    Homme Profil pro
    Cultivateur de code (bio)
    Inscrit en
    février 2013
    Messages
    943
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Isère (Rhône Alpes)

    Informations professionnelles :
    Activité : Cultivateur de code (bio)
    Secteur : Enseignement

    Informations forums :
    Inscription : février 2013
    Messages : 943
    Points : 10 785
    Points
    10 785
    Billets dans le blog
    31

    Par défaut POO à gogo - Les enregistrements (records) avec Free Pascal et Lazarus 1/2

    Les enregistrements simples et le compactage

    Nom : logoFPC.png
Affichages : 182
Taille : 16,3 Ko


    À 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/

    Que pensez-vous de ce tutoriel ?
    Les enregistrements sont-ils trop connus pour que vous vous y intéressiez ?
    Accès à mon site et à mon blog. Actualités, cours et ressources Delphi, Lazarus et Pascal.
    Pensez à la balise - Quelqu'un vous a aidé ou vous appréciez une intervention ? Pensez au

  2. #2
    Modérateur
    Avatar de tourlourou
    Homme Profil pro
    Biologiste ; Progr(amateur)
    Inscrit en
    mars 2005
    Messages
    2 816
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 54
    Localisation : France, Yvelines (Île de France)

    Informations professionnelles :
    Activité : Biologiste ; Progr(amateur)

    Informations forums :
    Inscription : mars 2005
    Messages : 2 816
    Points : 7 518
    Points
    7 518

    Par défaut

    Super, rafraîchir ses idées et découvrir des "détails" qui nous avaient échappés est toujours précieux.

    Juste une question sur la taille des enregistrements compactés : l'alignement sur les 8 octets du Double plutôt que les 4 de l'integer dans l'exemple dépend-il de la cible du compilateur : 64 bits ou 32 bits, ou est-il intrinsèque à FPC ?
    Delphi 5 Pro - Delphi 10.1 Berlin Starter Edition - CodeTyphon 6.15 sous Win 7 et 5.20 sous Ubuntu 14.04
    . Ignorer la FAQ Delphi et les Cours et Tutoriels Delphi nuit gravement à notre code !

  3. #3
    Responsable Delphi

    Avatar de gvasseur58
    Homme Profil pro
    Cultivateur de code (bio)
    Inscrit en
    février 2013
    Messages
    943
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Isère (Rhône Alpes)

    Informations professionnelles :
    Activité : Cultivateur de code (bio)
    Secteur : Enseignement

    Informations forums :
    Inscription : février 2013
    Messages : 943
    Points : 10 785
    Points
    10 785
    Billets dans le blog
    31

    Par défaut

    Citation Envoyé par tourlourou Voir le message
    Super, rafraîchir ses idées et découvrir des "détails" qui nous avaient échappés est toujours précieux.

    Juste une question sur la taille des enregistrements compactés : l'alignement sur les 8 octets du Double plutôt que les 4 de l'integer dans l'exemple dépend-il de la cible du compilateur : 64 bits ou 32 bits, ou est-il intrinsèque à FPC ?
    Merci . A priori, la taille d'un Double fait toujours huit octets avec FPC.
    Accès à mon site et à mon blog. Actualités, cours et ressources Delphi, Lazarus et Pascal.
    Pensez à la balise - Quelqu'un vous a aidé ou vous appréciez une intervention ? Pensez au

  4. #4
    Expert éminent
    Avatar de Jipété
    Profil pro
    Inscrit en
    juillet 2006
    Messages
    5 145
    Détails du profil
    Informations personnelles :
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations forums :
    Inscription : juillet 2006
    Messages : 5 145
    Points : 7 008
    Points
    7 008

    Par défaut

    Citation Envoyé par gvasseur58 Voir le message
    Que pensez-vous de ce tutoriel ?
    Rhôôô, 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.
    Je n'ai pas trouvé où cliquer pour passer aux enregistrements étendus,
    Ben vi, tu nous mets l'eau à la bouche, là...

    Citation Envoyé par gvasseur58 Voir le message
    Les enregistrements sont-ils trop connus pour que vous vous y intéressiez ?
    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...
    Il a à vivre sa vie comme ça et il est mûr sur ce mur se creusant la tête : peutêtre qu'il peut être sûr, etc.
    Oui, je milite pour l'orthographe et le respect du trait d'union à l'impératif.
    Après avoir posté, relisez-vous ! Et en cas d'erreur ou d'oubli, il existe un bouton « Modifier », à utiliser sans modération
    On a des lois pour protéger les remboursements aux faiseurs d’argent. On n’en a pas pour empêcher un être humain de mourir de misère.
    Mes 2 cts,
    --
    jp

  5. #5
    Responsable Delphi

    Avatar de gvasseur58
    Homme Profil pro
    Cultivateur de code (bio)
    Inscrit en
    février 2013
    Messages
    943
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Isère (Rhône Alpes)

    Informations professionnelles :
    Activité : Cultivateur de code (bio)
    Secteur : Enseignement

    Informations forums :
    Inscription : février 2013
    Messages : 943
    Points : 10 785
    Points
    10 785
    Billets dans le blog
    31

    Par défaut

    Citation Envoyé par Jipété Voir le message
    Ben vi, tu nous mets l'eau à la bouche, là...
    Je ne suis pas bon commerçant, mais j'apprends à faire languir le chaland . Il faudra patienter un tout petit peu encore...

    Citation Envoyé par Jipété Voir le message
    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...
    C'est fait .
    Accès à mon site et à mon blog. Actualités, cours et ressources Delphi, Lazarus et Pascal.
    Pensez à la balise - Quelqu'un vous a aidé ou vous appréciez une intervention ? Pensez au

  6. #6
    Modérateur
    Avatar de tourlourou
    Homme Profil pro
    Biologiste ; Progr(amateur)
    Inscrit en
    mars 2005
    Messages
    2 816
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 54
    Localisation : France, Yvelines (Île de France)

    Informations professionnelles :
    Activité : Biologiste ; Progr(amateur)

    Informations forums :
    Inscription : mars 2005
    Messages : 2 816
    Points : 7 518
    Points
    7 518

    Par défaut

    A priori, la taille d'un Double fait toujours huit octets avec FPC.
    Certes, mais je me suis mal exprimé : j'imaginais qu'il était natif de débuter un Double sur un multiple de 4 octets, en 32 Bits, de la même façon que je vois l'intérêt de le faire démarrer sur un multiple de 8 en 64 Bits, pour une question d'arithmétique de pointeurs et de taille des registres.
    Delphi 5 Pro - Delphi 10.1 Berlin Starter Edition - CodeTyphon 6.15 sous Win 7 et 5.20 sous Ubuntu 14.04
    . Ignorer la FAQ Delphi et les Cours et Tutoriels Delphi nuit gravement à notre code !

  7. #7
    Responsable Delphi

    Avatar de gvasseur58
    Homme Profil pro
    Cultivateur de code (bio)
    Inscrit en
    février 2013
    Messages
    943
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Isère (Rhône Alpes)

    Informations professionnelles :
    Activité : Cultivateur de code (bio)
    Secteur : Enseignement

    Informations forums :
    Inscription : février 2013
    Messages : 943
    Points : 10 785
    Points
    10 785
    Billets dans le blog
    31

    Par défaut

    Citation Envoyé par tourlourou Voir le message
    Certes, mais je me suis mal exprimé : j'imaginais qu'il était natif de débuter un Double sur un multiple de 4 octets, en 32 Bits, de la même façon que je vois l'intérêt de le faire démarrer sur un multiple de 8 en 64 Bits, pour une question d'arithmétique de pointeurs et de taille des registres.
    Non, 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...
    Accès à mon site et à mon blog. Actualités, cours et ressources Delphi, Lazarus et Pascal.
    Pensez à la balise - Quelqu'un vous a aidé ou vous appréciez une intervention ? Pensez au

  8. #8
    Rédacteur/Modérateur

    Avatar de Roland Chastain
    Homme Profil pro
    Enseignant
    Inscrit en
    décembre 2011
    Messages
    2 956
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Moselle (Lorraine)

    Informations professionnelles :
    Activité : Enseignant

    Informations forums :
    Inscription : décembre 2011
    Messages : 2 956
    Points : 10 769
    Points
    10 769
    Billets dans le blog
    4

    Par défaut

    Bonjour !

    Excellent article, qui dit tout (me semble-t-il) sur le sujet.

    Il y a une petite correction à faire dans l'exemple suivant :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    uses 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.
    Dans l'article il manque MyRect.. Désolé, j'ai loupé la discussion de relecture technique.

    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.

  9. #9
    Responsable Delphi

    Avatar de gvasseur58
    Homme Profil pro
    Cultivateur de code (bio)
    Inscrit en
    février 2013
    Messages
    943
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Isère (Rhône Alpes)

    Informations professionnelles :
    Activité : Cultivateur de code (bio)
    Secteur : Enseignement

    Informations forums :
    Inscription : février 2013
    Messages : 943
    Points : 10 785
    Points
    10 785
    Billets dans le blog
    31

    Par défaut

    Bonjour Roland,

    Merci pour tes compliments !

    Citation Envoyé par Roland Chastain Voir le message
    Il y a une petite correction à faire dans l'exemple suivant...
    La correction est faite :

    Citation Envoyé par Roland Chastain Voir le message
    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.

    Ça tombe bien : il n'y aura pas de constructeur . J'espère que cette seconde partie te prouvera que ces enregistrements étendus sont parfois très utiles...
    Accès à mon site et à mon blog. Actualités, cours et ressources Delphi, Lazarus et Pascal.
    Pensez à la balise - Quelqu'un vous a aidé ou vous appréciez une intervention ? Pensez au

  10. #10
    Membre expert Avatar de Jon Shannow
    Homme Profil pro
    Responsable de service informatique
    Inscrit en
    avril 2011
    Messages
    2 212
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 53
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations professionnelles :
    Activité : Responsable de service informatique
    Secteur : High Tech - Électronique et micro-électronique

    Informations forums :
    Inscription : avril 2011
    Messages : 2 212
    Points : 3 478
    Points
    3 478

    Par défaut

    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 ? )
    Au nom du pèze, du fisc et du St Estephe
    Au nom du fric, on baisse son froc...

  11. #11
    Responsable Delphi

    Avatar de gvasseur58
    Homme Profil pro
    Cultivateur de code (bio)
    Inscrit en
    février 2013
    Messages
    943
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Isère (Rhône Alpes)

    Informations professionnelles :
    Activité : Cultivateur de code (bio)
    Secteur : Enseignement

    Informations forums :
    Inscription : février 2013
    Messages : 943
    Points : 10 785
    Points
    10 785
    Billets dans le blog
    31

    Par défaut

    Citation Envoyé par Jon Shannow Voir le message
    Encore merci pour ces excellents tutos... (par contre je passe de 4 à 6 ? Ou est le 5... J'en ai loupé un ? )
    Merci pour les encouragements

    Pour ce qui est des autres tutoriels de la série POO à gogo, il y a :

    Les notions fondamentales de la POO

    Apprendre les méthodes 1/2

    Apprendre les méthodes 2/2


    Apprendre les propriétés

    Applications : des jeux de dés tout objet

    Celui sur les enregistrements est par conséquent bien le sixième...
    Accès à mon site et à mon blog. Actualités, cours et ressources Delphi, Lazarus et Pascal.
    Pensez à la balise - Quelqu'un vous a aidé ou vous appréciez une intervention ? Pensez au

  12. #12
    Membre expert Avatar de Jon Shannow
    Homme Profil pro
    Responsable de service informatique
    Inscrit en
    avril 2011
    Messages
    2 212
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 53
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations professionnelles :
    Activité : Responsable de service informatique
    Secteur : High Tech - Électronique et micro-électronique

    Informations forums :
    Inscription : avril 2011
    Messages : 2 212
    Points : 3 478
    Points
    3 478

    Par défaut

    J'avais loupé celui des jeux de dés...
    Au nom du pèze, du fisc et du St Estephe
    Au nom du fric, on baisse son froc...

  13. #13
    Expert confirmé

    Inscrit en
    août 2006
    Messages
    3 723
    Détails du profil
    Informations forums :
    Inscription : août 2006
    Messages : 3 723
    Points : 5 089
    Points
    5 089

    Par défaut

    Bonjour,

    Joli, mais je me dois quand même de rappeler que les Record et leur manipulation n'ont rien à voir avec la POO
    Il court en ce moment une espèce de grippe, mais elle ne court pas très vite, car on peut l'attraper sans courir.

  14. #14
    Responsable Delphi

    Avatar de gvasseur58
    Homme Profil pro
    Cultivateur de code (bio)
    Inscrit en
    février 2013
    Messages
    943
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Isère (Rhône Alpes)

    Informations professionnelles :
    Activité : Cultivateur de code (bio)
    Secteur : Enseignement

    Informations forums :
    Inscription : février 2013
    Messages : 943
    Points : 10 785
    Points
    10 785
    Billets dans le blog
    31

    Par défaut

    Citation Envoyé par droggo Voir le message
    Bonjour,

    Joli, mais je me dois quand même de rappeler que les Record et leur manipulation n'ont rien à voir avec la POO
    Bien sûr, et c'est même rappelé dans l'annonce de cette première partie :

    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.
    Sans ces bases, inutile de vouloir aller plus loin...

    Cordialement,

    Gilles
    Accès à mon site et à mon blog. Actualités, cours et ressources Delphi, Lazarus et Pascal.
    Pensez à la balise - Quelqu'un vous a aidé ou vous appréciez une intervention ? Pensez au

  15. #15
    Expert confirmé

    Inscrit en
    août 2006
    Messages
    3 723
    Détails du profil
    Informations forums :
    Inscription : août 2006
    Messages : 3 723
    Points : 5 089
    Points
    5 089

    Par défaut

    Bonjour,
    Citation Envoyé par gvasseur58 Voir le message
    Bien sûr, et c'est même rappelé dans l'annonce de cette première partie :

    Sans ces bases, inutile de vouloir aller plus loin...

    Cordialement,

    Gilles
    Oui, mais le titre est trompeur
    Il court en ce moment une espèce de grippe, mais elle ne court pas très vite, car on peut l'attraper sans courir.

  16. #16
    Membre à l'essai
    Profil pro
    Inscrit en
    juin 2005
    Messages
    15
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : juin 2005
    Messages : 15
    Points : 22
    Points
    22

    Par défaut Un exemple que je ne comprends pas

    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 : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    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;
    []
     
      Point1.X := 15;
      Point1.Y := 32;
      Point2.X := 125;
      Point2.Y := 232;
      Memo1.Lines.Add(Format('Largeur : %d', [MyRect.BottomRight.X - MyRect.TopLeft.X]));

  17. #17
    Responsable Delphi

    Avatar de gvasseur58
    Homme Profil pro
    Cultivateur de code (bio)
    Inscrit en
    février 2013
    Messages
    943
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Isère (Rhône Alpes)

    Informations professionnelles :
    Activité : Cultivateur de code (bio)
    Secteur : Enseignement

    Informations forums :
    Inscription : février 2013
    Messages : 943
    Points : 10 785
    Points
    10 785
    Billets dans le blog
    31

    Par défaut

    Citation Envoyé par thewolf Voir le message
    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 ?
    Bonjour 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 : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    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
      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]));
    Cordialement,

    Gilles
    Accès à mon site et à mon blog. Actualités, cours et ressources Delphi, Lazarus et Pascal.
    Pensez à la balise - Quelqu'un vous a aidé ou vous appréciez une intervention ? Pensez au

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo