![](/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.