73 votes

Test de zéro dans Objective-C - if (x! = Nil) vs if (x)

La plupart des exemples que j'ai trouvés sur le net écrivent ceci:

 if(x != nil)
    // ...
 

Y at-il des problèmes avec cela?

 if(x)
    // ...
 

J'ai essayé les deux dans un programme simple et je n'ai trouvé aucune différence.

Désolé si c'était une question de noob, mais je ne pouvais pas la trouver après une recherche (ce n'était pas particulièrement compatible avec Google).

127voto

Itai Ferber Points 11517

En Objective-C, nil est définie comme une valeur appelée __DARWIN_NULL, qui, essentiellement, évalue 0 ou false dans si-états. Par conséquent, l'écriture if (x == nil) est le même que l'écriture d' if (!x) et de l'écriture if (x != nil) est égal à if (x) (depuis le comparant à d' false crée une négation, et en les comparant à l' true maintient la condition de la même façon).


Vous pouvez écrire votre code de toute façon, et cela dépend vraiment sur qui tu pense que c'est plus lisible. - Je trouver de l' if (x) pour faire plus de sens, mais cela dépend de votre style.

C'est comme comparer if (someCondition == true) contre if (someCondition).
Tout dépend de vous, et qui va être la lecture du code.


Edit: Comme Yuji correctement mentionne, depuis Objective-C est un sur-ensemble de C, toute condition qui correspond à une valeur autre que 0 est considéré comme pour être vrai, et par conséquent, si someCondition dans l'exemple ci-dessus ont été correspondre à une valeur entière, disons, -1, le comparant true entraînerait false, et le if ne serait pas évaluée. Quelque chose d'être conscient de.

8voto

Vladimir Points 110327

Tous les deux

 if (x != nil)
 

et

 if ( x )
 

sont équivalents, choisissez donc la variante qui, à votre avis, rend votre code plus lisible pour vous (et pour les autres qui liront et prendront en charge votre code)

-5voto

pop Points 1

En réalité, les deux instructions font la même chose, mais x!=Null a des cycles machine supplémentaires à effectuer par rapport à l’autre.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X