Junior
Τι είναι η ασφάλεια null (null safety) στη Dart;
sobes.tech AI
Απάντηση από AI
Η ασφάλεια null είναι ένα σύστημα στη Dart που βοηθά στην πρόληψη σφαλμάτων κατά την εκτέλεση που σχετίζονται με την αποσύνδεση null. Ο μεταγλωττιστής αναλύει τον κώδικα και καθορίζει αν μια μεταβλητή μπορεί να περιέχει μια τιμή null. Αν μια μεταβλητή δηλωθεί ως μη επιτρεπτή για null, ο μεταγλωττιστής εγγυάται ότι ποτέ δεν θα της ανατεθεί null.
Βασικές πτυχές της ασφάλειας null:
- Ενσωματωμένος τύπος μη null: Από προεπιλογή, οι τύποι δεν επιτρέπουν null (non-nullable).
// int δεν μπορεί να είναι null int count = 0; - Τύπος που επιτρέπει null: Για να δηλώσετε ρητά ότι μια μεταβλητή μπορεί να είναι null, χρησιμοποιείται το ερωτηματικό
?:// String? μπορεί να είναι null String? name; - Τελεστής
!(δήλωση μη null): Χρησιμοποιείται για να δηλώσει ότι μια έκφραση που επιτρέπει null δεν είναι null. Πρέπει να χρησιμοποιείται με προσοχή, καθώς αν είναι null, ρίχνει εξαίρεση.String? nullableName = 'Flutter'; // Χρησιμοποιούμε !, γνωρίζοντας ότι το nullableName δεν είναι null σε αυτό το πλαίσιο print(nullableName!.length); - Τελεστής
?(null-aware operators): Χρησιμοποιείται για ασφαλή πρόσβαση σε μέλη ή κλήσεις μεθόδων σε εκφράσεις που επιτρέπουν null.?.(null-aware πρόσβαση):String? nullableString; // Αν το nullableString δεν είναι null, θα καλεστεί το length, αλλιώς το αποτέλεσμα θα είναι null int? length = nullableString?.length;??(αν null):String? serverName; // Αν το serverName δεν είναι null, χρησιμοποιείται η τιμή του, αλλιώς 'Guest' String displayName = serverName ?? 'Guest';??=(αν null, ανάθεση):String? cache; // Αν το cache είναι null, του ανατίθεται το 'Loading...' cache ??= 'Loading...';
- Ανάλυση ροής: Ο μεταγλωττιστής Dart αναλύει τον κώδικα και καθορίζει πότε μια μεταβλητή που επιτρέπει null δεν είναι null σε ένα συγκεκριμένο μέρος του κώδικα, επιτρέποντάς της να χρησιμοποιηθεί ως μη null.
String? greeting = getGreeting(); // Ο μεταγλωττιστής γνωρίζει ότι το greeting δεν είναι null μετά από αυτόν τον έλεγχο if (greeting != null) { print(greeting.toUpperCase()); // Μπορεί να χρησιμοποιηθεί με ασφάλεια το toUpperCase() }
Πλεονεκτήματα της ασφάλειας null:
- Μείωση σφαλμάτων: Προλαμβάνει το NullReferenceException (ή παρόμοια) κατά την εκτέλεση.
- Βελτιωμένη αναγνωσιμότητα: Δείχνει ρητά αν μια μεταβλητή μπορεί να είναι null.
- Αυξημένη απόδοση: Ο μεταγλωττιστής μπορεί να κάνει βελτιστοποιήσεις γνωρίζοντας ποιες μεταβλητές δεν είναι null εγγυημένα.
Η ασφάλεια null εισήχθη στη Dart 2.12.