OberonCore

Библиотека  Wiki  Форум  BlackBox  Компоненты  Проекты
Текущее время: Четверг, 01 Октябрь, 2020 03:38

Часовой пояс: UTC + 3 часа




Начать новую тему Ответить на тему  [ Сообщений: 4 ] 
Автор Сообщение
СообщениеДобавлено: Вторник, 08 Сентябрь, 2020 19:15 
Аватара пользователя

Зарегистрирован: Суббота, 16 Февраль, 2008 02:47
Сообщения: 311
В другой ветке форума я высказал мысль, что вот бы отказаться от object scope в А2. В ответ:
viewtopic.php?f=22&t=6634&p=112500#p112495
Sergej 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;

Почему бы и нет?

Хотя лично я решил этот последний вопрос для себя иначе: отказом от вложенных процедур. Лично в своих текстах я отказался от их использования. Почему? Когда читаю чужие тексты и нахожу вложенные процедуры, неизменно чувствую, что возрастает напряжение. В душе, не в электрической сети ). И беспокойство и неприязнь. Возможно, потому что в этой ситуации нужно в уме держать три области видимости, а это как раз и требует напряжения; и часто вложенные процедуры - это на несколько страниц, и "границы" самой внешней того и гляди проскочишь прокруткой - это беспокойство. Но для меня это вопрос стиля, я вообще избегаю процедур, которые в один экран не помещаются.

Кажется, в каком-то из последних Оберонов Вирт так сделал.


Что скажете, коллеги?


Вернуться к началу
 Профиль  
 
СообщениеДобавлено: Вторник, 08 Сентябрь, 2020 19:22 
Модератор
Аватара пользователя

Зарегистрирован: Понедельник, 14 Ноябрь, 2005 18:39
Сообщения: 9283
Откуда: Россия, Орёл
adimetrius писал(а):
Хотя лично я решил этот последний вопрос для себя иначе: отказом от вложенных процедур.
Что скажете, коллеги?


Вложенные процедуры нужны для сложных циклов, когда нужен предикат в условие.
И в некоторых сложных алгоритмах, чтобы не таскать всё через параметры.

В нише O7 типа системного софта и МК ещё можно потерпеть.

Мотивация Вирта тоже понятна - там достаточно замороченное связывание при генерации кода. Куда проще работать только с одним фреймом.


Вернуться к началу
 Профиль  
 
СообщениеДобавлено: Среда, 09 Сентябрь, 2020 00:11 

Зарегистрирован: Пятница, 13 Март, 2009 16:36
Сообщения: 939
Откуда: Казань
По поводу глобальных переменных, я считаю, что было бы лучше, если бы IDE показывало разным цветом глобальные и локальные переменные.

Насчет вложенных процедур, насколько я знаю, вложенные процедуры не запрещались в Оберонах, а в Оберон-07 запретили обращаться из вложенной процедуры к переменным внешней процедуры. То есть вложенная процедура может обращаться только к своим локальными переменным (включая параметры) или же к глобальным переменным модуля. Считаю, что вложенные процедуры полезны для декомпозиции задачи на подзадачи. Но мало кто этим пользуется, так как во многих языках вложенные процедуры отсутствуют и соответственно нет привычки использовать вложенные процедуры.


Вернуться к началу
 Профиль  
 
СообщениеДобавлено: Среда, 09 Сентябрь, 2020 11:20 
Аватара пользователя

Зарегистрирован: Пятница, 25 Ноябрь, 2005 12:02
Сообщения: 8371
Откуда: Троицк, Москва
Илья Ермаков писал(а):
Вложенные процедуры нужны для сложных циклов, когда нужен предикат в условие.
И в некоторых сложных алгоритмах, чтобы не таскать всё через параметры.
Учу такому в курсе, т.к. повышение выразительности и вероятности того, что программа будет правильная, бывает очень существенным в сложных алгоритмах. Школьный пример -- обход конём шахматной доски (кажется, этот и подобные примеры сделаны именно так в Алгоритмах и структурах данных).

Такие алгоритмы редко встречаются на практике, но когда встречаются, причиняют головную боль.


Вернуться к началу
 Профиль  
 
Показать сообщения за:  Поле сортировки  
Начать новую тему Ответить на тему  [ Сообщений: 4 ] 

Часовой пояс: UTC + 3 часа


Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 1


Вы не можете начинать темы
Вы не можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете добавлять вложения

Найти:
cron
Вся информация, размещаемая участниками на конференции (тексты сообщений, вложения и пр.) © 2005-2020, участники конференции «OberonCore», если специально не оговорено иное.
Администрация не несет ответственности за мнения, стиль и достоверность высказываний участников, равно как и за безопасность материалов, предоставляемых участниками во вложениях.
Без разрешения участников и ссылки на конференцию «OberonCore» любое воспроизведение и/или копирование высказываний полностью и/или по частям запрещено.
Powered by phpBB® Forum Software © phpBB Group
Русская поддержка phpBB