Помимо показателей производительности, я считаю булевы и целые числа двумя принципиально разными понятиями в программировании. Boolean представляет условие, целое число представляет число. Ошибки легко вводить, если вы не сохраняете строго значение вашего целочисленного логического 0 или не 0, и зачем беспокоиться даже об этом, когда вы можете просто использовать логические значения, которые позволяют выполнять проверку безопасности / проверки типов во время компиляции? Я имею в виду, возьми метод:
doSomething(int param)
Один только метод не подразумевает / не подразумевает, что параметр интерпретируется как логическое значение. Никто не помешает мне передать ему 1337, и никто не скажет мне, что произойдет, если я это сделаю - и даже если четко задокументировано, что метод 1337 не передается методу (но только 0 или 1), я все еще могу Это. Если вы можете предотвратить ошибки во время компиляции, вы должны.
doSomething (параметр bool)
допускает только два значения: true и false, и ни одно из них не является неправильным.
Кроме того, ваши примеры того, почему целые числа были бы лучше, чем логические значения, немного ошибочны.
if x is True: x = False
else: x = True
можно записать как
x != x
тогда как ваша целочисленная альтернатива:
x = abs(x-1)
потребовал бы, чтобы я знал:
- Какие возможные значения x могут иметь
- что делает функция abs ()
- почему 1 вычитается из x
- что это на самом деле / делает /. Что это делает?
Ваш второй пример также очень важен для меня.
if x is False: a = 0
else: a = 5
можно записать как:
а = (х)? 5: 0;
тогда как ваша целочисленная альтернатива
a = 5*x
снова требует, чтобы я знал:
- Что такое Х?
- Что может быть Х?
- Что будет, если х = 10? -1? 2147483647
Слишком много условностей. Используйте логические значения для удобочитаемости, здравого смысла и предсказуемого кода без ошибок.