7. Условные вычисления
Никогда не используйте константы true и false в арифметических операциях вместо 1 и О! Это не наглядно, а в ряде ситуаций может привести к трудно обнаруживаемой ошибке.
Как вы видели, выражения наподобие х*3 < у+50 > z/3 потенциально таят в себе ошибку, да и компилятор выдаст предупреждение Sugest parentheses to clarify precedence (Рекомендуется использовать круглые скобки, чтобы уточнить порядок вычислений). Правильно записать нужное программисту условие можно, например, так:
(х*3 < у+50) && (у+50 > z/3)
Сложные логические выражения и побочные эффекты
Помимо проверки корректности введенного значения RateValue надо также проверить значения DollarsNum и RoublesNum — не отрицательные ли они. Это можно "сделать так:
RateValue > 0 && RateValue <= 100 && RoulesNum >= 0 && RoublesNum < 100000
Если значение RateValue равно 30, а значение RoublesNum равно -100, то указанное выражение превратится в следующее:
30 > 0 && 30 <= 100 && -100 >= 0 && -100 < 100000 или
true && true && false && true
которое, будучи вычисляемым слева направо, будет последовательно превращаться в
(true && true) && false && true (true && false) && true false && true и в итоге получится false.
Операции && и II имеют интересную особенность — в некоторый момент вычисления длинного логического выражения часто можно сразу сказать, каким будет результат, не доводя вычисления до логического конца. Как только в рассмотренном выше примере результатом очередной логической операции стало значение false, остальные операции уже роли не играют, поскольку false && false дает false и false && true дает false!
114