Junior
Čo je nulová bezpečnosť (null safety) v Dart?
sobes.tech AI
Odpoveď od AI
Nulová bezpečnosť je systém v Dart, ktorý pomáha predchádzať chybám počas behu spojeným s dereferencovaním null. Kompilátor analyzuje kód a určuje, či premenná môže obsahovať hodnotu null. Ak je premenná deklarovaná ako neumožňujúca null, kompilátor zaručuje, že jej nikdy nebude priradená hodnota null.
Hlavné aspekty nulovej bezpečnosti:
- Nezrejmý typ bez null: Predvolene typy neumožňujú null (non-nullable).
// int nemôže byť null int count = 0; - Typ umožňujúci null: Pre explicitné označenie, že premenná môže byť null, sa používa otáznik
?:// String? môže byť null String? name; - Operátor
!(non-null assertion): Používa sa na potvrdenie, že výraz umožňujúci null nie je null. Je potrebné používať opatrne, pretože pri null dôjde k výnimke.String? nullableName = 'Flutter'; // Používame !, vedomí si, že nullableName nie je null v tomto kontexte print(nullableName!.length); - Operátor
?(null-aware operátory): Používa sa pre bezpečný prístup ku členom alebo volaniam metód na výrazoch umožňujúcich null.?.(null-aware prístup):String? nullableString; // Ak nullableString nie je null, bude volaná length, inak výsledok bude null int? length = nullableString?.length;??(ak null):String? serverName; // Ak serverName nie je null, použije sa jeho hodnota, inak 'Guest' String displayName = serverName ?? 'Guest';??=(ak null, priradiť):String? cache; // Ak cache je null, priradí sa 'Loading...' cache ??= 'Loading...';
- Analýza toku (Flow Analysis): Kompilátor Dart analyzuje kód a určuje, kedy premenná umožňujúca null je garantovane nenull v určitej časti kódu, čo umožňuje jej použitie ako neumožňujúcej null.
String? greeting = getGreeting(); // Kompilátor vie, že greeting nie je null po tejto kontrole if (greeting != null) { print(greeting.toUpperCase()); // Môže byť bezpečne použitá toUpperCase() }
Výhody nulovej bezpečnosti:
- Zníženie chýb: Predchádza NullReferenceException (alebo podobným) počas behu.
- Vylepšená čitateľnosť: Výslovne ukazuje, či premenná môže byť null.
- Zvýšený výkon: Kompilátor môže vykonávať optimalizácie, vedomý si, ktoré premenné sú garantovane nenull.
Nulová bezpečnosť bola zavedená v Dart 2.12.