Skip to content

Instantly share code, notes, and snippets.

@dBaser1985
Forked from ievetrov/constants.md
Created February 6, 2025 07:24
Show Gist options
  • Save dBaser1985/59a52ef7eef2deb83cebfd6a7b66929c to your computer and use it in GitHub Desktop.
Save dBaser1985/59a52ef7eef2deb83cebfd6a7b66929c to your computer and use it in GitHub Desktop.
constants.md

Константы в Kotlin, отличие val от const val

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

Что такое константы?

Константы – это специальные переменные, значения которых устанавливаются один раз во время их определения (инициализации). То есть значения известны на этапе компиляции кода. Они не могут быть изменены во время выполнения программы и остаются таковыми на протяжении всей работы программы. Константы объявляются с помощью ключевых слов const val и имеют специальный стиль именования – snake case в сочетании с верхним регистром.

Зачем нужны константы?

Оптимизация

Когда компилятор встречает константу, он вставляет ее значение непосредственно в байт-код вместо того, чтобы ссылаться на переменную. Это позволяет избежать лишних ссылок на переменные и создания избыточных объектов в памяти. Кроме того это открывает дополнительные возможности использования констант, например, в аннотациях.

Читаемость кода

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

Отличие val от const val

val

Нельзя изменять (перезаписывать) после компиляции в рабочей программе. Однако, ее можно объявить до компиляции, а присвоить значение позже – во время работы программы (то есть после компиляции). Но для этого обязательно требуется прописать тип переменной для хранения будущих данных. Для val переменных, место в памяти под значение выделяется динамически во время выполнения. Переменная после компиляции останется переменной и продолжит хранить в себе ссылку на место в памяти.

const val

Также нельзя изменять после компиляции, но такую константу вовсе нельзя оставить без инициализации до компиляции. Дело в том, что после компиляции сами переменные полностью исчезают, оставляя вместо себя только значение в байт-коде. Их еще называют константами времени компиляции.

Кроме того все вычисления в константах также происходят заранее, оставляя в байт-коде только результат выполнения. Так как значение const val встроено непосредственно в байт-код, оно не занимает отдельное место в памяти в качестве поля объекта или статического поля класса. Это уменьшает накладные расходы на память и может повышать производительность, особенно если константа используется многократно.

Примеры применения в Android

Вот несколько примеров реального применения констант в Android приложениях для хранения различных типов данных, которые не изменяются в течение времени жизни приложения.

  • @GET(USERS_ENDPOINT)" – аннотации API запросов, которые хранят части URL сетевых методов (эндпоинты) в константах.
  • const val BASE_URL = "https://api.example.com/" – адреса серверов API, с которыми взаимодействует приложение.
  • const val PREFS_FILE_NAME = "com.example.app.preferences" – имена файлов настроек для сохранения пользовательских данных.
  • const val MAPS_API_KEY = "AIzaSyD-vjSyB..." – ключи для доступа к внешним API или сервисам.
  • const val EXTRA_USER_ID = "com.example.app.EXTRA_USER_ID" – для обозначения ключей данных, передаваемых между компонентами через Intent.
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment