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

Java Discussion :

Ordre de vérification des conditions dans un "if"


Sujet :

Java

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Profil pro
    Inscrit en
    Septembre 2007
    Messages
    144
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2007
    Messages : 144
    Par défaut Ordre de vérification des conditions dans un "if"
    Bonjour,
    Je dois vérifier une condition sur le paramètre (de type String) d'une fonction grâce à des fonctions de la classe String. Je dois donc tout d'abord vérifier que le paramètre est non null, puis-je utiliser un unique if ou mieux vaut il en utiliser deux?

    Petit "schéma":
    Faut il faire:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    maFonction(String maString)
    {
      if(maString != null)
       {
         if(maString.length < X)
          [...]
       }
    }
    ou bien:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    maFonction(String maString)
    {
      if(maString != null && maString.length < X)
       {
     
          [...]
       }
    }
    ma crainte dans la deuxième solution étant que l'ordre des vérifications ne soit pas garanti et mène à une null pointer exception éventuellement.

    Merci d'avance,
    LDPDC

  2. #2
    Invité
    Invité(e)
    Par défaut
    Salut
    En Java, si tu utilises l'opérateur logique && l'évaluation paresseuse va être utilisée. Donc si la première condition est fause, il n'évaluera pas la seconde. Par contre si tu utilises & les deux parties sont toujours évaluées.
    Donc dans ton cas avec
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    if(maString != null && maString.length < X)
    tu ne cours aucun risque
    A plus

  3. #3
    Modérateur
    Avatar de nouknouk
    Homme Profil pro
    Inscrit en
    Décembre 2006
    Messages
    1 655
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : France

    Informations forums :
    Inscription : Décembre 2006
    Messages : 1 655
    Par défaut
    Citation Envoyé par George7 Voir le message
    Par contre si tu utilises & les deux parties sont toujours évaluées.
    Je pense que tu voulais plutôt parler de l'opérateur ||

  4. #4
    Invité
    Invité(e)
    Par défaut
    Citation Envoyé par nouknouk Voir le message
    Je pense que tu voulais plutôt parler de l'opérateur ||
    Non...

    Un seul signe -> tout est toujours évalué
    deux fois l'opérateur -> évaluation paresseuse.
    Que ce soit avec |, ||, & ou &&
    Donc avec &, les deux côtés sont toujours évalués, tu peux tester

  5. #5
    Modérateur
    Avatar de nouknouk
    Homme Profil pro
    Inscrit en
    Décembre 2006
    Messages
    1 655
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : France

    Informations forums :
    Inscription : Décembre 2006
    Messages : 1 655
    Par défaut
    ok, sauf que les opérateurs | et & sortent du cadre du 'if' puisque ce sont des opérateurs 'bit à bit' (qui font un calcul et renvoient une valeur) et pas des opérateurs 'logiques'.

    Il est donc tout à fait normal que & et | soient systématiquement évalués, au même titre que n'importe quel autre opérateur de calcul (+, -, *, /, etc...).

    Ceci étant dit, merci pour la précision, notamment pour l'opérateur || pour lequel je ne pensais pas qu'il faisait également une évaluation paresseuse

  6. #6
    Invité
    Invité(e)
    Par défaut
    Si tu utilises & et | sur un booléen, ca se comporte comme je le dis ci dessus. Ca rentre tout à fait dans le cadre du if et répond à la question posée, voir par exemple http://www1.cs.columbia.edu/~lennox/...s/logical.html
    Si tu ne me crois pas fais ce test :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    String test = null;
    if(test != null & test.length() > 0) {}
    Tu vas avoir un NullPointerException et pas avec &&

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

Discussions similaires

  1. Ordre d'évaluation des conditions dans un if
    Par christian79 dans le forum C++
    Réponses: 33
    Dernier message: 17/05/2013, 01h03
  2. Ordre des conditions dans une clause WHERE, important ou pas en 2012 ?
    Par clavier12AZQSWX dans le forum Langage SQL
    Réponses: 5
    Dernier message: 07/03/2012, 11h54
  3. [MySQL] Influence de l'ordre des conditions dans la clause WHERE
    Par morgan47 dans le forum PHP & Base de données
    Réponses: 5
    Dernier message: 09/02/2012, 22h46

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