Домой | Софт | Мастерская | Лирика | ЧаВО | Юмор |
Вычислять логические выражений можно по сокращенной или полной схеме. В полной схеме все логические выражения вычисляются в программе полностью, а при сокращенной вычисление прекращаются в тот момент, когда становиться ясен окончательный результат. Поясним, в чем между ними разница. Допустим имеется такой фрагмент программы:
... function MyFunc(var x: integer): boolean; begin x:= x + 1; if x > 10 then MyFunc:= True else MyFunc:= False; end; ... x:= 0; if False and MyFunc(x) then x:= 10;
После его компиляции с сокращенной схемой вычисления логических выражений исполнение этого фрагмента даст X=0, так как не произойдет обращения к функции MyFunc: выражение False and MyFunc всегда имеет значение False вне зависимости от того, что является вторым операндом операции and. Если же вычислять значение выражения по полной схеме, где вычисление логического выражения производиться до конца, то произойдет вызов функции MyFunc и переменная X получит значение 1. Разумеется, и в том и другом случае не будет выполняться оператор x:= 10. Отсюда следует следующий вывод:
Слава: я не согласен со вторым пунктом, т.к. при не полном вычислении логических выражений увеличивается производительность. А использование функций с побочным эффектом в лог. выражениях - дурной тон.
Побочный эффект - это изменение глобальных данных или параметров при вызове или не вызове функций. Функция в нашем примере имела побочный эффект - она изменяла значение параметра x. Правда следует оговориться, что в некоторых редких случаях без использования функций с побочными эффектами просто не обойтись.
Слава Антонов © 2002 — August 13, 2008 |
|