Есть такая плюшка в аде (в выражениях). Еще была тема на oberoncore (искать лень), где Илья Ермаков возжелал такой механизьм для последовательности действий.
В обсчем я тут покодил на Go, прочуйствовал обработку ошибок, и задался вопросом:
А что мешает добавить ANDIF по аналогии с ELSIF?
IF cond1 THEN
ANDIF cond2 THEN
ANDIF cond3 THEN
ELSIF cond4 THEN
ANDIF cond5 THEN
ELSE
END;
ветка ANDIF выполняется тогда и только тогда, когда истинно условие предыдущей ветки (IF, ANDIF или ELSIF)
Структурно это замена вложенного IF:
IF cond1 THEN
IF cond2 THEN (* это ANDIF *)
IF cond3 THEN (* еще ANDIF *)
END;
END;
ELSE
IF cond4 THEN (* это ELSIF *)
IF cond6 THEN (* следующий ANDIF *)
END;
ELSE
IF cond5 THEN (* еще ELSIF *)
END;
END;
END;
Этот код транслируется в:
IF cond1 THEN
ANDIF cond2 THEN
ANDIF cond3 THEN
ELSEIF cond4 THEN
ANDIF cond6 THEN
ELSIF cond5 THEN
END;
Мне кажется, что это совершенно естественный сахарок как и ELSIF. Какие тут могут быть проблемы? (Укажите если кто видит)
С другой стороны можно сделать более явную конструкцию:
CHAIN cond1 :
| cond2 :
| cond3 :
END;
Смысл в том, что цепочка прерывается, как только не выполнится очередное условие.