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


         

Может показаться парадоксальным, но хорошее


Может показаться парадоксальным, но хорошее расчленение может привести к образованию `меньшего количества` имен. В главе 5 мы видели, как шесть простых имен (ЛЕВЫЙ, ПРАВЫЙ, МОТОР, МАГНИТ, ПУСК, СТОП) выполняли работу восьми плохо отфакторизованных, многочленных имен.
Вот другой пример: на одном предприятии, в котором недавно был внедрен Форт, я обнаружил в ходу два определения. Их назначение было чисто вспомогательным, просто для напоминания программисту, какой словарь - CURRENT, а какой - CONTEXT:
: .CONTEXT CONTEXT @ 8 - NFA ID. ; : .CURRENT CURRENT @ 8 - NFA ID. ;
Если Вы набирали
.CONTEXT
то система отвечала
.CONTEXT FORTH ~~~~~~
(Они работали, - во всяком случае, на использовавшейся здесь системе - возвращаясь назад к полю имени определения словаря и распечатывая его.)
Очевидное повторение кода бросилось мне в глаза в качестве признака плохой факторизации. Можно было бы выделить повторяющийся участок в третье определение:
: .СЛОВАРЬ ( указатель) @ 8 - NFA ID. ;
укорачивая при этом первоначальные определения до
: .CONTEXT CONTEXT .СЛОВАРЬ ; : .CURRENT CURRENT .СЛОВАРЬ ;
Но при таком подходе единственной разницей между определениями был бы используемый указатель. Поскольку частью хорошей факторизации является уменьшение, а вовсе не увеличение количества определений, казалось логичным иметь всего одно такое определение и позволить ему получать в качестве аргумента либо слово CONTEXT, либо CURRENT.
Применяя принципы выбора подобающих имен, я предложил:
: ЕСТЬ ( адр) @ 8 - NFA ID. ;
для синтаксиса
CONTEXT ЕСТЬ ASSEMBLER ~~~~~~~~~~
или
CURRENT ЕСТЬ FORTH ~~~~~~
Начальная предпосылка этому была в повторении кода, но конечный результат родился в результате попытки упрощения командного интерфейса.
Вот другой пример. В IBM PC имеется четыре чисто текстовых режима отображения:
40 символов монохромно 40 символов в цвете 80 символов монохромно 80 символов в цвете
В моей рабочей Форт-системе имеется слово MODE. Оно берет аргумент в пределах от 0 до 3 и соответственно устанавливает текстовый режим.

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