在Cocoa的NSRange.h中,我注意到以下内联函数:
NS_INLINE BOOL NSLocationInRange(NSUInteger loc, NSRange range) {
return (!(loc < range.location) && (loc - range.location) < range.length) ? YES : NO;
}
我发现作者选择通过条件运算符返回YES和NO而不是编写如下函数,这让人感到很困惑:
NS_INLINE BOOL NSLocationInRange(NSUInteger loc, NSRange range) {
return (!(loc < range.location) && (loc - range.location) < range.length);
}
为什么前者更可取?我通常会认为这只是一种古怪的编程风格,但是想知道(可能是错误的)是否有一些我遗漏的东西,因为它出现在Apple的一个公共.h文件中......
答案 0 :(得分:4)
这只是糟糕的编程风格/理解。不要这样做。
在学生的作品中经常可以看到,他们没有正确理解布尔值是价值(因为它们不是数字,而是将数值等同于数字),而且表达式可以是布尔值。
注意:(Objective-)C(++)中的布尔/逻辑运算符被定义为返回整数而不是布尔值,因此在这些语言中可以理解对布尔值的一些混淆。但是整数是0或1并且对应于false / NO&amp;分别为真/是。