if, then, elif, else, end_if, _if

Оператор "if" (условный переход в программе)

Блокноты MuPAD® будут демонтированы в будущем релизе. Используйте live скрипты MATLAB® вместо этого.

Live скрипты MATLAB поддерживают большую часть функциональности MuPAD, хотя существуют некоторые различия. Для получения дополнительной информации смотрите, Преобразовывают Notebook MuPAD в Live скрипты MATLAB.

Для оператора if в MATLAB® смотрите if.

Синтаксис

if condition1
then casetrue1
   elif condition2 then casetrue2
   elif condition3 then casetrue3
   ...
   else casefalse
 end_if

_if(condition1, casetrue1, casefalse)

Описание

if-then-else-end_if позволяет условное выражение, переходящее в программе.

Если Булево выражение, condition1 может быть оценен к TRUE, ответвление casetrue1, выполняется, и его результат возвращен. В противном случае, если condition2 оценивает к TRUE, ответвление, casetrue2 выполняется, и его результат возвращен и т.д. Если все условия оценивают к FALSE, ответвление, casefalse выполняется, и его результат возвращен.

Все условия, которые оценены во время выполнения оператора if, должны быть приводимы или к TRUE или к FALSE. Условия могут быть даны уравнениями или неравенствами, объединенными с логическими операторами and, or, not. Нет никакой потребности осуществить булеву оценку уравнений и неравенств через bool. Неявно, оператор if осуществляет “ленивую” булеву оценку через функции _lazy_and или _lazy_or, соответственно. Условие приводит к ошибке периода выполнения, если оно не может быть оценено к TRUE или FALSE этими функциями. Cf. Пример 3.

Ключевое слово end_if может быть заменено ключевым словом end.

Оператор if condition then casetrue else casefalse end_if эквивалентен вызову функции _if(condition, casetrue, casefalse).

Примеры

Пример 1

Оператор if действует, как продемонстрировано ниже:

if TRUE then YES else NO end_if,
if FALSE then YES else NO end_if

Ответвление else является дополнительным:

if FALSE then YES end_if
if FALSE
  then if TRUE 
         then NO_YES
         else NO_NO
       end_if
  else if FALSE
         then YES_NO
         else YES_YES
       end_if
end_if

Как правило, булевы условия даны уравнениями, неравенствами или булевыми константами, произведенными системными функциями, такими как isprime:

for i from 100 to 600 do
  if 105 < i and i^2 <= 17000 and isprime(i) then 
     print(expr2text(i)." is a prime")
  end_if;
  if i < 128 then
     if isprime(2^i - 1) then
        print("2^".expr2text(i)." - 1 is a prime")
     end_if
  end_if
end_for:

Пример 2

Вместо того, чтобы использовать вложенные операторы if-then-else, оператор elif может сделать исходный код более читаемым. Однако внутренне синтаксический анализатор преобразовывает такие операторы в эквивалентные операторы if-then-else:

hold(if FALSE then NO elif TRUE then YES_YES else YES_NO end_if)
if FALSE then
  NO
else
  if TRUE then
    YES_YES
  else
    YES_NO
  end_if
end_if

Пример 3

Если условие не может быть оценено или к TRUE или к FALSE, то ошибка периода выполнения повышена. В следующем вызове is(x > 0) производит UNKNOWN, если никакие соответствующие свойства не были присоединены к x через assume:

if is(x > 0) then
  1
else
  2
end_if
Error: Unable to evaluate to Boolean. [if]

Обратите внимание на то, что булевы условия с помощью <, <=, >, >= может перестать работать, если они включают символьные выражения:

if 1 < sqrt(2) then print("1 < sqrt(2)"); end_if

if 10812186006/7645370045 < sqrt(2)
  then print("10812186006/7645370045 < sqrt(2)");
end_if

if is(10812186006/7645370045 < sqrt(2)) = TRUE
  then print("10812186006/7645370045 < sqrt(2)");
end_if

Пример 4

Этот пример демонстрирует соответствие между функциональным и обязательным использованием оператора if:

condition := 1 > 0: _if(condition, casetrue, casefalse)

condition := 1 > 2: _if(condition, casetrue, casefalse)

delete condition:

Параметры

condition1, condition2, …

Булевы выражения

casetrue1, casetrue2, casefalse, …

Произвольные последовательности операторов

Возвращаемые значения

Результат последней команды выполняется в операторе if. Пустая последовательность, null() возвращен, если никакая команда не выполнялась.

Смотрите также

Функции MuPAD