Le deuxième exemple est ce que j'ai entendu appelé "Yoda conditions"; "False, la valeur de retour de cette méthode doit être". Ce n'est pas la façon dont vous le dites en anglais et, par conséquent, parmi les programmeurs anglophones, c'est généralement méprisé.
En ce qui concerne les performances, il n'y a vraiment aucune différence. Le premier exemple est généralement meilleur grammaticalement (et donc pour la lisibilité), mais étant donné le nom de votre méthode la "grammaire" impliquée (et le fait que vous comparez bool à bool) rendrait la vérification d'égalité redondante de toute façon. Donc, pour une vraie déclaration, je voudrais simplement écrire:
if(Class.HasSomething())
{
// do somthing
}
else
{
// do something else
}
Ce serait progressivement plus rapide, que le bloc a essentiellement si() intégré par rapport à l'égalité, donc si vous codez if(Class.HasSomething() == true)
le CLR évaluerez if((Class.HasSomething() == true) == true)
. Mais, nous parlons ici d'un gain de quelques horloges (pas des millisecondes, pas des tics, mais des horloges, celles qui arrivent 2 milliards de fois par seconde dans les processeurs modernes).
Pour une condition fausse, il s'agit d'un lien entre l'utilisation de l'opérateur not: if(!Class.HasSomething())
et l'utilisation d'une comparaison à false: if(Class.HasSomething() == false)
. Le premier est plus concis, mais il peut être facile de rater ce petit point d'exclamation dans une expression complexe (d'autant plus qu'il se produit avant toute l'expression) et donc je considérerais équation avec false pour s'assurer que le code est lisible.
Ce ne serait pas quelque chose qu'un compilateur d'optimisation décent ferait de toute façon? Seul, je veux dire? En supposant qu'il y a réellement un avantage de performance? – Yuka
Si la méthode renvoie un booléen, est-il utile de la comparer explicitement? Pourquoi ne pas simplement 'if (Class.HasSomething())'? –