ярлык нескольких условий с и в 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), то

Другие вопросы по тегам