Sobes.tech
Middle

Kotlin-ში რა არის 'lazy' და 'lateinit'?

sobes.tech AI

პასუხი AI-სგან

lazy - ეს არის თვისების დელეგატი გადადებული და უცვლელი (read-only) თვისებების (val)თვის. მნიშვნელობა გამოითვლება პირველად მიმართვისას და შემდეგ კეშდება.

//  lazy-ის გამოყენების მაგალითი
val lazyValue: String by lazy {
    println("ინიცილიზაცია") // გამოჩნდება მხოლოდ ერთხელ პირველ მიმართვაზე
    "გამარჯობა, lazy!"
}

lateinit - მოდიფიკატორი მერყევი (mutable) თვისებების (var)თვის, რომელიც საშუალებას აძლევს გადადოს ინიციალიზაცია პირველ მიმართვამდე. თვისება უნდა იყოს non-nullable. ინიციალიზაციის წინ მიმართვა იწვევს UninitializedPropertyAccessException-ს.

//  lateinit-ის გამოყენების მაგალითი
lateinit var lateinitVariable: String

fun initializeVariable() {
    lateinitVariable = "გამარჯობა, lateinit!"
}

fun useVariable() {
    //  ინიციალიზაციის შემოწმება (სურვილისამებრ, მაგრამ რეკომენდირებულია)
    if (::lateinitVariable.isInitialized) {
        println(lateinitVariable)
    } else {
        println("მნიშვნელობა ჯერ არ არის ინიციალიზებული")
    }
}

ძირითადი განსხვავებები:

მახასიათებელი lazy lateinit
თვისების ტიპი val (მკითხველი בלבד) var (მოძრავი)
ნულზე თანასწორობა შეიძლება იყოს nullable ან non-nullable უნდა იყოს non-nullable
ინიციალიზაცია ავტომატურად, პირველ მიმართვაზე ხელით
გადადება დიახ, პირველ მიმართვაზე გამოთვლა დიახ, გარეშე ინიციალიზაცია
ნაკადი უსაფრთხოება ჩვეულებრივ, სინქრონიზაცია, ვარიანტები გარანტირებული არა, კონტექსტზეა დამოკიდებული
მიმართვის დროს გამოტოვების შემთხვევაში შეცდომა არა, ავტომატურად ინიციალიზდება UninitializedPropertyAccessException