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




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


Можно было бы написать это слово с использованием вложенных операторов IF ELSE THEN, типа:

: .МАСТЬ ( масть -- ) DUP 0= IF ." ЧЕРВИ " ELSE DUP 1 = IF ." ПИКИ " ELSE DUP 2 = IF ." КРЕСТИ " ELSE ." БУБИ " ELSE THEN THEN THEN DROP ;

Мы можем решить эту задачу элегантнее при использовании "оператора CASE". Вот то же самое определение, переписанное с использованием формата "Экеровсокого оператора CASE", названного так по имени Др. Чарльза Э. Экера, джентльмена, его предложившего [1].

: .МАСТЬ ( масть -- ) CASE 0 OF ." ЧЕРВИ " ENDOF 1 OF ." ПИКИ " ENDOF 2 OF ." КРЕСТИ " ENDOF 3 OF ." БУБИ " ENDOF ENDCASE ;

Достоинство оператора CASE состоит исключительно в удобстве его чтения и написания. Он не дает улучшения эффективности ни по занимаемой памяти, ни по скорости исполнения. На самом деле такой оператор компилирует во многом тот же код, что и вложенные операторы IF THEN. Оператор CASE - хороший пример факторизации во время компиляции. Должна ли всякая Форт-система включать в себя этот оператор? Это - палка о двух концах. Во-первых, случаи, когда - 249 -

такая конструкция действительно нужна, редки - достаточно редки, чтобы поставить под вопрос ее ценность. Если встречаются всего несколько таких случаев, конструкция IF ELSE THEN тоже будет неплохо работать, хотя и, быть может, при худшей читабельности. Если таких случаев много, более гибкой является таблица решений. Во-вторых, многие задачи подобного типа не совсем подходят для структуры CASE. Экеровский оператор предполагает, что Вы проверяете на равенство число на стеке. В примере со словом .МАСТЬ у нач имеется непрерывный ряд чисел от 0 до 3. Эффективней было бы использовать целое для вычисления смещения и непосредственного перехода на нужный код. В случае Крошечного Редактора (позже в этой главе) у нас имеются не одно, а два измерения возможностей. Оператор CASE для такой проблемы тоже не подходит. Лично я считаю оператор CASE элегантным решением для неправильно поставленной задачи: попыткой алгоритмического выражения того, что более точно описывается таблицей решений.


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