2016-06-18 6 views
1

速度に関してはif/else文とObjective Cのternary operator文の使用に違いはありますか?それらはコンパイルされたコードで同一ですか?目的関数Cでの三項演算子とそれ以外の場合

つまり、スペースを節約する以外に、次のいずれかを使用する理由がありますか?

//First Option 
Object *myObj = boolean ? trueValue : falseValue; 

//Second Option 
Object *myObj; 
if (boolean) { 
    myObj = trueValue; 
else { 
    myobj = falseValue; 
} 

答えて

1

コンパイルされたコードに若干の違いがあるかもしれませんが、他の1つの方法を好むために、読みやすさ以外に理由はありません。

if/ elseアプローチの一つの利点は、あなたが単一の条件で複数の変数を設定することができることである

Object *myObj1; 
Object *myObj2; 
if (boolean) { 
    myObj1 = trueValue1; 
    myObj2 = trueValue1; 
else { 
    myobj1 = falseValue2; 
    myobj2 = falseValue2; 
} 

Objective-Cではブール値0と1との数値型であるために、あります条件式にまったく依存しないアプローチ:

Object *valArray[] = { falseValue, trueValue }; 
Object *myObj = valArray[boolean]; 
+0

配列メソッドは安全ではありません。真の値は厳密に1に制限されておらず、値はブール値の作成方法に依存します。 – Avi

+0

@Avi Obj-Cが0以外の値をブール値trueとして解釈することは確かですが、すべての論理演算子は0または1を返す必要があります。ブール値の起源がわからないときは、二重の感嘆符のトリック、すなわち!!ブール値を適用することができる。 – dasblinkenlight