大多数编程语言使用true/false
关键字表示布尔值。我发现即使Smalltalk也使用true/false
。我知道Objective-C只是从Smalltalk借鉴了一些概念,而不是整个语言,但我很好奇它为什么使用YES/NO
而不是更广泛使用的true/false
。是否有历史原因?
大多数编程语言使用true/false
关键字表示布尔值。我发现即使Smalltalk也使用true/false
。我知道Objective-C只是从Smalltalk借鉴了一些概念,而不是整个语言,但我很好奇它为什么使用YES/NO
而不是更广泛使用的true/false
。是否有历史原因?
Objective-C被设计成(并仍然是)C的严格超集。创建者非常努力地确保他们在任何方面都不会破坏与C的兼容性。他们还试图使自己的修改有些明显,以便易于区分哪些代码部分使用Objective-C,哪些部分使用普通C语言。例如,@
用于表示NSString而不仅仅使用引号。这样可以使普通C字符串与新字符串共存。
C已经有了一个TRUE/FALSE宏的非正式系统。我怀疑Objective-C的设计者选择了YES/NO宏以避免冲突,并使其明显表明代码实际上是Objective-C。 还要注意使用nil
来表示“空”对象,而不仅仅是修改了老旧的NULL的行为。
Objective-C是一种非常冗长的语言,所有方法都非常描述性,使用YES/NO代替true/false作为布尔值使其更易于阅读。
如果以下对话在现实生活中发生,你可能会觉得很奇怪: A:“你看过那部电影吗?” B:“True”
如果B回答了“yes”(或“no”),那么听起来就很正常,通过使用YES/NO而不是true/false,代码看起来更像是普通英语。
苹果一直试图让事情更容易使用。如果您阅读一些系统布尔方法并思考如何用更合理的方式回答布尔问题,使用 YES|NO
或 TRUE|FALSE
,您会发现在我看来,答案是 YES|NO
。
否则,您可以在您的代码中始终使用 TRUE|FALSE
。
YES
/NO
宏定义代码更易读(也可以使用TRUE
/FALSE
)。然而,Objective-C现在是C99的超集,所以应该尽可能使用C99的boolean
类型和true
/false
。我曾经考虑过将yes
和no
定义为true
和false
,但到目前为止我还是抵制了这个想法。int matches = NULL;
for (int i = 0; i<count; ++i) {
if (array[i] == value) ++matches;
}
BOOL foundMatch = false;
for (int i = 0; i<count; ++i) {
if (array[i] == value) {
foundMatch = YES;
break;
}
}