Подобную "защиту" можно внедрить и в рядовую императивщину, а в случае наличия такого оператора как WITH в Modula (определяющий алиасы) -- в т.ч. и с "ленивыми вычисленими" в явном виде (когда это удобно). Если фантазировать, в гипотетической Modula для всего блока BEGIN...END (вместо отдельного оператора) можно ввести "защитные выражения" на конъюнктах (аля "pattern matching" верхнего уровня). Плюс оператор WITH сразу "привязывается" к блоку BEGIN...END (как VAR), алиас может быть ассоциирован с произвольным выражением.
Фантазия может быть примерно в таком виде -- псевдокод для задачи выше про обработчик события в TreeView:
## Код:
```
PROCEDURE Tree_itemClick(machine, item, event)
BEGIN
  IF event.button = 0 THEN
    VAR
      now := getUnixTime();
    WITH
      lastClick := item.lastClick;
      threshold := now - item.lastClick > DoubleClickThreshold;
      expanding := machine.state = "expanding";
    BEGIN
    | lastClick & threshold:
        item.lastClick = now;
        IF event.ctrlKey THEN
          Tree_ctrlClick(machine, item)
        ELSE
          IF item.leaf THEN
            Tree_singleClick(machine, item, event)
          ELSE
            Tree_clearSelection(machine);
            Tree_selectItem(machine, item);
            Tree_toggleExpand(machine, item, event);
          END   
        END 
    | lastClick & expanding:
        machine.postponedDClick = item.id
    | lastClick:
        Tree_doubleClick(machine, item, event)
    ELSE
      (* skip *)
    END
  END
END
```

Если блок BEGIN начинается с "|" -- весь блок "нарезается" на варианты конъюнктов условий (с возможностью ELSE). Необязательный оператор WITH вводит имена-алиасы для компактизации записи, в отличие от VAR -- выражения "ленивые" и вычисляются по требованию (в контексте тестирования событий, т.е. не предполагается какой-то механизм в стиле thunk-ов в "ленивых" функциональных языках). В целом в образцах событий возможны любые выражения (не только алиасы), в случае применения процедур возникают нюансы с поддержкой свойства "быть предикатом или чистым" -- отсутствие побочных эффектов (гипотетически решаемо).

Такая линеаризованная расшифровка условий помогает прочитать и Дракон-схему выше. Вариант на Р-схеме будет таким:


Выше используется двойная дуга-блок с разрывом. Ранее здесь на форуме при разборе полётов вокруг Р-схем не было акцента на таком типе дуг. Так раньше задавался "pattern matching", аля "CASE OF" (а если нет надписи на дуге -- будет WITH, с подписями под дугой):


В целом, таковы защиты "вычислительно мощнее" оператора GUARD ранее. Если вдруг иметь "наколенную Nemerle" с возможностью создания "Modula для себя", то, пожалуй, предпочтительнее конъюнкты...