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 :

[optimisation] var ou pas var dans procedure ?


Sujet :

Langage Delphi

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé

    Profil pro
    Inscrit en
    Décembre 2003
    Messages
    133
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2003
    Messages : 133
    Par défaut [optimisation] var ou pas var dans procedure ?
    hello

    supposons que l'on ait une procedure
    Proc(x1 : type1; x2 : type2; ......);
    et que certaines variables xi ne sont pas modifiées à l'intérieur de la procédure.

    Est-il préférable de les mettre en passage par variable même si on ne les modifie pas ?

    (à mon avis oui car on ne copie pas la variable mais delphi fait comme pour un pointeur, mais si je pose la question c'est parce que je vois rarement les passages par variable)

    merci d'avance pour vos réponses !

  2. #2
    Membre émérite
    Avatar de MD Software
    Profil pro
    Inscrit en
    Juin 2003
    Messages
    613
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2003
    Messages : 613
    Par défaut
    Si le type concerné est un objet, pas besoin.
    Si c'est un type de base, effectivement, il y a recopie. En cas de passage par recopie, en effet tu perds le temps de la recopie, mais dans le cas d'un passage par adresse, tu peux te retrouver à modifier des valeurs sans le vouloir.
    Après, c'est à toi de choisir. Si ton application a des exigences précises, l'un peut-être préférable à l'autre. Un cas fréquent, c'est les procdures avec un gros paquet de paramètres. Dans ce cas, il est préférable de passer par var, mais faut faire attention à ce qu'on fait.
    MD Software
    ---------------------------
    F.A.Q. Delphi - Cours Delphi - Composants Delphi - Sources Delphi

  3. #3
    Membre confirmé

    Profil pro
    Inscrit en
    Décembre 2003
    Messages
    133
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2003
    Messages : 133
    Par défaut
    merci pour ta réponse MD,

    qu'entends-tu par type de base ?

    en fait j'utilise beaucoup de variables de type record et array, assez grosses

    la plupart du temps je ne veux pas les modifier (je les osculte seulement) dans ce cas pas besoin de "var" tu me dis ? (si j'ai bien compris)
    et ça change quoi si je le met quand même ? (sachant que je ne risque pas de modifier quelque chose sans le vouloir)

  4. #4
    Membre émérite
    Avatar de MD Software
    Profil pro
    Inscrit en
    Juin 2003
    Messages
    613
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2003
    Messages : 613
    Par défaut
    type de base : int, real ..... pour eux recopie si pas var
    Pour les tableaux DYNAMIQUES : pas de recopie (dans tous les cas)
    Pour les objets : pas de recopie (dans tous les cas)
    Pour les record, je me rend compte que je sais pas. Je vais vérifier.
    MD Software
    ---------------------------
    F.A.Q. Delphi - Cours Delphi - Composants Delphi - Sources Delphi

  5. #5
    Membre averti

    Profil pro
    Inscrit en
    Février 2004
    Messages
    17
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2004
    Messages : 17
    Par défaut Passage par valeur ou référennce
    Si vous voulez ne pas travailler sur l'original:

    procedure MaProc(MonParametre: UnType)

    Si vous voulez travailler sur l'original et le modifier (ex: un gros tableau)

    procedure MaProc(var MonTableau: UnTypeDeTableau)

    Si vous voulez vous épargner la création d'une copie tout en empêchant de modifier votre var:

    procedure MaProc(const MonParametre: UnType)

    Il est possible de programmer (et même conseillé) en n'utilisant var et const. C'est indispensable pour coder une fonction d'échange:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
     
    procedure Swap(a, b: Integer);
    var
      t: integer;
    begin
      t:=b;
      b:=a;
      a:=t;
    end;
    Ceci ne marchera pas car vous avez travaillé sur une copie de a et b
    (piège classique)

    Il faut écrire:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
     
    procedure Swap([var] a, b: Integer);
    var
      t: integer;
    begin
      t:=b;
      b:=a;
      a:=t;
    end;

  6. #6
    Membre confirmé

    Profil pro
    Inscrit en
    Décembre 2003
    Messages
    133
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2003
    Messages : 133
    Par défaut
    ah tiens je n'ai jamais vu "const" comme ça dans la déclaration !

    merci en tout cas, je ferais comme ça dorénavant !

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

Discussions similaires

  1. recuperer var POST puis envoi dans un email
    Par digger dans le forum Langage
    Réponses: 1
    Dernier message: 16/05/2015, 00h28
  2. Réponses: 0
    Dernier message: 05/08/2009, 15h53
  3. Réponses: 3
    Dernier message: 05/08/2005, 19h34
  4. optimisation du code et var globales
    Par tigrou2405 dans le forum ASP
    Réponses: 2
    Dernier message: 23/01/2004, 10h59
  5. Réponses: 12
    Dernier message: 26/02/2003, 08h14

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