В Kotlin при объявлении переменных есть два варианта: constи val. Хотя на первый взгляд они могут показаться похожими, между ними есть фундаментальные различия. В этой статье мы рассмотрим различия между constи valи попутно приведем примеры кода.
Const – неизменяемая константа:
Начнем с const. В Kotlin constиспользуется для объявления констант времени компиляции. Эти константы известны во время компиляции и не могут быть изменены во время выполнения. Они привязываются к определенному значению во время компиляции и сохраняются в байт-коде. Вот пример:
const val PI = 3.14159
В приведенном выше фрагменте кода мы объявляем константу PIсо значением 3.14159. Поскольку это константа времени компиляции, мы можем использовать ее в аннотациях, а также в выражениях, требующих постоянных значений.
Val — неизменяемая переменная:
С другой стороны, valиспользуется для объявления переменных, доступных только для чтения, в Kotlin. После присвоения значение valне может быть изменено. Это похоже на объявление переменной finalв Java. Вот пример:
val name = "John Doe"
В приведенном выше фрагменте кода name— это переменная, доступная только для чтения, с начальным значением «Джон Доу». Мы можем получить доступ к nameво всей программе, но не можем переназначить ему новое значение.
Различия в использовании.
Основное различие между constи valзаключается в их использовании и времени, в которое им присваивается значение. Вот несколько ключевых моментов, которые следует запомнить:
Значения
Constдолжны быть объявлены на верхнем уровне или внутри объявления объекта или сопутствующего объекта. Они не могут быть локальными переменными или членами класса.Valпеременные могут быть объявлены где угодно, в том числе внутри функции, как член класса или как локальная переменная.Constоцениваются во время компиляции, а переменныеvalоцениваются во время выполнения.Constмогут содержать только примитивные типы или строки, тогда как переменныеvalмогут содержать объекты любого типа.
С другой стороны,
Значения
Значения
Пример кода:
// Const example
const val MAX_SIZE = 100
// Val example
fun printName() {
val name = "Alice"
println("Name: $name")
}
class Person {
val age = 25
companion object {
const val GREETING = "Hello"
}
}
fun main() {
printName()
val person = Person()
println("${Person.GREETING}, I am ${person.age} years old.")
}
В приведенном выше примере кода мы демонстрируем использование как const, так и val. Мы объявляем значение constMAX_SIZE, переменную valnameвнутри функции и valпеременная ageкак член класса Person.
Подводя итог: constиспользуется для констант времени компиляции, а val— для переменных, доступных только для чтения. Значения Constоцениваются во время компиляции и имеют некоторые ограничения на то, где их можно объявлять, тогда как переменные valоцениваются во время выполнения и могут быть объявлены где угодно. Понимание разницы между constи valнеобходимо для написания надежного и эффективного кода Kotlin.