OberonCore https://forum.oberoncore.ru/ |
|
Квалифицированный доступ к глобальным переменным https://forum.oberoncore.ru/viewtopic.php?f=29&t=6653 |
Страница 1 из 1 |
Автор: | adimetrius [ Вторник, 08 Сентябрь, 2020 19:15 ] |
Заголовок сообщения: | Квалифицированный доступ к глобальным переменным |
В другой ветке форума я высказал мысль, что вот бы отказаться от 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 ] |
Заголовок сообщения: | Re: Квалифицированный доступ к глобальным переменным |
adimetrius писал(а): Хотя лично я решил этот последний вопрос для себя иначе: отказом от вложенных процедур. Что скажете, коллеги? Вложенные процедуры нужны для сложных циклов, когда нужен предикат в условие. И в некоторых сложных алгоритмах, чтобы не таскать всё через параметры. В нише O7 типа системного софта и МК ещё можно потерпеть. Мотивация Вирта тоже понятна - там достаточно замороченное связывание при генерации кода. Куда проще работать только с одним фреймом. |
Автор: | Rifat [ Среда, 09 Сентябрь, 2020 00:11 ] |
Заголовок сообщения: | Re: Квалифицированный доступ к глобальным переменным |
По поводу глобальных переменных, я считаю, что было бы лучше, если бы IDE показывало разным цветом глобальные и локальные переменные. Насчет вложенных процедур, насколько я знаю, вложенные процедуры не запрещались в Оберонах, а в Оберон-07 запретили обращаться из вложенной процедуры к переменным внешней процедуры. То есть вложенная процедура может обращаться только к своим локальными переменным (включая параметры) или же к глобальным переменным модуля. Считаю, что вложенные процедуры полезны для декомпозиции задачи на подзадачи. Но мало кто этим пользуется, так как во многих языках вложенные процедуры отсутствуют и соответственно нет привычки использовать вложенные процедуры. |
Автор: | Info21 [ Среда, 09 Сентябрь, 2020 11:20 ] |
Заголовок сообщения: | Re: Квалифицированный доступ к глобальным переменным |
Илья Ермаков писал(а): Вложенные процедуры нужны для сложных циклов, когда нужен предикат в условие. Учу такому в курсе, т.к. повышение выразительности и вероятности того, что программа будет правильная, бывает очень существенным в сложных алгоритмах. Школьный пример -- обход конём шахматной доски (кажется, этот и подобные примеры сделаны именно так в Алгоритмах и структурах данных).И в некоторых сложных алгоритмах, чтобы не таскать всё через параметры. Такие алгоритмы редко встречаются на практике, но когда встречаются, причиняют головную боль. |
Страница 1 из 1 | Часовой пояс: UTC + 3 часа |
Powered by phpBB® Forum Software © phpBB Group https://www.phpbb.com/ |