ярлык нескольких условий с и в AL и Business Central?
Предположим, у нас есть процедура
is_even
вернуть, если указанное число четное или нет!
это хороший код:
if is_even(22) = true or test(1) = true or test(2) = true then
//...
И даже лучше:
if true in [ is_even(22), is_even(1), is_even(2) ] then
//..
А что, если бы я сделал это, но с логикой(
and
нет
or
) как это
if is_even(22) = true and test(1) = true and test(2) = true then
//...
Лучше код будет?
Я пытался это сделать, поэтому я думаю сделать это с помощью функции, как в
python all
:
local procedure all(array_bools : ARRAY [3] OF Boolean): Boolean
var
bool: Boolean;
i: Integer;
begin
REPEAT
bool := array_bools[i];
if bool = false then
exit(false);
i := i + 1;
UNTIL i <> ARRAYLEN(array_bools);
exit(false);
end;
и это не работает, как я ожидаю
if all([is_even(22), is_even(1), is_even(2)]) = true then
2 ответа
Мне нравится, чтобы это было просто и читабельно. Я думаю, что ваш код трудно читать, потому что вы объединяете все эти проверки в одну. Вместо этого я бы написал что-то вроде этого:
local procedure CheckMyConditions(): Boolean
begin
if is_even(22) then
exit(true);
if test(1) then
exit(true);
if test(2) then
exit(true);
exit(false);
end;
Кроме того, это будет работать лучше, потому что AL не поддерживает ленивые вычисления. Это означает, что каждое утверждение между «если» и «тогда» будет оцениваться.
Лучшее для этого cae ist здесь: если is_even(22) или test(1) или test(2), то