Лекции по информатике - Способы вычисления логических операций

Вычислять логические выражений можно по сокращенной или полной схеме. В полной схеме все логические выражения вычисляются в программе полностью, а при сокращенной вычисление прекращаются в тот момент, когда становиться ясен окончательный результат. Поясним, в чем между ними разница. Допустим имеется такой фрагмент программы:

...
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. Отсюда следует следующий вывод:

  1. запретить функции с побочным эффектом
  2. выполнять всегда только полное вычисление логических выражений

Слава: я не согласен со вторым пунктом, т.к. при не полном вычислении логических выражений увеличивается производительность. А использование функций с побочным эффектом в лог. выражениях - дурной тон.

Побочный эффект - это изменение глобальных данных или параметров при вызове или не вызове функций. Функция в нашем примере имела побочный эффект - она изменяла значение параметра x. Правда следует оговориться, что в некоторых редких случаях без использования функций с побочными эффектами просто не обойтись.

Слава Антонов © 2002 — August 13, 2008
Индекс цитирования 197-577-902 ICQ-статус
Hosted by uCoz