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



         

Глава 6. Фрагментация - часть 14


Может показаться парадоксальным, но хорошее расчленение может привести к образованию `меньшего количества` имен. В главе 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 и соответственно устанавливает текстовый режим.


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