7. Условные вычисления

h01141.jpg

Никогда не используйте константы 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