Ключевое слово val
Ключевое слово val
используется для объявления
неизменяемых свойств в классах Kotlin. Свойство,
объявленное с val
, может быть инициализировано
только один раз и не может быть изменено после
инициализации.
Синтаксис
val propertyName: Type = value
val propertyName = value // тип выводится автоматически
val propertyName: Type
get() = expression
Пример
Объявление простого свойства только для чтения:
class Person {
val name: String = "John"
val age = 25
}
val person = Person()
println(person.name)
println(person.age)
Результат выполнения кода:
String "John"
Int 25
Пример
Попытка изменить свойство val
приведет к ошибке компиляции:
class Person {
val name: String = "John"
}
val person = Person()
person.name = "Mike" // Ошибка компиляции
Пример
Свойство val
с пользовательским геттером:
class Rectangle(val width: Int, val height: Int) {
val area: Int
get() = width * height
}
val rect = Rectangle(5, 10)
println(rect.area)
Результат выполнения кода:
Int 50
Пример
Инициализация val
в блоке init
:
class User(val firstName: String, val lastName: String) {
val fullName: String
init {
fullName = "$firstName $lastName"
}
}
val user = User("John", "Doe")
println(user.fullName)
Результат выполнения кода:
String "John Doe"
Пример
Свойство val
может быть лениво инициализировано
с помощью by lazy
:
class ExpensiveResource {
val heavyData: String by lazy {
println("Computing heavy data...")
"Computed Data"
}
}
val resource = ExpensiveResource()
println(resource.heavyData)
println(resource.heavyData)
Результат выполнения кода:
String "Computing heavy data..."
String "Computed Data"
String "Computed Data"