Talk:Reading the documentation (in Russian)

From D Wiki
Revision as of 11:59, 20 March 2015 by Gassa (talk | contribs) (О рекомендации)
Jump to: navigation, search

В целом при размещении нужных команд внутри динамического скоупа у программиста имеется некоторая вольность, не говоря уже о статических. Хотя синтаксис D этого не требует, существуют "правила хорошего тона" в написании программ. Так, чаще всего вводить определения и объявления рекомендуется непосредственно перед тем, как ими начинают пользоваться. Если вы объявляете переменные непосредственно перед тем, как они входят в дело, отпадает необходимость комментариев: сразу понятно, для чего нужна эта переменная. Также место в памяти будет выделяться по мере надобности, а не сразу большим объемом, а если пространства имен уже использованных и уже ненужных переменных будут постепенно закрываться, то место будет освобождаться по мере выполнения программы и она в целом не займет много места в ОЗУ.

внутри динамического scope переменные "объявляются" сразу же при входе туда, скорее всего - так как они хранятся просто в стековом пространстве {} (например, функции).

Соответственно, хоть правило насчет объявления перед использванием и хорошее, но фраза "Также место в памяти будет выделяться по мере надобности, а не сразу большим объемом" - неверна

О рекомендации

Также стараются держать пространства имен по возможности беднее. Чем больше имен доступно в одном скоупе, тем больше вероятность запутаться в этом обилии имен и больше возможность того, что одно имя затрет другое (например, такое возможно при импорте сразу нескольких библиотек с конфликтующими именами). Для этих целей переменные объявляют так "глубоко", как это возможно, чтобы их пространства имен кончались возможно скорее. Также зачастую из библиотек импортируют только одну или несколько необходимых функций или типов, не импортируя ее целиком.

Рекомендация хороша по разным причинам, но пояснение почти не относится к языку D. Например, код

void main () {int a; {int a;}}

генерирует ошибку. При импорте нескольких библиотек одинаковые имена не затрут друг друга, а тоже сгенерируют ошибку, например, в коде:

import std.file, std.stdio; void main () {ubyte [] v; write ("f", v);}

--Gassa (talk) 11:59, 20 March 2015 (UTC)