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


         

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


Пожалуйста, возьмите такой пример:

: ОБРАБОТАТЬ-КЛАВИШУ KEY DUP СТРЕЛКА-ВЛЕВО = IF КУРСОР-ВЛЕВО THEN DUP СТРЕЛКА-ВПРАВО = IF КУРСОР-ВПРАВО THEN DUP СТРЕЛКА-ВВЕРХ = IF КУРСОР-ВВЕРХ THEN СТРЕЛКА-ВНИЗ = IF КУРСОР-ВНИЗ THEN ;

Эта версия неэффективна, поскольку все проверки должны делаться независимо от исхода любой из них. Если была бы нажата, скажем, клавиша-влево, то не было бы необходимости в проверке ее на другие совпадения. Вместо этого можно было бы сделать вложенные проверки, типа: - 246 -

: ОБРАБОТАТЬ-КЛАВИШУ KEY DUP СТРЕЛКА-ВЛЕВО = IF КУРСОР-ВЛЕВО ELSE DUP СТРЕЛКА-ВПРАВО = IF КУРСОР-ВПРАВО ELSE DUP СТРЕЛКА-ВВЕРХ = IF КУРСОР-ВВЕРХ ELSE КУРСОР-ВНИЗ THEN THEN THEN DROP ;

------------------------------------------------------------ СОВЕТ Компануйте вместе булевские значения одинакового веса. ------------------------------------------------------------

Многие структуры IF THEN двойной вложенности могут быть упрощены с помощью комбинаций флагов и логических операторов перед принятием решения. Вот тестирование с двойной вложенностью:

: ?ГУЛЯТЬ СУББОТА? IF ДЕЛО СДЕЛАНО? IF СМЕЛО ПОЙТИ ГУЛЯТЬ THEN THEN ;

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

: ?ГУЛЯТЬ СУББОТА? ДЕЛО СДЕЛАНО? AND IF СМЕЛО ПОЙТИ ГУЛЯТЬ THEN ;

Это проще и лучше читается. При ситуации логического "или" реализация через IF THENы еще ухабистей:

: ?ВСТАВАТЬ ТЕЛЕФОН ЗВОНИТ? IF ВСТАТЬ THEN БУДИЛЬНИК ЗВОНИТ? IF ВСТАТЬ THEN ;

Это куда более элегантно записывается в виде

: ?ВСТАВАТЬ ТЕЛЕФОН ЗВОНИТ? БУДИЛЬНИК ЗВОНИТ? OR IF ВСТАТЬ THEN ;

Из этого правила имеется одно исключение - а именно тогда, когда слишком велик проигрыш в скорости при выполнении проверок. Мы могли бы написать:

: ?ПОХЛЕБКА СТРУЧКИ-БОБОВ? ПОХЛЕБКА РЕЦЕПТ? AND IF ПОХЛЕБКА ПРИГОТОВИТЬ THEN ; - 247 -

Однако предположим, что у нас может занять много времени нашаривание в нашем рецептурном файле чего-нибудь насчет похлебок.


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