Why does Objective-C use YES/NO macro convention instead of true/false?

我怕爱的太早我们不能终老 提交于 2019-12-18 12:14:45

问题


Most languages use the true/false keywords for boolean values. I found that even Smalltalk is using true/false. I know Objective-C is just borrowing concepts from Smalltalk, not the language itself, but I'm curious why it's using YES/NO instead of the more widely-used true/false. Is there any historical reason?


回答1:


Objective-C was designed to be (and still is) a strict superset of C. The creators worked very hard to ensure that they did not break compatibility with C in any way. They also tried to make their modifications somewhat obvious so that it would be easy to tell which parts of the code use Objective-C and which parts use plain C. Case in point, the @ used to denote NSStrings rather than just using quotes. This allows plain C strings to coexist with the new ones.

C already had an informal system of TRUE/FALSE macros. I suspect the designers of Objective-C chose the YES/NO macros to avoid conflict and to make it obvious that the code is actually Objective-C. Notice also the usage nil for the 'empty' object rather than just modifying the behavior of good old NULL.




回答2:


Objective-C is a very verbose language, all methods are very descriptive, and using YES/NO for boolean values instead of true/false makes it more human readable.

You would probably find the following conversation strange, if it happened in real life: A: "Did you see the movie?" B: "True"

If B had answered "yes" (or "no"), it would sound perfectly normal, and code looks more like plain english by using YES/NO instead of true/false.




回答3:


Apple have always tried to make things easier to use. If you read some system boolean methods and ask yourself what makes more sense to answer a boolean question with, either using YES|NO or TRUE|FALSE, you'll see thank the answer is YES|NO in my opinion.

Otherwise you can always use TRUE|FALSE in your code.




回答4:


It is strange, but I find code is more readable using the YES/NO macros rather than TRUE/FALSE (which also work).

However, Objective-C is a superset of C99 now, so you should be using the C99 boolean type and true and false wherever possible. I was toying with the idea of defining yes and no to true and false but have resisted it so far.




回答5:


The best way to think of this is that it's parallel evolution.

Objective-C's BOOL and YES/NO dates all the way back to early 1980s, and was likely intended to not only mimic other languages but miss C's future development. _Bool, true/false in C were only made part of the standard in 1999.

So are YES and NO historical? Yes. Are they only historical? No. Just as NULL is not the result of 3-3 in a pure sense (despite NULL often being defined as 0, or casually usable if it were), true is not a value for BOOL.

You would not (I think) write this code:

int matches = NULL;
for (int i = 0; i<count; ++i) {
    if (array[i] == value) ++matches;
}

This is less obviously wrong, but it's on the same spectrum:

BOOL foundMatch = false;
for (int i = 0; i<count; ++i) {
    if (array[i] == value) {
        foundMatch = YES;
        break;
    }
}


来源:https://stackoverflow.com/questions/6420987/why-does-objective-c-use-yes-no-macro-convention-instead-of-true-false

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!