Советы М.Максимова.
Очередная порция комментариев от Михаила Максимова. Большое спасибо.
По поводу именования. В настоящее время не сильно понимаю аргументиацию использования больших латинских букв для именовпания операторов. Если придерживаться аргумента приемственности, то tr в нижнем регистре, как раз больше соответсвует этому аргументу – я его взял с Перла, а Перл, в свою очередь, перенял его у awk. Если придерживаться аргумента единообразия и стройности построения слов в словарях – мне здесь пока трудно что-либо сказать. Своих, достаточно устойчивых, правил я еще не выработал, а другие мне неизвестны. Догадываться о чужих, анализируя листинги программ – время, которого у меня не так много :(. Других источники по этому вопросу мне не известны. Если же, склоняться к аргументу удобочитаемсоти текста, то нужно определиться сначала с целевой аудиторией, кому предназначается текст, а заетам записать смысл этого слова в терминах предметной области задачи. Примерно этого подхода я и придерживаюсь. Я нацеливаюсь на русскоязычную аудиторию, поэтому названия слов часто русскоязычные. А смесь регистров, позволяет объединять в одно слово форта несколько обычных слов (тавтология получилась... ) без дполнительных разделительных знаков, сохраняя при этом их читабельность, без лишней примеси исскуственности. Пока такова моя аргументация...
Регистронезависимость запускается:
REQUIRE CASE-INS lib\ext\caseins.f CASE-INS ON
Пробуем.
REQUIRE CASE-INS lib\ext\caseins.f CASE-INS ON \ включили регистронезависимость: _2 ( n ) \ Печать числа в двоичной системе base @ ( n 10 ) 2 baSE ! ( n 10 ) \ Так тоже работает over ( n 10 n ) . ( n 10 ) base ! ( n ) ; ( n ) CASE-INS OFF \ отключили регистро независимость
55 _2
Отлично! Полезная опция. Сразу включил ее для слова q – очень удачным оказалось. Особенно сейчас в Far-е с подключенным модулем extcom. Отредактировал текст, нажал F9 – сохранился и в этом же окне(!) запустилась редактируемый скрипт, в нем нажал Q – вернулся обратно к редактируемому тексту. Минимум нажатий, удобное расположение клавиши.
Да, про небольшие слова, в том плане, что они проще в понимании и, соответсвенно, в модификации и применении, понял. Справедливо. Думаю, что получения более аргументированного представления о возможностях такого подхода стоит еще попрактиковаться, написать несколько программ в двух вариантах: с "большими" словами и с короткими словами. Сравнить. Проанализировать... Это уже метод, подход к проектирвоанию, тут привычка нужна. Т.е. поставить мозги в эту сторону.
Идея со словом VECT понятна – использование техники предварительного объявления слов, но более позднего их описания. Мне кажется, что я нашел более изящный путь. Скорее, вспомнил. Суть его в том что, весь текст программы разбивается на несколько файлов, один из которых выполяет указателя и одновременно основной программы. В нем описывается основной (общий) алгоритм реализации задачи, а в подключаемых файлах лежат уже детали его реализации.
При таком подходе, многострадальная программа игры Жизнь разбивается на несколько файлов
life.f – здесь общее описание алгоритма игры life_sreda.f – детали реализации алгоритма, своеобразная частная библиотека Matrix.f – слова для работы с двумерными массивами.
Сам текст life.f стал таким, и, думаю, более понятным – т.к. не нужно листать экраны листинга...
\ Life game REQUIRE AT-XY ~day\common\console.f S" Matrix.f" INCLUDED S" life_sreda.f" INCLUDED\ Добавил счетчик поколений USER Поколение 1 Поколение ! USER ПервоначСреда 0 ПервоначСреда !
: Main { шСреды вСреды \ fl_exit } TRUE -> fl_exit шСреды вСреды Среда СоздатьМатрицу Среда ОчиститьМатрицу шСреды вСреды Кол-воСоседей СоздатьМатрицу Кол-воСоседей ОчиститьМатрицу шСреды вСреды ПервоначСреда СоздатьМатрицу 10 8 TEXT-ATTR CLS \ установил цвет вывода
ЗаселитьСреду \ Инициализировали РассчитатьКол-воСоседей Среда ПервоначСреда КопироватьМатрицуВ
ПоказатьСреду
BEGIN fl_exit KEY? IF KEY 113 <> AND THEN WHILE ОбновитьСреду РассчитатьКол-воСоседей Среда ПервоначСреда МатрицыИндеинтичны? INVERT DUP -> fl_exit IF ПоказатьСреду Поколение @ 1+ DUP Поколение ! 15 вСреды AT-XY ." Generation " . 30000000 0 DO 2 6 * DROP LOOP \ Задержка THEN REPEAT
7 0 TEXT-ATTR \ Восстановил палитру на черно-белый BYE ;
80 23 Main \ Запуск игры
Со словом NOT думаю, что это как раз тот случай, когда можно ототйти от стандарта. Вобщем, я его добавил в свою библиотечку.
: NOT INVERT ;
можно было бы и макросом сделать. Но не будем строить дополнительные слодности, там где этого пока нетребуется. Если потребуется, то думаю что луше сделать упор на оптимизатор, который бы короткие фрагменты просто бы вставлял в тело вызвавшей процедуры.
Dmitry Zyryanov указал на ошибки. Исправил. Высказал замечания – перевариваю.
Нашел некий ресурс с архивами конференций. Правда, несколько староватыми.
На Google нашел конференцию фидо. Работает очень быстро, и есть архив.
<<< Предыдущий | Начало | Следующий >>> |
При цитировании, ссылка на оригинальный текст обязательна. Допускается копирование материалов только целиком, без внесения каких-либо изменений в оригинальный текст, меняющих смысл, структуру материала и проч. |