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 Java Discussion :

null == var ou var == null


Sujet :

Langage Java

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Profil pro
    Inscrit en
    Décembre 2009
    Messages
    14
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2009
    Messages : 14
    Par défaut null == var ou var == null
    Bonjour,

    j'ai une petite question: Un architecte m'a un jour conseillé d'écrire mes tests

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    if(null == var){
     
    }
    plutôt que

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    if(var == null){
     
    }
    Mais je ne me souviens plus la raison qu'il m'avait donné. Est ce que quelqu'un pourrait m'éclairer la dessus. Merci d'avance.

  2. #2
    Expert éminent
    Avatar de adiGuba
    Homme Profil pro
    Développeur Java/Web
    Inscrit en
    Avril 2002
    Messages
    13 938
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur Java/Web
    Secteur : Transports

    Informations forums :
    Inscription : Avril 2002
    Messages : 13 938
    Billets dans le blog
    1
    Par défaut
    Salut,


    C'est surtout utile dans des langages comme le C ou le C++ où n'importe quel type peut représenter un booléen. Le problème survient lorsqu'on confond == et = :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    if(var = null){
     
    }
    Ici on ne compare pas var à null, mais on affecte la valeur null à la référence var.

    En C/C++ tous les types peuvent être convertis en booleen de manière implicite, ce qui fait que ce genre d'erreur peut passer inaperçu.

    En Java le problème apparait uniquement si on manipule les types boolean/Boolean :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    	boolean b = false;
     
    	if ( b = false ) {
    		// on ne passe jamais ici :
    		System.out.println("b false");
    	}
    a++

  3. #3
    Expert éminent
    Avatar de tchize_
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Avril 2007
    Messages
    25 482
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 46
    Localisation : Belgique

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2007
    Messages : 25 482
    Par défaut
    j'utilise toujours la deuxième, sinon aucune raison sauf éventuellement si il existe des conventions interne à la boite. L'idéal étant que tous les programmeur sur le logiciel utilisent la même convention. Personnellement, j'utilise toujours la convention

    <variable que je veux tester> <comparateur> <valeur de référence>

    mais d'un point de vue jvm, l'opération
    <valeur de référence> <comparateur> <variable que je veux tester>

    est identique.

  4. #4
    Membre émérite
    Profil pro
    Inscrit en
    Avril 2007
    Messages
    764
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2007
    Messages : 764
    Par défaut
    Certains préconisent d'écrire
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    "test".equals(chaineATester)
    plutôt que
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    chaineATester.equals("test")
    afin d'éviter de lever une exception si la chaineATester était nulle.


    En revanche, je ne vois vraiment pas quelle pourrait être la différence entre "null == var" et "var == null", pour moi ces deux expressions sont identiques

  5. #5
    Expert éminent
    Avatar de adiGuba
    Homme Profil pro
    Développeur Java/Web
    Inscrit en
    Avril 2002
    Messages
    13 938
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur Java/Web
    Secteur : Transports

    Informations forums :
    Inscription : Avril 2002
    Messages : 13 938
    Billets dans le blog
    1
    Par défaut
    Petite précision : cela ne concerne pas uniquement null mais tous les types "constants" :

    Ici une faute de frappe malencontreuse affecte 100 à la variable intValue au lieu de comparer sa valeur.
    En Java aucun problème car le compilateur génèrera une erreur car il reçoit un int à la place d'un booléen.
    En C/C++ ca passera inaperçu et cela peut causer un temps fou à rechercher les raisons d'un comportement qui semble aléatoire.


    Si on inverse le test, l'erreur sera détecté de suite quoi qu'il arrive :
    En effet on ne peut pas affecter une valeur dans une constante...


    a++

  6. #6
    Membre averti
    Profil pro
    Inscrit en
    Décembre 2009
    Messages
    14
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2009
    Messages : 14
    Par défaut
    C'est un peu plus clair. Je pense que cela était donc imposé par convention sur mon ancien projet.

    Merci à tous pour vos réponses!!!

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

Discussions similaires

  1. is_null($var) ou $var = == NULL ?
    Par Tchupacabra dans le forum Langage
    Réponses: 1
    Dernier message: 22/11/2007, 00h20
  2. problème de champs not null qui sont marqués null à la création
    Par Elianora la blanche dans le forum Outils
    Réponses: 6
    Dernier message: 02/02/2007, 09h33
  3. NOT NULL enregistre des valeurs null
    Par tyberium dans le forum Langage SQL
    Réponses: 2
    Dernier message: 04/12/2006, 09h20
  4. difference entre is null et egal a null?
    Par sali dans le forum Langage SQL
    Réponses: 4
    Dernier message: 02/11/2005, 08h38

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