Условие break для операторов OR и AND в выражении IF
Оператор If и любое другое логическое сравнение достаточно умно, чтобы останавливаться на первом значении FALSE при оценке A and B and C and D
и сначала значение TRUE при оценке A or B or C or D
,
Как называется это поведение?
Это оптимизация компилятора? Если так, есть ли способ отключить его с помощью какой-либо директивы компилятора?
1 ответ
Решение
Это называется "логической оценкой короткого замыкания", формой "ленивой оценки".
Вы можете указать компилятору использовать или не использовать эту функцию, используя директивы компилятора:
Complete evaluation Lazy evaluation
{$B+} {$B-}
{$BOOLEVAL ON} {$BOOLEVAL OFF}
Но обратите внимание, что это не только оптимизация, так как эта функция позволяет вам писать код как
if (length(myarr) > 0) and (myarr[0] = MY_VAL) then
который будет работать, даже если myarr[0]
не существует Это довольно часто, на самом деле.