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 :

Valeur par défaut d'une variable


Sujet :

Langage Delphi

  1. #1
    Membre Expert

    Homme Profil pro
    Retraité
    Inscrit en
    Novembre 2007
    Messages
    3 530
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 64
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Retraité

    Informations forums :
    Inscription : Novembre 2007
    Messages : 3 530
    Par défaut Valeur par défaut d'une variable
    Bonjour les gens,

    Dans une procédure, si j'ai une variable B de type Boolean. Quelle est sa valeur par défaut à la première ligne de la procédure ?

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

    Informations forums :
    Inscription : Septembre 2008
    Messages : 5 945
    Par défaut
    Indéterminée, elle peut être VRAI comme FAUX.

  3. #3
    Membre Expert

    Homme Profil pro
    Retraité
    Inscrit en
    Novembre 2007
    Messages
    3 530
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 64
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Retraité

    Informations forums :
    Inscription : Novembre 2007
    Messages : 3 530
    Par défaut
    indéterminée, en informatique, c'est super pour les bugs aléatoires

    Et tu sais ça comment ? C'est noté dans un coin de la doc ?

    Il me semblait que c'était initialisé à False . Encore une certitude qui s'évapore.

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

    Informations forums :
    Inscription : Septembre 2008
    Messages : 5 945
    Par défaut
    Citation Envoyé par Papy214 Voir le message
    Et tu sais ça comment ?
    Je dirais que ça a toujours été ainsi

    Tu alloues un bloc mémoire mais son contenu n'est pas touché. C'est plus ou moins gênant dans certains cas (le tiens actuel) mais on peut aussi se dire "pourquoi effacer ce bloc, je vais le remplir juste derrière ?" et donc gagner du temps.

    La même chose survient avec des fichiers ; on peut en fixer la taille sans rien y écrire. Le fichier contiendra ce qu'il y avait sur le disque à cet instant :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    Handle := CreateFile(...);
    SetFilePointerEx(Handle, UneTailleArbitraire, nil, FILE_BEGIN);
    SetEndOfFile(Handle);
    Il y a tout de même des subtilités ; quand on parle de variables locales/globales, il faut distinguer deux types de données : les types avec compteur de référence et les autres.
    Les types avec compteur de référence (chaînes, interfaces, etc.) sont toujours initialisés.

    Ça s'explique assez aisément ; si une chaîne n'était pas initialisée, son compteur de référence vaudrait n'importe quoi. Y insérer un texte impliquerait donc le décrément du compteur et par conséquent la corruption d'une zone mémoire. VA presque assurée

    Tu aurais donc posé la même question pour une chaîne, je t'aurais répondu "elle est vide" mais un booléen on ne sait pas

    Citation Envoyé par Papy214 Voir le message
    Il me semblait que c'était initialisé à False.
    Tu confonds, les propriétés d'un objet sont initialisées à zéro (nil) lors de son instanciation.

  5. #5
    Membre Expert
    Avatar de Charly910
    Homme Profil pro
    Ingénieur TP
    Inscrit en
    Décembre 2006
    Messages
    2 523
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur TP
    Secteur : Bâtiment Travaux Publics

    Informations forums :
    Inscription : Décembre 2006
    Messages : 2 523
    Par défaut
    Bonjour,

    avec D7 j'ai toujours vu que les booléens étaient initialisés par défaut à False. Mais par sécurité, j'initialise toutes les variables (c'est peut être un peu lourding ? mais ceinture et bretelles ...)

    A+
    Charly

    PS : vu le post de AndNotOr, c'est surement un coup de chance qu'ils soient à False !

  6. #6
    Membre émérite
    Avatar de Cirec
    Profil pro
    Inscrit en
    Octobre 2010
    Messages
    467
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2010
    Messages : 467
    Par défaut
    Bonjour,

    les variables globales sont initialisées par le compilateur
    les variables locales elles sont indéfinies
    Citation Envoyé par Aide en ligne de Delphi
    Si vous n'initialisez pas explicitement une variable globale, le compilateur l'initialise à 0. Les données de l'instance d'un objet (champs) sont également initialisées à 0. Sur la plate-forme Win32, le contenu d'une variable locale est indéfini jusqu'à ce qu'une valeur lui soit assignée.
    http://docwiki.embarcadero.com/RADSt...ables_(Delphi)

    Cordialement,
    @+

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

    Informations forums :
    Inscription : Septembre 2008
    Messages : 5 945
    Par défaut
    Citation Envoyé par Cirec Voir le message
    les variables globales sont initialisées par le compilateur
    Et bien tant mieux

    Il me semblait que ce n'était pas le cas à une époque (peut-être trop lointaine...)

  8. #8
    Membre Expert

    Homme Profil pro
    Retraité
    Inscrit en
    Novembre 2007
    Messages
    3 530
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 64
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Retraité

    Informations forums :
    Inscription : Novembre 2007
    Messages : 3 530
    Par défaut
    Citation Envoyé par Charly910 Voir le message
    Bonjour,

    avec D7 j'ai toujours vu que les booléens étaient initialisés par défaut à False. Mais par sécurité, j'initialise toutes les variables (c'est peut être un peu lourding ? mais ceinture et bretelles ...)

    A+
    Charly

    PS : vu le post de AndNotOr, c'est surement un coup de chance qu'ils soient à False !
    J'avais eu la même expérience

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

    Informations forums :
    Inscription : Novembre 2004
    Messages : 876
    Par défaut
    Citation Envoyé par Andnotor Voir le message
    Indéterminée, elle peut être VRAI comme FAUX.
    J'irai même plus loin, elle peut être VRAI ($01) comme FAUX ($00) comme VRAI($03) comme VRAI($1A) ...
    J'avais eu un problème à cause de ca une fois, un if monBool = True then qui ne rentrait pas dans le if, alors que l’évaluateur m'affichait monBool comme true, mais monBool($08) <> True($01)

  10. #10
    Membre Expert

    Homme Profil pro
    Retraité
    Inscrit en
    Novembre 2007
    Messages
    3 530
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 64
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Retraité

    Informations forums :
    Inscription : Novembre 2007
    Messages : 3 530
    Par défaut
    Tout ça me fait me poser la question suivante:

    "Qu'est-ce que ça aurait coûté de plus d'initialiser la valeur à faux ?"

    Surement pas grand-chose et ça aurait évité surement pas mal de problèmes comme celui que j'ai rencontré tout récemment ( d'où ma question )

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

    Informations forums :
    Inscription : Septembre 2008
    Messages : 5 945
    Par défaut
    Du temps

    GetMem est plus rapide que AllocMem. Cette différence était sans doute non négligeable à l'époque, certainement moins maintenant il est vrai.

  12. #12
    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
    Citation Envoyé par Papy214 Voir le message
    Tout ça me fait me poser la question suivante:

    "Qu'est-ce que ça aurait coûté de plus d'initialiser la valeur à faux ?"

    Surement pas grand-chose et ça aurait évité surement pas mal de problèmes comme celui que j'ai rencontré tout récemment ( d'où ma question )
    c'est inutile dans 90% des cas....et tu as un Warning quand tu utilises une variables non initialisée.
    Developpez.com: Mes articles, forum FlashPascal
    Entreprise: Execute SARL
    Le Store Excute Store

  13. #13
    Membre Expert

    Homme Profil pro
    Retraité
    Inscrit en
    Novembre 2007
    Messages
    3 530
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 64
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Retraité

    Informations forums :
    Inscription : Novembre 2007
    Messages : 3 530
    Par défaut
    c'est vrai. Encore que .... il m'est arrivé quelques fois que Delphi me dise qu'une variable n'était pas initialisée ...
    Je l'initialise et ... Delphi me dit que la valeur affectée n'est pas utilisée

  14. #14
    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
    Citation Envoyé par Papy214 Voir le message
    c'est vrai. Encore que .... il m'est arrivé quelques fois que Delphi me dise qu'une variable n'était pas initialisée ...
    Je l'initialise et ... Delphi me dit que la valeur affectée n'est pas utilisée
    il arrive qu'il se trompe, mais parfois c'est aussi parce qu'il a une logique implacable:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
    begin
      case toto of
        1 : titi := 'u';  
        2 : titi := 'x';  
      end;
      if titi = 'x' then // warning car toto pourrait être égale à 3 par exemple et du coup titi non initialisé
    end;
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
    begin
      titi := '?': // warning car '?' sera toujours remplacé par 'u' ou 'x'
      if toto  = 1 then
        titi := 'u'
      else
        titi := 'x';  
    end;
    avec la gestion des exceptions ça complique encore un peu plus les choses
    Developpez.com: Mes articles, forum FlashPascal
    Entreprise: Execute SARL
    Le Store Excute Store

Discussions similaires

  1. [A-03] Test et valeur par défaut d'une variable
    Par moilou2 dans le forum VBA Access
    Réponses: 4
    Dernier message: 29/10/2008, 14h17
  2. Sélection valeur par défaut dans une zone de liste
    Par Cécile154 dans le forum IHM
    Réponses: 2
    Dernier message: 15/02/2005, 18h20
  3. Réponses: 2
    Dernier message: 06/07/2004, 17h46
  4. Valeur par défaut dans une table objet
    Par Ricky81 dans le forum Oracle
    Réponses: 12
    Dernier message: 18/03/2004, 11h52
  5. Réponses: 2
    Dernier message: 18/10/2003, 14h42

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