Si l'instruction avec des && opérateur vérifie la 2ème valeur?
Un if-statement
avec un && operator
vérifier pour le deuxième paramètre si le premier est false
/NO
?
Suite être en mesure de crash?
NSDictionary *someRemoteData = [rawJson valueForKey:@"data"];
if( [someRemoteData isKindOfClass:[NSDictionary class]] && someRemoteData.count > 0 ){
//..do something
}
S'il vous plaît pas simple réponse oui ou non, mais d'expliquer pourquoi.
- Si l'Objective-C est comme presque toutes les autres langues, à cet égard, la réponse est non il n'est pas, depuis
&&
raccourcis. De même,||
va cesser de l'évaluation lorsqu'il détecte une condition qui est vrai.
Vous devez vous connecter pour publier un commentaire.
Non, il n'a pas d'évaluer l'expression après avoir appris que la réponse va être
NO
. Ceci est appelé de court-circuit, et il est une partie essentielle de l'évaluation des expressions booléennes en C, C++, Objective-C, et d'autres langues avec la même syntaxe. Les conditions sont évaluées de gauche à droite, ce qui rend le dispositif d'évaluation prévisible.La même règle s'applique à la
||
opérateur: dès que le code sait que la valeur estYES
, l'évaluation s'arrête.De court-circuit permet de vous prémunir contre les invalides de l'évaluation dans un composite unique expression, plutôt que d'opter pour un
if
déclaration. Par exemple,aurait conduit à un comportement indéfini si il n'y avait pas de court-circuit. Mais depuis l'évaluation saute d'évaluation de
array[index]
quandindex
est pas valide, l'expression ci-dessus est légale.&
qui ne pas raccourci, trop.Objective-C utilise évaluation différée, ce qui signifie que seule l'opérande de gauche est évaluée dans votre cas.
NON, il ne fonctionne pas. Si la première instruction échoue à la deuxième n'est jamais vérifié si par exemple, vous pouvez le faire
(ArrayList != null && ArrayList.size() > 0)
et vous n'obtiendrez jamais une erreur si la variable n'est pas initialisée.