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




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


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

Программисты иногда используют EXIT также для того, чтобы изящным образом выбираться из сложных циклов, использующих BEGIN. Или можно было бы использовать родственный метод для цикла DO LOOP, который мы использовали в слове 'ФУНКЦИИ в нашем Крошечном Редакторе раньше в этой главе. В этом слове мы просматриваем последовательность ячеек в поисках совпадения. Если мы таковое находим, то хотим вернуть адрес совпадения; если же не находим, то желаем иметь адрес последней строки в таблице функций. Можно предложить слово LEAP (см. приложение В), которое будет работать как EXIT (будет имитировать ;). Теперь можно написать:

: 'ФУНКЦИИ ( клавиша -- адр-совпадения ) 'НЕ ФУНКЦИИ DO DUP I @ = IF DROP I LEAP THEN /КЛ +LOOP DROP 'НЕ ; - 269 -

Если совпадение находится, мы делаем LEAP, но не через +LOOP, а прямо из определения, оставляя I (адрес, по которому произошло совпадение) на стеке. Если оно не находится, мы проходим через ограничитель цикла и выполняем

DROP 'НЕ

что сбрасывает номер клавиши, которую искали, а затем оставляет адрес последней строки! Как мы увидели, встречаются случаи, когда преждевременный выход хорошо подходит, и хороши даже многочисленные точки выхода и продолжения. Следует, однако, помнить, что использование EXIT и R> DROP в строгом смысле `не есть следование` принципам структурированного программирования и требует огромной осторожности. К примеру, у Вас на стеке может быть число, которое в конце определения поглощается. Ранний EXIT оставит нежелательное число на стеке. Забавы со стеком возвратов сродни играм с огнем. Можно обжечься. Но зато иметь огонь так здорово!

СКОРОСТНАЯ РАБОТА.

------------------------------------------------------------ СОВЕТ Выполняйте действие сразу, как только узнаете, что его выполнить необходимо, но не позже. ------------------------------------------------------------

Всякий раз, когда Вы устанавливаете флаг, спросите себя, зачем. Если ответ состоит в том, "чтобы знать, что мне надо сделать то-и-другое попозже", то задумайтесь, нельзя ли сделать то-и-другое `теперь`.


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