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 :

place des variables


Sujet :

Langage Delphi

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre éprouvé
    Profil pro
    Inscrit en
    Mai 2007
    Messages
    866
    Détails du profil
    Informations personnelles :
    Âge : 60
    Localisation : France

    Informations forums :
    Inscription : Mai 2007
    Messages : 866
    Par défaut place des variables
    bonjour,

    Comme je suis autodidacte, j'ai parfois des lacunes sur des fondamentaux.

    Sur les 3 bases de code suivantes, j'ai placé une variable à différents endroits

    Voici ma question: quelle est la différence entre les 3 versions

    Cas N°1

    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
    unit Unit1;
    
    interface
    
    uses
      Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
      Dialogs;
    
    type
      TForm1 = class(TForm)
      private
      mavariable:integer;
        { Déclarations privées }
      public
        { Déclarations publiques }
      end;
    
    var
      Form1: TForm1;
    
    implementation
    
    {$R *.dfm}
    
    end.

    cas N°2

    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
    unit Unit1;
    
    interface
    
    uses
      Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
      Dialogs;
    
    type
      TForm1 = class(TForm)
      private
         { Déclarations privées }
      public
      mavariable:integer;
        { Déclarations publiques }
      end;
    
    var
      Form1: TForm1;
    
    implementation
    
    {$R *.dfm}
    
    end.
    cas N°3

    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
    27
    unit Unit1;
    
    interface
    
    uses
      Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
      Dialogs;
    
    type
      TForm1 = class(TForm)
      private
         { Déclarations privées }
      public
         { Déclarations publiques }
      end;
    
    var
      Form1: TForm1;
     mavariable:integer;
    
    
    implementation
    
    {$R *.dfm}
    
    end.
    Le font de ma question c'est comment déclarer des variables globales.
    Je sais , il faut éviter, mais j'en ai que 3 sur tout mon projet.
    Jusqu'a présent j'utilisais le cas N°3, mais est ce que le cas N°1 fonctionne aussi.
    Le problème est qu'il faut declarer uses unit1 dans la form où est utilisée la variable, et je crains les références circulaires.

    Est ce qu'il y a d'autres possiblité de déclarer des variables globale ?


    cordialement

  2. #2
    Membre chevronné

    Homme Profil pro
    Chef de Projet ATIC
    Inscrit en
    Novembre 2005
    Messages
    274
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 50
    Localisation : France, Eure (Haute Normandie)

    Informations professionnelles :
    Activité : Chef de Projet ATIC
    Secteur : Finance

    Informations forums :
    Inscription : Novembre 2005
    Messages : 274
    Par défaut
    Dans le 1er cas, ta variable n'est accessible que dans TForm1, elle est masquée au reste de ton programme (partie private).

    Dans le 2ème cas, elle est publique et affectée à TForm1. N'importe qui ayant accès à Tform1 peut l'utiliser via TForm1.mavariable

    Dans le 3ème, on y accède directement en référençant uniquement Unit1.

    La 1) n'est donc pas du tout appropriée pour une variable globale. La 2 et 3 "peuvent" l'être, mais il y a, comme tu l'indiques, de gros risques de références circulaires dès l'instant que tu as besoin d'accéder aux composants entre unités.

    Les quelques fois où j'ai eu besoin de variables globales, j'ai utilisé une de ces 2 méthodes :

    1/ Déclarer la variable dans le projet (fichier DPR), tout le monde y a donc accès implicitement

    2/ Créer une unité contenant toutes mes variables et en référençant cette unité partout. Elle ne contenait aucun composant, juste variables et fonctions globales.

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

    Informations forums :
    Inscription : Septembre 2008
    Messages : 5 933
    Par défaut
    Citation Envoyé par Okaryn Voir le message
    Dans le 1er cas, ta variable n'est accessible que dans TForm1, elle est masquée au reste de ton programme (partie private).
    Pas tout à fait. Elle est accessible depuis partout dans l'unité courante. Pour qu'elle ne le soit vraiment que par TForm1, il faut que la section soit strict private.

    Citation Envoyé par Okaryn Voir le message
    1/ Déclarer la variable dans le projet (fichier DPR), tout le monde y a donc accès implicitement
    Une application console éventuellement, sinon pas

    Dans les cas généraux et si la variable n'est pas dépendante de TForm1, mieux vaut ne pas l'y inclure comme membre. Une unité ne contenant que les variables et constantes est préférable et plus lisible.

  4. #4
    Membre chevronné

    Homme Profil pro
    Chef de Projet ATIC
    Inscrit en
    Novembre 2005
    Messages
    274
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 50
    Localisation : France, Eure (Haute Normandie)

    Informations professionnelles :
    Activité : Chef de Projet ATIC
    Secteur : Finance

    Informations forums :
    Inscription : Novembre 2005
    Messages : 274
    Par défaut
    Citation Envoyé par Andnotor Voir le message
    Une application console éventuellement, sinon pas
    C'est pas beau de vieillir, on s'invente des trucs qui n'existent pas

  5. #5
    Expert éminent
    Avatar de Paul TOTH
    Homme Profil pro
    Freelance
    Inscrit en
    Novembre 2002
    Messages
    8 964
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 56
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Freelance
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Novembre 2002
    Messages : 8 964
    Par défaut
    une variable globale (qui n'a rien de "pas bien") est forcément la solution 3.

    les solutions 1 et 2 créent autant de variables "mavariable" qu'il y a d'instance de TForm1. Et si la variable globale Form1 pointe sur une instance de TForm1, alors, avec la solution 2, Form1.mavariable permet d'accéder à cette instance de mavariable.

    comme indiqué plus haut, la solution 1 ne rend "mavariable" accessible que depuis une méthode de TForm1 ou d'un code à l'intérieur de l'unité.
    Developpez.com: Mes articles, forum FlashPascal
    Entreprise: Execute SARL
    Le Store Excute Store

  6. #6
    Expert confirmé

    Avatar de Nono40
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Mai 2002
    Messages
    8 640
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 58
    Localisation : France, Loir et Cher (Centre)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : Industrie

    Informations forums :
    Inscription : Mai 2002
    Messages : 8 640
    Par défaut
    Citation Envoyé par Paul TOTH Voir le message
    une variable globale (qui n'a rien de "pas bien") est forcément la solution 3.
    +1

    Si les variables globales que tu ajoutes ne sont pas directement liées à TForm1 il est préfarable de les grouper dans une unité commune sans fiche.
    Quand le projet a beaucoup de fiches on sais ou les chercher.

    J'utilise 3 si la variables est très fortement liée à la fiche de l'unité ou l'unité elle-même.

    Si la variable dépend de l'instance de TForm1 et que TForm1 est créée plus d'une fois, alors c'est la solution 2 qui devient obligatoire.
    Delphi :
    La F.A.Q. , 877 réponses à vos questions !
    264 sources à consulter/télécharger !

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. [Toutes versions] Libération des variables, gain de place ?
    Par FtF Nemesis dans le forum VBA Access
    Réponses: 2
    Dernier message: 20/05/2011, 10h07
  2. Réponses: 4
    Dernier message: 15/12/2002, 04h19
  3. Gestion des variables - mémoire ?
    Par RIVOLLET dans le forum Langage
    Réponses: 4
    Dernier message: 26/10/2002, 12h44
  4. [VB6] [Fichier] Enregistrer des variables de structure
    Par de.bo dans le forum VB 6 et antérieur
    Réponses: 4
    Dernier message: 07/10/2002, 11h09
  5. Réponses: 4
    Dernier message: 18/07/2002, 13h32

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