Запись на курсы по HTML, CSS, JavaScript, PHP, Python, фреймворкам и CMS,
а также: помощь в поиске работы и заказов, стажировка на реальных проектах→
1277 of 1310 menu
В течении недели будет ОБНОВЛЕНИЕ УЧЕБНИКОВ PHP. Поменяется структура! Подробнее по ссылке.

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

Смотрите также

  • ключевое слово var,
    которое объявляет изменяемые свойства
  • ключевое слово lateinit,
    которое позволяет отложенную инициализацию переменных
  • ключевое слово lazy,
    которое обеспечивает ленивую инициализацию
  • ключевое слово get,
    которое определяет геттер для свойства