Junior
Czym jest bezpieczeństwo null (null safety) w Dart?
sobes.tech AI
Odpowiedź od AI
Bezpieczeństwo null to system w Dart, który pomaga zapobiegać błędom podczas wykonywania związanym z dereferencją null. Kompilator analizuje kod i określa, czy zmienna może przechowywać wartość null. Jeśli zmienna jest zadeklarowana jako nie dopuszczająca null, kompilator gwarantuje, że nigdy nie zostanie jej przypisana wartość null.
Główne aspekty bezpieczeństwa null:
- Domyślny typ nie null: Domyślnie typy nie dopuszczają null (non-nullable).
// int nie może być null int count = 0; - Typ dopuszczający null: Aby jawnie wskazać, że zmienna może być null, używa się znaku zapytania
?:// String? może być null String? name; - Operator
!(potwierdzenie nie null): Używany do potwierdzenia, że wyrażenie dopuszczające null nie jest null. Należy używać ostrożnie, ponieważ jeśli jest null, wyrzuca wyjątek.String? nullableName = 'Flutter'; // Używamy !, wiedząc, że nullableName nie jest null w tym kontekście print(nullableName!.length); - Operator
?(operator null-aware): Używany do bezpiecznego dostępu do członków lub wywoływania metod na wyrażeniach dopuszczających null.?.(bezpieczny dostęp):String? nullableString; // Jeśli nullableString nie jest null, wywoła length, w przeciwnym razie wynik będzie null int? length = nullableString?.length;??(jeśli null):String? serverName; // Jeśli serverName nie jest null, używa jego wartości, w przeciwnym razie 'Guest' String displayName = serverName ?? 'Guest';??=(jeśli null, przypisz):String? cache; // Jeśli cache jest null, przypisuje 'Loading...' cache ??= 'Loading...';
- Analiza przepływu: Kompilator Dart analizuje kod i określa, kiedy zmienna dopuszczająca null na pewno nie jest null w określonej części kodu, pozwalając na jej użycie jako nie null.
String? greeting = getGreeting(); // Kompilator wie, że greeting nie jest null po tej kontroli if (greeting != null) { print(greeting.toUpperCase()); // Bezpieczne użycie toUpperCase() }
Zalety bezpieczeństwa null:
- Zmniejszenie błędów: Zapobiega NullReferenceException (lub podobnym) podczas działania.
- Lepsza czytelność: Wyraźnie wskazuje, czy zmienna może być null.
- Zwiększona wydajność: Kompilator może wykonywać optymalizacje, wiedząc, które zmienne na pewno nie są null.
Bezpieczeństwo null zostało wprowadzone w Dart 2.12.