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 :

Champs versus propriétés


Sujet :

Langage Delphi

  1. #1
    Membre du Club Avatar de papadrago
    Inscrit en
    Juillet 2006
    Messages
    59
    Détails du profil
    Informations forums :
    Inscription : Juillet 2006
    Messages : 59
    Points : 45
    Points
    45
    Par défaut Champs versus propriétés
    C'est surement une question basique de langage mais je ne trouve pas la réponse. Est-ce q'il y a un intérêt à utiliser une propriété pour accéder à un champ plutot qu'au champ lui-meme ?

    Autrement dit, est-ce qu'il faut faire ça :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    public
      Foobar: integer;
    ou ça :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    private
      FFoobar: integer;
    public
      property Foobar : integer read FFoobar write FFoobar;
    Merci

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

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

    Informations forums :
    Inscription : Mars 2005
    Messages : 3 862
    Points : 11 330
    Points
    11 330
    Billets dans le blog
    6
    Par défaut
    l'intérêt des accesseurs est de cacher un champ quand :
    - on doit faire des traitements lors de l'affectation ou rafraîchir une valeur lors de sa lecture (les descendants pourront surcharger les accesseurs)
    - on veut empêcher l'utilisateur d'y toucher n'importe quand : champ initialisable uniquement à la création ou après Clear par exemple
    je ne vois pas d'autre intérêt.

    sinon, si les 2 syntaxes sont possibles dans un cas, autant utiliser la plus simple !!!

    [EDIT] je réponds un peu à côté... dans ton exemple, pas de différence
    Delphi 5 Pro - Delphi 11.3 Alexandria Community Edition - CodeTyphon 6.90 sous Windows 10 ; CT 6.40 sous Ubuntu 18.04 (VM)
    . Ignorer la FAQ Delphi et les Cours et Tutoriels Delphi nuit gravement à notre code !

  3. #3
    Membre du Club Avatar de papadrago
    Inscrit en
    Juillet 2006
    Messages
    59
    Détails du profil
    Informations forums :
    Inscription : Juillet 2006
    Messages : 59
    Points : 45
    Points
    45
    Par défaut
    Merci pour la réponse. En fait, la question vient de la lecture de ce tutoriel (rq: le cours est téléchargeable en PDF à la fin de chaque partie).

    Excellent, mais en anglais.

    Quand il introduit les propriétés , l'auteur a l'air de considérer ici que c'est un bon style de les utiliser à la place des champs. L'argument est que on peut ensuite ajouter des accesseurs si nécessaire.

    Mais ça ne me parait pas suffisant pour utiliser cette construction systématiquement à moins qu'il y ait encore d'autres arguments.

  4. #4
    Expert éminent sénior
    Avatar de Cl@udius
    Homme Profil pro
    Développeur Web
    Inscrit en
    Février 2006
    Messages
    4 878
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 61
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : High Tech - Matériel informatique

    Informations forums :
    Inscription : Février 2006
    Messages : 4 878
    Points : 10 008
    Points
    10 008
    Par défaut
    Salut
    Citation Envoyé par papadrago Voir le message

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    private
      FFoobar: integer;
    public
      property Foobar : integer read FFoobar write FFoobar;
    Sous cette forme, c'est-à-dire sans accesseur Get/Set, autant utiliser une variable.
    Amha, l'intérêt des accesseurs est de garder le contrôle sur la variable. (La définir en lecture seule par exemple), et/ou effectuer des contrôles avant de modifier la variable private.

    En disant cela je repète en gros les propos de tourlourou.

    @+ Claudius

  5. #5
    Membre expérimenté Avatar de guillemouze
    Profil pro
    Inscrit en
    Novembre 2004
    Messages
    876
    Détails du profil
    Informations personnelles :
    Âge : 41
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations forums :
    Inscription : Novembre 2004
    Messages : 876
    Points : 1 448
    Points
    1 448
    Par défaut
    un autre point important a prendre en compte quand tu choisi d'utiliser un champ ou une propriete, est le fait que tu ne puisse pas passer une property en parametre var.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    procedure Inc(var i: integer);// Rappel
    Le code suivant ne compile pas si MaValeur est une property :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    Inc(MonObjet.MaValeur); // impossible si c'est une property !
    mais celui-ci oui :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    var x: integer;
    ..
    x := MonObjet.MaValeur;
    Inc(x);
    MonObjet.MaValeur := x;

Discussions similaires

  1. [SSAS 2K8]champs de propriétés
    Par did36 dans le forum SSAS
    Réponses: 3
    Dernier message: 01/04/2010, 17h01
  2. Réponses: 3
    Dernier message: 10/02/2010, 09h06
  3. Réponses: 15
    Dernier message: 18/11/2008, 15h47
  4. Champ des propriétés de fichier en entete
    Par onejock dans le forum Excel
    Réponses: 3
    Dernier message: 05/09/2008, 16h29
  5. Noms des champs de propriétés
    Par Loken dans le forum VBA Word
    Réponses: 29
    Dernier message: 22/07/2008, 11h08

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