Что такое отложенное задание в Котлине?

В документации Kotlin упоминается об отложенном назначении

val a: Int = 1  // immediate assignment  
val b = 2   // `Int` type is inferred  
val c: Int  // Type required when no initializer is provided  
c = 3       // **deferred assignment**

Что означает отложенное присваивание?

3 ответа

Это просто означает, что переменная инициализируется не в своем объявлении, а на более позднем этапе.

Как указано в документации val c: Int объявлен ранее c инициализируется в следующей строке.

Это означает, что вы можете инициализировать не обнуляемый val внутри функции несколько строк после того, как вы ее объявили.

Например, вот так:

class Hichhiker {
    fun foo() {
        val firstName: String
        val lastName: String
        val age: Int
        firstName = "Arthur"
        lastName = "Dent"
        age = 40
    }
}

Вместо этого:

class Hichhiker {
    fun foo() {
        val firstName = "Arthur"
        val lastName = "Dent"
        val age = 40
    }
}

Таким образом, компилятор распознает инициализацию не обнуляемого val даже если назначение было отложено на несколько строк кода.

Что-то похожее на уровне класса и чаще используется, см. Lateinit и делегаты вроде lazy()

Это просто означает, что переменная была инициализирована, и присвоение ей значения происходит строками кода ниже инициализации. Это означает, что присвоение было отложено на потом.

Другие вопросы по тегам