Чем отличается const val от val

В Kotlin ключевое слово const используется для создания констант времени компиляции, в то время как ключевое слово val используется для создания неизменяемых (immutable) переменных времени выполнения.

Вот основные различия между const val и val:

  1. Время жизни инициализации:
    • const val: Константы времени компиляции должны быть инициализированы значением, известным во время компиляции. Они могут быть инициализированы только примитивными типами данных или строковыми литералами, которые можно вычислить во время компиляции.
    • val: Переменные времени выполнения могут быть инициализированы любым значением, известным во время выполнения программы.
  2. Место инициализации:
    • const val: Константы времени компиляции могут быть инициализированы только в верхнем уровне файла или внутри объектов (object). Они не могут быть инициализированы внутри функций или в качестве членов класса.
    • val: Переменные времени выполнения могут быть инициализированы в любом месте, где допустимо объявление переменной.
  3. Использование в выражениях:
    • const val: Константы времени компиляции могут использоваться в выражениях, где требуются константы времени компиляции, например, при определении значений аннотаций.
    • val: Переменные времени выполнения могут использоваться в любом месте, где допустимо использование переменных.
  4. Компиляция и исполнение:
    • const val: Значения констант времени компиляции встраиваются в байткод в места использования, поэтому они доступны во время выполнения программы только через их использование в других константных выражениях.
    • val: Переменные времени выполнения сохраняют свои значения в памяти во время выполнения программы и могут быть изменены только один раз после инициализации.
const val PI = 3.14159 // Константа времени компиляции

fun main() {
    val radius = 5 // Переменная времени выполнения
    val area = PI * radius * radius // Использование константы времени компиляции
    println("Площадь круга: $area")
}