Лучший способ думать об этом - это параллельная эволюция.
Objective-C BOOL
и YES
/ NO
восходит к началу 1980-х годов и, вероятно, был предназначен дляне только подражать другим языкам, но и пропустить будущее развитие C._Bool
, true
/ false
в C были сделаны только частью стандарта в 1999 году.
Так что YES
и NO
являются историческими?Да.Они только исторические?Нет. Точно так же, как NULL
не является результатом 3-3 в чистом смысле (несмотря на то, что NULL
часто определяется как 0
или может использоваться случайно, если бы он был), true
не является значением для BOOL
.
Вы не написали бы (я думаю) этот код:
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;
}
}