Меня интересует ответ: с какими проблемами сталкиваются люди без этого оператора.
Супер-многословные глубоко вложенные if()
условия, особенно условия цикла.
while (a && b) {
a = something;
b = something_else;
}
написано без логических операторов становится:
while (a) {
if (!b) break; // or if(b){} else break; if you want to avoid logical ! as well
a = something;
b = something_else;
}
Если вы не хотите цикл, вы хотите написать это?
if (c >= 'a') {
if (c <= 'z') {
stuff;
}
}
Нет, изКонечно, нет, потому что это ужасно по сравнению с if (c >= 'a' && c <= 'z')
, особенно если есть else
, или это внутри другого вложения.Особенно, если ваши правила стиля кодирования требуют отступа в 8 пробелов для каждого уровня вложенности или {
на отдельной строке, чтобы каждый уровень вложенности занимал еще больше места по вертикали.
Обратите внимание, что a&b
равно , а не эквивалентно a&&b
: даже за исключением оценки короткого замыкания .(Где b
даже не оценивается, если a
- ложь.) Например, 2 & 1
- ложь, потому что в их целочисленных битовых комбинациях не установлены одинаковые биты.
Короткое замыканиеОценка позволяет условиям цикла, таким как while(p && p->data != 0)
, проверять наличие указателя NULL, а затем условно делать что-то только с ненулевым значением.
Компактные выражения имели большое значение, когда компьютеры программировались по медленным последовательным линиям с использованием бумажных телетайпов.
Также обратите внимание, что это чисто высокий уровень проектирования языка.Аппаратное обеспечение процессора не имеет ничего общего с логическими операторами;обычно требуется несколько инструкций для реализации !
для целого числа (в целое число 0/1, а не при использовании в качестве условия if).
if (a && b)
обычно компилируется в две инструкции теста / ветвления встроки. * * 1 044