"?:"和目标c中的if语句之间有什么区别吗?

cor*_*erg 8 conditional if-statement objective-c conditional-operator inline-if

使用'?:'条件和简单的'if-then-else'语句之间有区别吗?它只是另一种方式,或者它实际上使用更少的空间/花费更少的时间来阅读比'if'语句?

例:

如果声明:

if (item1.isEqualToString:@"2") //If statement
    [self doSomething];
else
    [self doSomethingElse];

item1.isEqualToString:@"2" ? [self doSomething] : [self doSomethingElse]; //'?:' statement
Run Code Online (Sandbox Code Playgroud)

Jac*_*ack 17

是,有一点不同.

语义上是if/else语句的意思

if (condition)
  statements
else
  statements
Run Code Online (Sandbox Code Playgroud)

而三元条件是

condition ? expression : expression
Run Code Online (Sandbox Code Playgroud)

因此,您可以将?:运算符的结果分配给某些内容,而不能使用if语句执行此操作.实际上?:运算符本身就是一个表达式,所以你可以将它嵌套在其他表达式中,甚至是其他的?:运算符.

?:也是类型检查,这个

condition ? [self methodThatReturnsVoid] : [self methodThatReturnsInt]
Run Code Online (Sandbox Code Playgroud)

由于结果类型可能会根据条件发生变化,因此会引发错误.


Hot*_*cks 6

杰克建议,有一点不同.您可以将?:运算符重写为:

ExpressionType temp;
if (condition) {
    temp = trueExpression;
}
else {
    temp = falseExpression;
}
lvalue = temp;  // (Where "lvalue" refers to the receiver of the resulting value)
Run Code Online (Sandbox Code Playgroud)

至于效率,几个机器指令集的?:硬件实现版本用于简单的情况,但不适用于更复杂的情况(他们会使用类似于上面的东西),因此很难说哪个更有效.

?:运算符的主要优点是它允许将条件操作嵌入到表达式中,而不必使用if/else分解表达式,这可以使概念上(和视觉上)更简单的代码,即使实际的机器复杂性并没有显着(如果有的话)减少.