2016-04-16 2 views
1

私はこれをよくテストすることはできません誰かがこれを知っている可能性がある場合、私は思っていました。この簡単なチェックは他の真理がチェックされます場合や、checks`

if ([dict objectForKey:@"key"] != nil || [a isEqualToString:b] || someIntValue> 12) { ... } 

明らかに(どんなに小さなマージン)最初のチェックは、おそらくでも軽い秒より重く、そして第三になりますを持ちます。

私の質問です。最初のものがすでにtrueだったら私のアプリのバイナリは他の2つのステートメントをチェックしますか?もしそうなら、私は上記のようなチェックを微調整するために自分のコードベースで小さなラウンドチェックを行うことを考えていたので、単純にintの比較をそのif文で動かすことになります。

P.S.

私はあなたがPHPと私にだけ二ステートメントウォンに(S)オブジェクトハック何かを行うにはない、この例では、既存のオブジェクトを意味することができますようにあなたは、Objective-Cでunexistingオブジェクトを確認することはできません知っています「Tが存在します

$a = 0; $b = ''; 

if ($a == 0 || $i_dont_exist > 0) { 
    ... 
} 
+0

でも、それは 'object'(' myString.length')にアクセスした後、それがnilでチェック合格しているため、 'nilであるobject'、パーサは第2のチェックを受け入れるだろうか?もしことを暗示しますかそれは恐ろしく危険です。 –

+0

"*私はこの井戸をテストできません*" - できます。本当のブール値を返す2つのテストメソッドと、呼び出されたときにNSLogという何かを設定するだけです。次に、これらをOR演算子を使用してifステートメントに入れると、最初のものだけが評価されます。 – Hamish

+0

@Allendar最初の条件 '[dict objectForKey:@" key "]!= nil'が真であれば、残りの条件はスキップされ、' if'文の本文が実行されます。 – ColGraff

答えて

2

これはshort-circuit evaluationと呼ばれています。 Objective-CはCの厳密なスーパーセットであり、Cは短絡評価をサポートしてObjective-Cもサポートしているためです。だから、

「または」文の最初の条件は、他の条件が評価されるべきではない真である場合。

関連する問題