Εξηγήστε τι είναι η ασφάλεια null στη γλώσσα Kotlin.
sobes.tech AI
Απάντηση από AI
Η ασφάλεια null — είναι μια λειτουργία της γλώσσας Kotlin που αποτρέπει σφάλματα που σχετίζονται με αναφορές null. Επιτυγχάνεται με τη δημιουργία δύο τύπων αναφορών: nullable (που επιτρέπει null) και non-nullable (που δεν επιτρέπει null).
Οι τύποι non-nullable δηλώνονται όπως συνήθως:
var nonNullableString: String = "Hello" // Δεν μπορεί να είναι null
Οι τύποι nullable δηλώνονται με το σύμβολο ? μετά το όνομα του τύπου:
var nullableString: String? = "Hello" // Μπορεί να είναι null
nullableString = null
Η Kotlin απαιτεί ρητή διαχείριση των nullable τύπων, αποτρέποντας την άμεση πρόσβαση στα μέλη τους χωρίς προηγούμενο έλεγχο για null. Για αυτό, παρέχονται οι ακόλουθοι μηχανισμοί:
-
Τελεστής ασφαλούς κλήσης (
?.): Καλεί μια μέθοδο ή προσπελάζει μια ιδιότητα μόνο αν το αντικείμενο δεν είναιnull. Διαφορετικά, επιστρέφειnull.val length = nullableString?.length // length θα είναι `Int?` ή `null` -
Τελεστής Elvis (
?:): Παρέχει μια προεπιλεγμένη τιμή αν η έκφραση στα αριστερά του τελεστή είναιnull.val nonNullLength = nullableString?.length ?: 0 // nonNullLength θα είναι `Int`, 0 αν το nullableString είναι null -
Τελεστής επιβεβαίωσης μη-null (
!!): Μετατρέπει έναν nullable τύπο σε non-nullable. Αν η τιμή είναιnull, ρίχνει μια εξαίρεσηNullPointerException. Χρησιμοποιείται όταν ο προγραμματιστής είναι βέβαιος ότι η τιμή δεν είναιnull.val sureLength = nullableString!!.length // Θα ρίξει NullPointerException αν το nullableString είναι null -
Έλεγχοι με
if: Παραδοσιακός έλεγχος γιαnullμεif. Ο μεταγλωττιστής πραγματοποιεί ένα έξυπνο cast (smart cast) του nullable τύπου σε non-nullable μέσα στο μπλοκif, αν ο έλεγχος περάσει.if (nullableString != null) { val length = nullableString.length // Εδώ το nullableString αντιμετωπίζεται ως String }
Αυτοί οι μηχανισμοί επιτρέπουν τον ρητό χειρισμό των καταστάσεων όπου μια μεταβλητή μπορεί να είναι null, μειώνοντας σημαντικά την πιθανότητα εμφάνισης NullPointerException κατά την εκτέλεση του προγράμματος.