Ключевое слово 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"