среда, 10 августа 2022 г.

MUMPS: if + else

В языке MUMPS команды if и else выполняются немного не так как в других языках, хотя и записываются теми же словами.

Команда if без аргументов проверяет значение переменной $test, как если бы вместо
if  command
выполнялось
if $test command
А команда else наоборот, проверяет инверсию переменной $test. Но не меняет значение $test. И все что после нее выполняется если $test=0.

Соответственно, такие строки приводят к никогда не выполняющимся командам:
if  else  command1
else  if   command2
В отличие от многих других языков команды if и else не связаны друг с другом синтаксически и могут быть записаны как в порядке if + else:
if expr command1
else  command2
так и в порядке else + if:
else  command1
if expr command2
И еще одно неожиданное отличие этих команд от других языков - обе альтернативы могут быть выполнены, если вторая команда будет выполняться при подходящем состоянии переменной $test, например как в этом коде:
 i 1 w "if",! i 0
 e  w "else",!
Для страхования от выполнения команды else после выполнения альтернативы соответствующей if нужно ставить в конце первой последовательности команд
i 1
Это взведет переменную $test в состояние 1 и альтернатива else не будет выполняться. А переменная $test да, может быть изменена, например командами с таймаутом. Или другой (вложенной) командой if.

Комментариев нет:

Отправить комментарий