Страницы

Пустили EXIT в Oberon

Многие из немногих, программирующих на диалектах языка Oberon, полагают, что циклы FOR, WHILE и REPEAT не содержат иного способа досрочно прервать их выполнение кроме как через выход из процедуры с помощью неструктурного RETURN, и только специальный цикл LOOP по EXIT позволяет неструктурно покинуть его, не покидая саму процедуру.

Как же легко людей обмануть. В Oberon, Oberon-2, Component Pascal, Active Oberon всегда можно было написать, например, так:

FOR i := 0 TO LEN(a) - 1 DO
  IF a[i] = b THEN
    EXIT
  END
END;

Не только перечисленные циклы, но и обычное ветвление допускает неструктурные прыжки вперёд. А вся загвоздка в том, что если EXIT есть в LOOP, значит, он есть везде. И полный пример для FOR выглядит так:

LOOP FOR i := 0 TO LEN(a) - 1 DO
  IF a[i] = b THEN
    EXIT
  END
END; EXIT END

Естественно, это антипаттерн. Но только начиная с Oberon-07 так просто уже не поскачешь. Революционный язык!

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

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