IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Langage Delphi Discussion :

Record avec valeur par défaut


Sujet :

Langage Delphi

  1. #21
    Rédacteur/Modérateur
    Avatar de Andnotor
    Inscrit en
    Septembre 2008
    Messages
    5 694
    Détails du profil
    Informations personnelles :
    Localisation : Autre

    Informations forums :
    Inscription : Septembre 2008
    Messages : 5 694
    Points : 13 130
    Points
    13 130
    Par défaut
    En effet

    Mais les records n'ont pas de destructeur, ne supporte pas l'héritage ni les interfaces et les allocations sont gérées différemment.

  2. #22
    Membre éclairé Avatar de peter27x
    Profil pro
    Inscrit en
    Janvier 2007
    Messages
    1 029
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2007
    Messages : 1 029
    Points : 757
    Points
    757
    Par défaut
    Citation Envoyé par Andnotor Voir le message
    Les records acceptent un constructeur (méthodes, propriétés, etc.) depuis D2007 (je crois). C'est cependant dommage qu'il faille l'appeler implicitement .
    Je suppose que tu voulais dire "explicitement".

  3. #23
    Expert éminent sénior
    Avatar de ShaiLeTroll
    Homme Profil pro
    Développeur C++\Delphi
    Inscrit en
    Juillet 2006
    Messages
    13 459
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Seine Saint Denis (Île de France)

    Informations professionnelles :
    Activité : Développeur C++\Delphi
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juillet 2006
    Messages : 13 459
    Points : 24 873
    Points
    24 873
    Par défaut
    Tient, des exemple de déclaration de constante Record:
    Conversion String To Color - Utilisation de Fonctionnalité IdentToInt et IdentToColor avec le TMapEntry
    Déclaration d'un tableau
    Tableau Dynamique pointant sur Tableau Statiques
    Déclaration de pointeur de fonction et structure

    Je suis d'accord avec Mick605, les record c'est vraiement très ouvert, on peut aller vraiement très loin ...

    Il y a une FAQ : "[QR] Comment tester si un Enregistrement est vide" en cours de débat, justement sur le teste d'un record vide, et l'utilisation d'une constante record pour donner la forme vide du record ...

    Je déplore personnellement, l'évolution du record en pseudo classe, je pense qu'il faut faire un choix, soit un record pour l'organisation des données, soit un objet avec méthode et tout le tralalala (et rien n'empeche un objet d'utiliser un simple record pour des membres)

    Sinon, on a perdu Sancha, depuis bien longtemps, il a eu sa réponse ...il a appuyé sur !
    Aide via F1 - FAQ - Guide du développeur Delphi devant un problème - Pensez-y !
    Attention Troll Méchant !
    "Quand un homme a faim, mieux vaut lui apprendre à pêcher que de lui donner un poisson" Confucius
    Mieux vaut se taire et paraître idiot, Que l'ouvrir et de le confirmer !
    L'ignorance n'excuse pas la médiocrité !

    L'expérience, c'est le nom que chacun donne à ses erreurs. (Oscar Wilde)
    Il faut avoir le courage de se tromper et d'apprendre de ses erreurs

  4. #24
    Membre éclairé Avatar de peter27x
    Profil pro
    Inscrit en
    Janvier 2007
    Messages
    1 029
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2007
    Messages : 1 029
    Points : 757
    Points
    757
    Par défaut
    Citation Envoyé par Andnotor Voir le message
    En effet

    Mais les records n'ont pas de destructeur, ne supporte pas l'héritage ni les interfaces et les allocations sont gérées différemment.
    Le destructeur est implicite, Delphi doit s'en charger comme pour toute variable, je suppose.

    Pour l'héritage ça doit pouvoir s'arranger non ? Avec un type record R2 dont un des champs serait de type record R1... Mais est ce possible ?

    C'est de l'héritage façon système G bien sûr.

  5. #25
    Membre éprouvé
    Avatar de Dr.Who
    Inscrit en
    Septembre 2009
    Messages
    980
    Détails du profil
    Informations personnelles :
    Âge : 45

    Informations forums :
    Inscription : Septembre 2009
    Messages : 980
    Points : 1 294
    Points
    1 294
    Par défaut
    et le template pour tout les delphi >= 2005 :

    Code xml : 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
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    <?xml version="1.0" encoding="utf-8" ?>
     
    <codetemplate	xmlns="http://schemas.borland.com/Delphi/2005/codetemplates"
    				version="1.0.0">
    	<template name="fullrec" invoke="manual">
    		<point name="recname">
    			<text>
    			%ident%
    			</text>
    			<hint>
    			nom de de l'enregistrement
    			</hint>
    		</point>
    		<point name="fields">
    			<text>
    			%fields%
    			</text>
    			<hint>
    			champs de l'enregistrement
    			</hint>
    		</point>
    		<description>
    			déclaration d'enregistrement
    		</description>
    		<author>
    			Dr.Who
    		</author>
    		<code language="Delphi" context="typedecl" delimiter="|"><![CDATA[
    { T|recname| }
    type
      P|recname| = ^T|recname|;
      T|recname| = {packed} record
    	{case integer of}
    	|fields|
    	// for delphi >= D2005
    	//class function Create(const |fields|): T|recname|; static;
      end;
     
      // Dynamic array
      //P|recname|DynArray = ^T|recname|DynArray;
      //T|recname|DynArray = array of T|recname|;
     
      // Pointer array
      //P|recname|s = ^T|recname|s;
      //T|recname|s = array[0..0] of T|recname|;
     
      // Fast creator
      //function |recname|Create(|fields|): T|recname|;
     
      const
    	// Size of |recname|
    	SizeOf|recname| = SizeOf(T|recname|);
    	// Default value of |recname|
    	//|recname|Default : T|recname| = (|fields|);
     
    		]]>
    		</code>
    	</template>
    </codetemplate>




    sinon depuis delphi 2005 ou 2006 logiquement :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    type
      {$J+}
      TMonRecord = record
        const X : integer = 10;
        const Y : integer = 10;
      end;
      {$J-}
    [ Sources et programmes de Dr.Who | FAQ Delphi | FAQ Pascal | Règlement | Contactez l'équipe ]
    Ma messagerie n'est pas la succursale du forum... merci!

  6. #26
    Membre éprouvé
    Avatar de Dr.Who
    Inscrit en
    Septembre 2009
    Messages
    980
    Détails du profil
    Informations personnelles :
    Âge : 45

    Informations forums :
    Inscription : Septembre 2009
    Messages : 980
    Points : 1 294
    Points
    1 294
    Par défaut
    et on peux aller plus loin en redéfinissant les types Delphi :

    ( D2009 up )

    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
    24
    25
    26
     
    type
      PPoint = ^TPoint;
      TPoint = record
      public
        class function Create(const aX, aY: integer): TPoint; static;
     
        procedure SetTo(const aX, aY: integer);
        function IsEmpty: boolean;
     
        function GetDistanceFrom(const Pnt: TPoint): extended;
     
        class operator Implicit(A: Windows.TPoint): TPoint;
        class operator Implicit(A: TPoint): Windows.TPoint;
        class operator Implicit(A: TPoint): string;
        class operator Add(A, B: TPoint): TPoint;
        class operator Subtract(A, B: TPoint): TPoint;
        class operator Equal(A, B: TPoint): boolean;
        class operator NotEqual(A, B: TPoint): boolean;
      public
        X, Y : integer;
      end;
      TPointList = TList<TPoint>;
     
    const
      SizeOfPoint = SizeOf(TPoint);
    [ Sources et programmes de Dr.Who | FAQ Delphi | FAQ Pascal | Règlement | Contactez l'équipe ]
    Ma messagerie n'est pas la succursale du forum... merci!

  7. #27
    Membre éclairé Avatar de peter27x
    Profil pro
    Inscrit en
    Janvier 2007
    Messages
    1 029
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2007
    Messages : 1 029
    Points : 757
    Points
    757
    Par défaut
    Citation Envoyé par Dr.Who Voir le message
    et on peux aller plus loin en redéfinissant les types Delphi :

    ( D2009 up )

    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
    24
    25
    26
     
    type
      PPoint = ^TPoint;
      TPoint = record
      public
        class function Create(const aX, aY: integer): TPoint; static;
     
        procedure SetTo(const aX, aY: integer);
        function IsEmpty: boolean;
     
        function GetDistanceFrom(const Pnt: TPoint): extended;
     
        class operator Implicit(A: Windows.TPoint): TPoint;
        class operator Implicit(A: TPoint): Windows.TPoint;
        class operator Implicit(A: TPoint): string;
        class operator Add(A, B: TPoint): TPoint;
        class operator Subtract(A, B: TPoint): TPoint;
        class operator Equal(A, B: TPoint): boolean;
        class operator NotEqual(A, B: TPoint): boolean;
      public
        X, Y : integer;
      end;
      TPointList = TList<TPoint>;
     
    const
      SizeOfPoint = SizeOf(TPoint);
    Bon ben là, la frontière record/objet en prend encore un sacré coup dans le ventre... Non ?

  8. #28
    Rédacteur/Modérateur
    Avatar de Andnotor
    Inscrit en
    Septembre 2008
    Messages
    5 694
    Détails du profil
    Informations personnelles :
    Localisation : Autre

    Informations forums :
    Inscription : Septembre 2008
    Messages : 5 694
    Points : 13 130
    Points
    13 130
    Par défaut
    Le record devrait de toute façon rester assez basique et l'idée du constructeur pour initialiser les données était vraiment bien ! Mais cet appel explicite () en diminue beaucoup l'intérêt...

    Edit: Bien que le mot class (function Create) soit supporté, je n'en vois pas l'intérêt dans un record

  9. #29
    Membre éprouvé
    Avatar de Dr.Who
    Inscrit en
    Septembre 2009
    Messages
    980
    Détails du profil
    Informations personnelles :
    Âge : 45

    Informations forums :
    Inscription : Septembre 2009
    Messages : 980
    Points : 1 294
    Points
    1 294
    Par défaut
    Citation Envoyé par Andnotor Voir le message
    Le record devrait de toute façon rester assez basique et l'idée du constructeur pour initialiser les données était vraiment bien ! Mais cet appel explicite () en diminue beaucoup l'intérêt...
    c'est vrai que l'on regrette le constructeur automatique des classes PHP pour le coups (ou dans d'autre langages).

    mais delphi c'est ça ... pas d'appel automatique dans le dos du developpeur.
    [ Sources et programmes de Dr.Who | FAQ Delphi | FAQ Pascal | Règlement | Contactez l'équipe ]
    Ma messagerie n'est pas la succursale du forum... merci!

  10. #30
    Membre du Club
    Inscrit en
    Septembre 2009
    Messages
    115
    Détails du profil
    Informations forums :
    Inscription : Septembre 2009
    Messages : 115
    Points : 62
    Points
    62
    Par défaut
    Citation Envoyé par Dr.Who Voir le message
    plutot qu'un réel espace mémoire, les record sont plutot une façon de structurer la lecture/ecriture d'un bloc de donnée.
    Merci Doctor Who pour ces explications !
    Au moins, je comprend pourquoi ce que j'essaye de faire n'est pas possible.

    Bon, je vais essayer de bidouiller quite à abandonner l'idée de mettre yne valeur par défaut dans mon record. Au pire, c'est pas dramatique.

    Merci à tous en tous cas ! Je vois que le débat fait rage.

  11. #31
    Membre du Club
    Inscrit en
    Septembre 2009
    Messages
    115
    Détails du profil
    Informations forums :
    Inscription : Septembre 2009
    Messages : 115
    Points : 62
    Points
    62
    Par défaut
    Citation Envoyé par ShaiLeTroll Voir le message
    Sinon, on a perdu Sancha, depuis bien longtemps, il a eu sa réponse ...il a appuyé sur !
    Mais non mais non, je suis toujours là, bien cachée !
    C'est très instructif de lire tout vos messages ! On apprend plein de choses !

+ Répondre à la discussion
Cette discussion est résolue.
Page 2 sur 2 PremièrePremière 12

Discussions similaires

  1. Formulaire, Champ Grisé avec valeur "par défaut"
    Par Lutine dans le forum Général JavaScript
    Réponses: 7
    Dernier message: 12/06/2011, 18h38
  2. [AC-2010] Ouvrir un sous formulaire via formulaire avec valeur par défaut
    Par Sami Xite dans le forum Access
    Réponses: 2
    Dernier message: 30/07/2010, 18h13
  3. Réponses: 1
    Dernier message: 11/07/2010, 13h34
  4. Réponses: 4
    Dernier message: 01/11/2008, 09h41
  5. Supprimer une colonne avec valeurs par défaut
    Par SlashOwnsU dans le forum MS SQL Server
    Réponses: 1
    Dernier message: 18/09/2006, 10h10

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