C中的三元运算符(包括Objective-C& C ++) - 在其他条件下什么都不做

时间:2014-07-17 13:48:20

标签: objective-c c ternary-operator conditional-operator

只是想得到你们的澄清。我试图弄清楚如何在Objective-C中使用三元运算符的指令的else条件下做什么。我开始做类似下面的事情似乎工作得很好,但我只是希望在后台没有奇怪的伏都教。

(condition) ? [object method] : nil; 
self.intNumber = (localIntNumber) ? localIntNumber : self.intNumber; // set intNumber to itself if localIntNumber doesn't exist
self.myObject = (newObject) ? newObject : self.myObject; // different from intNumber in that we're dealing with a Foundation object (can be nil) instead of a regular int

以上任何一个犹太教徒要做什么?想法?

1 个答案:

答案 0 :(得分:2)

这两个都是可以接受的,以相同的方式阅读并以相同的方式编译:

self.intNumber = (localIntNumber) ? localIntNumber : self.intNumber; self.myObject = (newObject) ? newObject : self.myObject;

这也是可以接受的,如@Cornelius所示:

self.intNumber = localIntNumber ?: self.intNumber;
self.myObject = newObject ?: self.myObject;

这种使用三元运算符的方式并不常见。记住,你正在为你未来的自己(或许是其他人)编写代码,所以应该避免任何不必要的隐秘。

编写代码时,代码可读性应该在您的注意事项列表中很高

感谢@trojanfoe提出这个问题。

如果您没有else条件,我强烈推荐其中一种

if (localIntNumber) {
    self.intNumber = localIntNumber
}

if (newObject) {
    self.myObject = newObject;
}

当然,假设您之前已将self.intNumberself.myObject设置为有效值,以避免需要else条件。