HTML Diff
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>