4. Организуйте и определите константы

В этом задании вы познакомитесь с константами в Kotlin и различными способами их организации.

Шаг 1: Изучите разницу между const и val.

  1. В REPL попробуйте создать числовую константу. В Kotlin можно создавать константы верхнего уровня и присваивать им значение во время компиляции, используя `.` const val.
const val rocks = 3

Значение присваивается и не может быть изменено, что очень похоже на объявление обычного объекта val. Так в чем же разница между const valи val? Значение const valопределяется во время компиляции, тогда как значение valопределяется во время выполнения программы, а это значит, valчто может быть присвоено функцией во время выполнения.

Это означает, что valзначение можно присвоить из функции, но const valнельзя.

val value1 = complexFunctionCall() // OK
const val CONSTANT1 = complexFunctionCall() // NOT ok

Кроме того, const valэто работает только на верхнем уровне и в классах-синглтонах, объявленных с помощью `<key>` object, а не в обычных классах. Вы можете использовать это для создания файла или объекта-синглтона, содержащего только константы, и импортировать их по мере необходимости.

object Constants {
    const val CONSTANT2 = "object constant"
}
val foo = Constants.CONSTANT2

Шаг 2: Создайте вспомогательный объект.

В Kotlin отсутствует понятие констант на уровне класса.

Для определения констант внутри класса необходимо обернуть их в сопутствующие объекты, объявленные с помощью companionключевого слова `contact`. Сопутствующий объект, по сути, является синглтоном внутри класса.

  1. Создайте класс с дополнительным объектом, содержащим строковую константу.
class MyClass {
    companion object {
        const val CONSTANT3 = "constant in companion"
    }
}

Основное различие между объектами-компаньонами и обычными объектами заключается в следующем:

  • Сопутствующие объекты инициализируются из статического конструктора содержащего класса, то есть они создаются при создании объекта.
  • Обычные объекты инициализируются лениво при первом обращении к ним, то есть при первом использовании.

Есть и другие нюансы, но на данный момент вам достаточно знать только то, как обернуть константы в классах в сопутствующий объект.


Последнее изменение: Воскресенье, 5 апреля 2026, 14:15