Sobes.tech
Middle

Τι είναι το 'lazy' και το 'lateinit' στο Kotlin;

sobes.tech AI

Απάντηση από AI

lazy - ιδιότητα-αντιπρόσωπος για την καθυστερημένη και αμετάβλητη (val) αρχικοποίηση ιδιοτήτων. Η τιμή υπολογίζεται κατά την πρώτη πρόσβαση στην ιδιότητα και στη συνέχεια αποθηκεύεται στην cache.

// Παράδειγμα χρήσης του lazy
val lazyValue: String by lazy {
    println("Αρχικοποίηση") // θα εμφανιστεί μόνο μία φορά κατά την πρώτη πρόσβαση
    "Γειά σου, lazy!"
}

lateinit - τροποποιητής για μεταβλητές (var) ιδιότητες, που επιτρέπει την αναβολή της αρχικοποίησης μέχρι την πρώτη πρόσβαση. Η ιδιότητα πρέπει να είναι μη-null. Η χρήση της ιδιότητας πριν την αρχικοποίηση οδηγεί σε UninitializedPropertyAccessException.

// Παράδειγμα χρήσης του lateinit
lateinit var lateinitVariable: String

fun initializeVariable() {
    lateinitVariable = "Γειά σου, lateinit!"
}

fun useVariable() {
    // Έλεγχος αν έχει αρχικοποιηθεί πριν τη χρήση (προαιρετικό, αλλά συνιστάται)
    if (::lateinitVariable.isInitialized) {
        println(lateinitVariable)
    } else {
        println("Η μεταβλητή δεν έχει ακόμα αρχικοποιηθεί")
    }
}

Βασικές διαφορές:

Χαρακτηριστικό lazy lateinit
Τύπος ιδιότητας val (μόνο ανάγνωση) var (μεταβλητή)
Nullability Μπορεί να είναι nullable ή non-nullable Πρέπει να είναι non-nullable
Αρχικοποίηση Αυτόματη, κατά την πρώτη πρόσβαση Χειροκίνητη
Αναβολή στην αρχικοποίηση Ναι, κατά την πρώτη πρόσβαση Ναι, δήλωση χωρίς αρχικοποίηση
Ασφάλεια νημάτων Προεπιλεγμένα ασφαλής (συγχρονισμός), υπάρχουν επιλογές Δεν εγγυάται, εξαρτάται από το πλαίσιο
Εξαίρεση πριν την πρόσβαση Όχι, αυτόματα αρχικοποιείται UninitializedPropertyAccessException