Директива $BoolEval компилятора Delphi сокращаются ли вычисления при операциях or или and.
- {$BoolEval Off}
- {$BoolEval On}
Директива компилятора $BoolEval говорит Delphi, продолжить ли вычисление многоаргументного булева выражения или нет, когда результат заранее известен.
- {$BoolEval Off} (значение по умолчанию) означает не продолжать.
- {$BoolEval On} означает продолжать проверку.
Например, по умолчанию, с выражением:
expr1 and expr2
expr2 не будет вычисляться, если expr1 является ложным. С {$BoolEval On}, проверка продолжилась бы.
Пример иллюстрирует нормальное использование значения по умолчанию.
Примечания.
$BoolEval эквивалентна $B.
Эта директива может использоваться в пределах вашего кода множество раз.
$BoolEval Off является значением по умолчанию
Директива компилятора $BoolEval: Проверка содержания строки
var
FullString, EmptyString : string;
begin
FullString := 'Fred';
EmptyString := '';
// Выключение полной проверки
{$BoolEval Off}
// Проверка 4-го символа каждой строки
if (Length(FullString) >= 4) and (FullString[4] = 'd')
then ShowMessage('4-ый символ FullString - d')
else ShowMessage('4-ый символ FullString НЕ d');
if (Length(EmptyString) >= 4) and (EmptyString[4] = 'd')
then ShowMessage('4-ый символ EmptyString - d')
else ShowMessage('4-ый символ EmptyString НЕ d');
// Включение полной проверки
{$BoolEval On}
// Проверка 4-го символа каждой строки
if (Length(FullString) >= 4) and (FullString[4] = 'd')
then ShowMessage('4-ый символ FullString - d')
else ShowMessage('4-ый символ FullString НЕ d');
// Теперь мы должны защитить код от ошибок
try
if (Length(EmptyString) >= 4) and (EmptyString[4] = 'd')
then ShowMessage('4-ый символ EmptyString - d')
else ShowMessage('4-ый символ EmptyString НЕ d');
except
on E : EAccessViolation do
ShowMessage(E.Message);
end;
end;
Результат
Следующее типично для вывода вышеупомянутого кода:
4-ый символ FullString - d
4-ый символ EmptyString НЕ d
4-ый символ FullString - d
Access violation at address 00442196 in module 'PROJECT1.EXE'.
Read of address FFFFFFFF
Похожие функции, процедуры и команды
$B — сокращаются ли вычисления при операциях or или and.
And — булев and или поразрядный and двух аргументов.
If — начинает условное выражение, чтобы решить, что делать далее.
Or — булевская or или поразрядная or двух аргументов.
