为什么通过条件运算符直接使用条件生成YES和NO?

时间:2014-01-30 07:57:31

标签: objective-c cocoa

在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文件中......

1 个答案:

答案 0 :(得分:4)

这只是糟糕的编程风格/理解。不要这样做。

在学生的作品中经常可以看到,他们没有正确理解布尔值是价值(因为它们不是数字,而是将数值等同于数字),而且表达式可以是布尔值。

注意:(Objective-)C(++)中的布尔/逻辑运算符被定义为返回整数而不是布尔值,因此在这些语言中可以理解对布尔值的一些混淆。但是整数是0或1并且对应于false / NO&amp;分别为真/是。