![](/img/trans.png)
[英]Is there any difference between bool, Boolean, and BOOL in Objective-C?
[英]Is there any difference between '?:' and an if statement in objective c?
使用'?:'條件和簡單的'if-then-else'語句之間有區別嗎? 它只是另一種方式,或者它實際上使用更少的空間/花費更少的時間來閱讀比'if'語句?
例:
如果聲明:
if (item1.isEqualToString:@"2") //If statement
[self doSomething];
else
[self doSomethingElse];
item1.isEqualToString:@"2" ? [self doSomething] : [self doSomethingElse]; //'?:' statement
是,有一點不同。
語義上是if / else語句的意思
if (condition)
statements
else
statements
而三元條件是
condition ? expression : expression
因此,您可以將?:運算符的結果分配給某些內容,而不能使用if語句執行此操作。 實際上?:運算符本身就是一個表達式,所以你可以將它嵌套在其他表達式中,甚至是其他的?:運算符。
?:也是類型檢查,這個
condition ? [self methodThatReturnsVoid] : [self methodThatReturnsInt]
由於結果類型可能會根據條件發生變化,因此會引發錯誤。
傑克建議,有一點不同。 您可以將?:
運算符重寫為:
ExpressionType temp;
if (condition) {
temp = trueExpression;
}
else {
temp = falseExpression;
}
lvalue = temp; // (Where "lvalue" refers to the receiver of the resulting value)
至於效率,幾個機器指令集都有?:
版本?:
用於簡單情況的硬件實現,但不適用於更復雜的情況(他們會使用類似於上面的東西),因此很難說哪個更有效。
?:
運算符的主要優點是它允許將條件操作嵌入到表達式中,而不必使用if / else分解表達式,這樣可以在概念上(和視覺上)更簡單的代碼,即使實際機器復雜性不顯着(如果有的話)減少。
為了附上Jack和Hot Licks提供的好答案,決定使用哪一個部分是由於必要性而部分是由風格決定的。 例如,?:通常會減少冗余,這可以使代碼更簡單,更簡單,更易於閱讀和維護 - 沒有更新if..else的一半而忘記另一半的風險。 例如
int result = SomeFunction(arg1, arg2, arg3, (someBool ? arg4a : arg4b));
VS
int result = -1;
if (someBool) {
result = SomeFunction(arg1, arg2, arg3, arg4a);
} else {
result = SomeFunction(arg1, arg2, arg3, arg4b);
}
這是一個簡潔的簡潔示例,但您可以想象,使用真實的參數名稱和周圍的復雜性,可能很容易從幾個月后回來並修改對SomeFunction的第二次調用而不會意識到另一個存在,更不用說也應該修改。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.