1 added
1 removed
Original
2026-01-01
Modified
2026-02-26
1
<p>Константа - это элемент программы, который однократно инициализируется при объявлении, не допуская изменений значения на протяжении всего времени выполнения программы. Такие фиксированные параметры помогают сделать код предсказуемым, структурированным и менее подверженным ошибкам. Такие фиксированные параметры помогают сделать код предсказуемым, структурированным и менее подверженным ошибкам.</p>
1
<p>Константа - это элемент программы, который однократно инициализируется при объявлении, не допуская изменений значения на протяжении всего времени выполнения программы. Такие фиксированные параметры помогают сделать код предсказуемым, структурированным и менее подверженным ошибкам. Такие фиксированные параметры помогают сделать код предсказуемым, структурированным и менее подверженным ошибкам.</p>
2
<h2>Определение и примеры</h2>
2
<h2>Определение и примеры</h2>
3
<p>Под фиксированным параметром понимают именованный элемент, которому присваивают значение один раз и не позволяют менять его в дальнейшем. Это может быть:</p>
3
<p>Под фиксированным параметром понимают именованный элемент, которому присваивают значение один раз и не позволяют менять его в дальнейшем. Это может быть:</p>
4
<ul><li>адрес API,</li>
4
<ul><li>адрес API,</li>
5
<li>коэффициент для математических расчётов,</li>
5
<li>коэффициент для математических расчётов,</li>
6
<li>строка с названием проекта,</li>
6
<li>строка с названием проекта,</li>
7
<li>флаг конфигурации.</li>
7
<li>флаг конфигурации.</li>
8
</ul><p>Разные языки задают такие элементы по-разному:</p>
8
</ul><p>Разные языки задают такие элементы по-разному:</p>
9
<ul><li><strong>Java / Kotlin:</strong>final, val</li>
9
<ul><li><strong>Java / Kotlin:</strong>final, val</li>
10
<li><strong>JavaScript (ES6+):</strong>const</li>
10
<li><strong>JavaScript (ES6+):</strong>const</li>
11
<li><strong>Python:</strong>соглашение об имени в верхнем регистре (MAX_RETRIES = 5)</li>
11
<li><strong>Python:</strong>соглашение об имени в верхнем регистре (MAX_RETRIES = 5)</li>
12
<li><strong>C / C++:</strong>const, #define</li>
12
<li><strong>C / C++:</strong>const, #define</li>
13
<li><strong>Go:</strong>const</li>
13
<li><strong>Go:</strong>const</li>
14
</ul><p>Главная идея - обозначить параметр, который не должен изменяться в процессе работы программы.</p>
14
</ul><p>Главная идея - обозначить параметр, который не должен изменяться в процессе работы программы.</p>
15
<h2>Синтаксис и принципы использования</h2>
15
<h2>Синтаксис и принципы использования</h2>
16
<p>Большинство языков предусматривает специальные конструкции для объявления таких параметров. Они гарантируют, что переменная, обозначенная как фиксированная, остаётся неизменной.</p>
16
<p>Большинство языков предусматривает специальные конструкции для объявления таких параметров. Они гарантируют, что переменная, обозначенная как фиксированная, остаётся неизменной.</p>
17
<h3>Как объявляется</h3>
17
<h3>Как объявляется</h3>
18
<ul><li><p><strong>JavaScript:</strong></p>
18
<ul><li><p><strong>JavaScript:</strong></p>
19
</li>
19
</li>
20
<li><p><strong>Java:</strong></p>
20
<li><p><strong>Java:</strong></p>
21
</li>
21
</li>
22
<li><p><strong>Go:</strong></p>
22
<li><p><strong>Go:</strong></p>
23
</li>
23
</li>
24
</ul><h3>Области видимости</h3>
24
</ul><h3>Области видимости</h3>
25
<p>Константа может находиться:</p>
25
<p>Константа может находиться:</p>
26
<ul><li><strong>локально</strong>- внутри функции;</li>
26
<ul><li><strong>локально</strong>- внутри функции;</li>
27
<li><strong>глобально</strong>- на уровне модуля;</li>
27
<li><strong>глобально</strong>- на уровне модуля;</li>
28
<li><strong>в классе</strong>- как статическое поле.</li>
28
<li><strong>в классе</strong>- как статическое поле.</li>
29
</ul><h3>Немутируемость</h3>
29
</ul><h3>Немутируемость</h3>
30
<p>Нельзя изменить сам параметр, но можно изменить внутреннее содержимое структуры, если это изменяемый тип. Например, в JavaScript:</p>
30
<p>Нельзя изменить сам параметр, но можно изменить внутреннее содержимое структуры, если это изменяемый тип. Например, в JavaScript:</p>
31
<h2>Виды фиксированных параметров</h2>
31
<h2>Виды фиксированных параметров</h2>
32
<p>Разные языки поддерживают несколько разновидностей таких элементов.</p>
32
<p>Разные языки поддерживают несколько разновидностей таких элементов.</p>
33
-
<h3>1. Символ��ческие</h3>
33
+
<h3>1. Символические</h3>
34
<p>Используются как удобные идентификаторы:</p>
34
<p>Используются как удобные идентификаторы:</p>
35
<h3>2. Числовые</h3>
35
<h3>2. Числовые</h3>
36
<p>Например, коэффициенты вычислений, лимиты, интервалы времени.</p>
36
<p>Например, коэффициенты вычислений, лимиты, интервалы времени.</p>
37
<h3>3. Строковые</h3>
37
<h3>3. Строковые</h3>
38
<p>Пути, шаблоны сообщений, названия элементов интерфейса.</p>
38
<p>Пути, шаблоны сообщений, названия элементов интерфейса.</p>
39
<h3>4. Локальные и глобальные</h3>
39
<h3>4. Локальные и глобальные</h3>
40
<ul><li>локальные повышают читаемость внутри функции,</li>
40
<ul><li>локальные повышают читаемость внутри функции,</li>
41
<li>глобальные используются в качестве конфигурации проекта.</li>
41
<li>глобальные используются в качестве конфигурации проекта.</li>
42
</ul><h2>Применение в разработке</h2>
42
</ul><h2>Применение в разработке</h2>
43
<p>Неизменяемые сущности используют везде, где разработчику важно задать опорные величины, не зависящие от хода программы. Чаще всего их включают в конфигурацию проекта: таймауты, пути до ресурсов, API-ключи, флаги режима работы.</p>
43
<p>Неизменяемые сущности используют везде, где разработчику важно задать опорные величины, не зависящие от хода программы. Чаще всего их включают в конфигурацию проекта: таймауты, пути до ресурсов, API-ключи, флаги режима работы.</p>
44
<p>Также статичные элементы служат:</p>
44
<p>Также статичные элементы служат:</p>
45
<ul><li>дефолтными настройками функции;</li>
45
<ul><li>дефолтными настройками функции;</li>
46
<li>частью математических формул;</li>
46
<li>частью математических формул;</li>
47
<li>элементами, определяющими режим работы модуля;</li>
47
<li>элементами, определяющими режим работы модуля;</li>
48
<li>значениями, используемыми в нескольких частях проекта.</li>
48
<li>значениями, используемыми в нескольких частях проекта.</li>
49
</ul><p>Смысл в том, чтобы вынести ключевые настройки в одно место и не допустить их случайного изменения.</p>
49
</ul><p>Смысл в том, чтобы вынести ключевые настройки в одно место и не допустить их случайного изменения.</p>
50
<h2>Типичные ошибки</h2>
50
<h2>Типичные ошибки</h2>
51
<h3>Попытка изменить неизменяемый элемент</h3>
51
<h3>Попытка изменить неизменяемый элемент</h3>
52
<p>Новички иногда пытаются присвоить новое содержимое объекту, который объявлен как статичный. Это вызывает ошибку компиляции или исключение на этапе выполнения - в зависимости от языка.</p>
52
<p>Новички иногда пытаются присвоить новое содержимое объекту, который объявлен как статичный. Это вызывает ошибку компиляции или исключение на этапе выполнения - в зависимости от языка.</p>
53
<h3>Shadowing (затенение)</h3>
53
<h3>Shadowing (затенение)</h3>
54
<p>Когда внутри функции создают переменную с тем же именем, что и глобальный идентификатор, исходная сущность становится недоступной. В результате код ведёт себя неожиданно.</p>
54
<p>Когда внутри функции создают переменную с тем же именем, что и глобальный идентификатор, исходная сущность становится недоступной. В результате код ведёт себя неожиданно.</p>
55
<h3>Запутанные области видимости</h3>
55
<h3>Запутанные области видимости</h3>
56
<p>Размещение одинаковых имен в разных модулях сбивает с толку и усложняет отладку.</p>
56
<p>Размещение одинаковых имен в разных модулях сбивает с толку и усложняет отладку.</p>
57
<h2>Лучшие практики</h2>
57
<h2>Лучшие практики</h2>
58
<h3>Именование</h3>
58
<h3>Именование</h3>
59
<p>Принято использовать верхний регистр и подчёркивания:</p>
59
<p>Принято использовать верхний регистр и подчёркивания:</p>
60
<p>Такой стиль сразу говорит программисту, что это стабильная константа, а не изменяемая переменная.</p>
60
<p>Такой стиль сразу говорит программисту, что это стабильная константа, а не изменяемая переменная.</p>
61
<h3>Группировка</h3>
61
<h3>Группировка</h3>
62
<p>Хорошая практика - собирать константы в одном модуле или отдельной директории. Это облегчает поиск, рефакторинг, документирование.</p>
62
<p>Хорошая практика - собирать константы в одном модуле или отдельной директории. Это облегчает поиск, рефакторинг, документирование.</p>
63
<h3>Отдельные конфигурационные блоки</h3>
63
<h3>Отдельные конфигурационные блоки</h3>
64
<p>Многие проекты выносят строки, пути, другие настройки в отдельные файлы:<em>.env</em>,<em>config.js</em>,<em>settings.py</em>. Это удобнее, чем размазывать значения по всему коду.</p>
64
<p>Многие проекты выносят строки, пути, другие настройки в отдельные файлы:<em>.env</em>,<em>config.js</em>,<em>settings.py</em>. Это удобнее, чем размазывать значения по всему коду.</p>
65
<h2>Современные подходы</h2>
65
<h2>Современные подходы</h2>
66
<p>В последние годы популярность gaining у моделей, основанных на строгой неизменяемости.</p>
66
<p>В последние годы популярность gaining у моделей, основанных на строгой неизменяемости.</p>
67
<h3>Функциональное программирование</h3>
67
<h3>Функциональное программирование</h3>
68
<p>Языки этой парадигмы (Haskell, Elixir, Clojure) строят почти всю логику вокруг статичных сущностей. Это улучшает предсказуемость, избавляет от побочных эффектов, помогает масштабировать проекты.</p>
68
<p>Языки этой парадигмы (Haskell, Elixir, Clojure) строят почти всю логику вокруг статичных сущностей. Это улучшает предсказуемость, избавляет от побочных эффектов, помогает масштабировать проекты.</p>
69
<h3>Gradual Immutability</h3>
69
<h3>Gradual Immutability</h3>
70
<p>Некоторые современные языки позволяют постепенно усиливать требования к статичности элементов - например, TypeScript расширяет контроль типов, позволяет помечать данные как readonly.</p>
70
<p>Некоторые современные языки позволяют постепенно усиливать требования к статичности элементов - например, TypeScript расширяет контроль типов, позволяет помечать данные как readonly.</p>
71
<h3>Константы как часть API</h3>
71
<h3>Константы как часть API</h3>
72
<p>Библиотеки и фреймворки часто публикуют наборы неизменяемых идентификаторов, задающих режимы работы модуля или варианты поведения.</p>
72
<p>Библиотеки и фреймворки часто публикуют наборы неизменяемых идентификаторов, задающих режимы работы модуля или варианты поведения.</p>
73
<h2>Заключение</h2>
73
<h2>Заключение</h2>
74
<p>Константы - это фундамент стабильной архитектуры приложения. Они делают код прозрачнее, облегчают поддержку, уменьшают вероятность ошибок, позволяют вынести важные элементы конфигурации в единое место. Понимание того, как правильно объявлять, группировать и использовать константы, помогает строить более надёжные проекты, следуя лучшим практикам разработки.</p>
74
<p>Константы - это фундамент стабильной архитектуры приложения. Они делают код прозрачнее, облегчают поддержку, уменьшают вероятность ошибок, позволяют вынести важные элементы конфигурации в единое место. Понимание того, как правильно объявлять, группировать и использовать константы, помогает строить более надёжные проекты, следуя лучшим практикам разработки.</p>