Константы являются фундаментальным элементом в разработке программного обеспечения. В этом руководстве мы рассмотрим, почему константы так важны и как они работают на уровне компиляции.
Константы – это специальные переменные, значения которых устанавливаются один раз во время их определения (инициализации). То есть значения известны на этапе компиляции кода. Они не могут быть изменены во время выполнения программы и остаются таковыми на протяжении всей работы программы. Константы объявляются с помощью ключевых слов const val
и имеют специальный стиль именования – snake case в сочетании с верхним регистром.
Когда компилятор встречает константу, он вставляет ее значение непосредственно в байт-код вместо того, чтобы ссылаться на переменную. Это позволяет избежать лишних ссылок на переменные и создания избыточных объектов в памяти. Кроме того это открывает дополнительные возможности использования констант, например, в аннотациях.
Благодаря особому синтаксису можно визуально определить места их применения, что облегчает считывание кода и определения его назначения. В реальной жизни вы будете чаще читать код, чем писать его.
Нельзя изменять (перезаписывать) после компиляции в рабочей программе. Однако, ее можно объявить до компиляции, а присвоить значение позже – во время работы программы (то есть после компиляции). Но для этого обязательно требуется прописать тип переменной для хранения будущих данных. Для val
переменных, место в памяти под значение выделяется динамически во время выполнения. Переменная после компиляции останется переменной и продолжит хранить в себе ссылку на место в памяти.
Также нельзя изменять после компиляции, но такую константу вовсе нельзя оставить без инициализации до компиляции. Дело в том, что после компиляции сами переменные полностью исчезают, оставляя вместо себя только значение в байт-коде. Их еще называют константами времени компиляции.
Кроме того все вычисления в константах также происходят заранее, оставляя в байт-коде только результат выполнения. Так как значение const val
встроено непосредственно в байт-код, оно не занимает отдельное место в памяти в качестве поля объекта или статического поля класса. Это уменьшает накладные расходы на память и может повышать производительность, особенно если константа используется многократно.
Вот несколько примеров реального применения констант в 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.