В другой ветке форума я высказал мысль, что вот бы отказаться от object scope в А2. В ответ:
viewtopic.php?f=22&t=6634&p=112500#p112495Sergej Durmanov писал(а):
Цитата:
выкинуть Object scope как существенно усложняющий понимание написанных программ и не добавляющий ничего по существу;
Чтобы быть честным, и оберонов нужно выкинуть и module scope, ,существенно услодняющий понимание и т.д и т.п
Если я правильно понял Сергея, речь о том, что доступ к глобальным переменным должен быть явным. Я нередко об этом думаю, и мне интересно, что скажут коллеги.
Почему бы не распространить общее правило и не использовать имя модуля для доступа к локальным переменным:
Код:
MODULE M;
VAR i, j: INTEGER;
PROCEDURE P;
VAR i: INTEGER;
BEGIN i := M.i; i := j (* X undeclared identifier *)
END P;
END M.
Напрашивается тогда и вопрос о том, не потребовать ли квалификации имен переменных из "окружающих" процедур:
Код:
PROCEDURE Q;
VAR i: INTEGER;
PROCEDURE P;
VAR i: INTEGER;
BEGIN i := Q.i
END P;
END Q;
Почему бы и нет?
Хотя лично я решил этот последний вопрос для себя иначе: отказом от вложенных процедур. Лично в своих текстах я отказался от их использования. Почему? Когда читаю чужие тексты и нахожу вложенные процедуры, неизменно чувствую, что возрастает напряжение. В душе, не в электрической сети ). И беспокойство и неприязнь. Возможно, потому что в этой ситуации нужно в уме держать три области видимости, а это как раз и требует напряжения; и часто вложенные процедуры - это на несколько страниц, и "границы" самой внешней того и гляди проскочишь прокруткой - это беспокойство. Но для меня это вопрос стиля, я вообще избегаю процедур, которые в один экран не помещаются.
Кажется, в каком-то из последних Оберонов Вирт так сделал.
Что скажете, коллеги?