Многие из немногих, программирующих на диалектах языка 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 так просто уже не поскачешь. Революционный язык!
Комментариев нет:
Отправить комментарий