День 12. Чтение конференции

День 12. Чтение конференции

Советы М.Максимова.

Очередная порция комментариев от Михаила Максимова. Большое спасибо.

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

<<< Предыдущий Начало   Следующий >>>
Copyright © Alex Furashev 2004

При цитировании, ссылка на оригинальный текст обязательна. Допускается копирование материалов только целиком, без внесения каких-либо изменений в оригинальный текст, меняющих смысл, структуру материала и проч.

Hosted by uCoz