От автора code.mu: РЕПЕТИТОР математика физика информатика
Для школьников и студентов. Подтягивание пробелов. ЦЭ, ЦТ, ОГЭ, ЕГЭ.
Идет набор на ЛЕТО. Жмите для подробностей:)
1283 of 1310 menu

Функция lazy

Функция lazy используется для ленивой инициализации свойств класса. Значение вычисляется только при первом обращении к свойству и затем кэшируется для последующих обращений. Принимает лямбда-выражение, возвращающее значение инициализации.

Импорт

import kotlin.lazy

Синтаксис

val <propertyName>: <T> by lazy { <initializer> }
val <propertyName>: <T> by lazy(mode = LazyThreadSafetyMode.<MODE>) { <initializer> }

Пример

Создадим свойство с ленивой инициализацией:

val lazyValue: String by lazy { println("Initializing lazy value") "Hello, World!" } println(lazyValue) println(lazyValue)

Результат выполнения кода:

Initializing lazy value String "Hello, World!" String "Hello, World!"

Пример

Использование разных режимов потокобезопасности:

val synchronizedLazy: Int by lazy(LazyThreadSafetyMode.SYNCHRONIZED) { println("Synchronized initialization") 42 } val publicationLazy: List<String> by lazy(LazyThreadSafetyMode.PUBLICATION) { println("Publication initialization") listOf("a", "b", "c") } val noneLazy: Double by lazy(LazyThreadSafetyMode.NONE) { println("None thread-safe initialization") 3.14 }

Пример

Ленивая инициализация сложного объекта:

data class User(val name: String, val age: Int) val currentUser: User by lazy { println("Creating user object") User("John", 30) } println("Before first access") println(currentUser.name) println("After first access") println(currentUser.age)

Результат выполнения кода:

Before first access Creating user object String "John" After first access Int 30

Пример

Ленивая инициализация с вычислениями:

val expensiveCalculation: Int by lazy { var result = 0 for (i in 1..1000) { result += i } println("Calculation completed") result } if (true) { println(expensiveCalculation) }

Результат выполнения кода:

Calculation completed Int 500500

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

  • ключевое слово lateinit,
    которое используется для отложенной инициализации переменных
  • ключевое слово val,
    которое объявляет неизменяемое свойство
  • ключевое слово var,
    которое объявляет изменяемое свойство
  • ключевое слово class,
    которое объявляет класс
Мы используем cookie для работы сайта, аналитики и персонализации. Обработка данных происходит согласно Политике конфиденциальности.
принять все настроить отклонить