簡體   English   中英

“?:”和目標c中的if語句之間有什么區別嗎?

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM