Способ мышления-Форт




Глава 8. Минимизация структур управления - часть 26


Эта технология не должна путаться с использованием GOTO, которое неструктурировано донельзя. При помощи GOTO можно перейти куда угодно, внутрь или наружу текущего модуля. При нашем же методе Вы эффективно перепрыгиваете прямо на точку выхода из модуля (определения через двоеточие) и продолжаете исполнение вызывающего слова. Слово EXIT заканчивает определение, в котором он появляется. Фраза R> DROP завершает определение, которое `вызвало` то определение, в котором эта фраза звучит; таким образом, оно производит тот же эффект, только может использоваться на один уровень ниже. Вот несколько примеров для обоих подходов. Если у Вас имеется фраза с IF ELSE THEN, в которой после THEN больше ничего нет, типа:

... ГОЛОДЕН? IF С'ЕСТЬ ELSE ЗАКОПАТЬ THEN ;

то можно удалить ELSE, используя EXIT:

... ГОЛОДЕН? IF С'ЕСТЬ EXIT THEN ЗАКОПАТЬ ; - 268 -

(если условие истинно, мы едим и продолжаем; слово EXIT работает наподобие ;. Если условие ложно, мы перепрыгиваем на THEN и ЗАКОПАТЬ.) Использование EXIT здесь более эффективно, оно экономит два байта и необходимость исполнения дополнительного кода, но оно же и ухудшает читабельность.

----------------------------------------------------------------

Мур комментирует ценности и опасности этой технологии:

Когда работаешь с условными операторами, бывает особенно удобным выскакивать из середины без переходов на все эти THENы в конце. В одной задаче у меня было слово, выглядевшее так:

: ПРОВЕРКА ПРОСТОЙ 1УСЛОВИЕ IF ... EXIT THEN 2УСЛОВИЕ IF ... EXIT THEN 3УСЛОВИЕ IF ... EXIT THEN ; ПРОСТОЙ использовался для простых случаев, он заканчивался на R> DROP. Остальные условия были более сложными. Все выходят на ту же точку без необходимости болезненного прохождения через все IFы, ELSEы и THENы. В конечном результате, если ни одно из условий не выполнялось, стоял выход на ошибку. Это был плохой код, трудный в отладке. Однако он отобразил природу проблемы. Не было никакой лучшей схемы для его реализации. EXIT и R> DROP, по крайней мере, позволяли сохранить контроль над обстановкой.




Содержание  Назад  Вперед