Для чего нужен делегат by lazy

«Для чего нужен делегат by lazy» — вопрос из категории Kotlin, который задают на 23% собеседований Android Разработчик. Ниже — развёрнутый ответ с разбором ключевых моментов.

Ответ

by lazy — это ленивая инициализация свойства, которая выполняется только при первом доступе к нему. Это полезно для:

  • Оптимизации — если свойство не всегда используется.
  • Избежания NPE — если инициализация требует контекста (this).
  • Снижения нагрузки при старте приложения.

Пример:

val heavyObject: HeavyClass by lazy {
    HeavyClass() // Создаётся только при первом вызове heavyObject
}

Особенности:

  • Потокобезопасен по умолчанию (можно изменить через LazyThreadSafetyMode).
  • Только для val (неизменяемые свойства).
  • Не подходит, если нужно переинициализировать значение.