Junior
Co je nulová bezpečnost (null safety) v Dart?
sobes.tech AI
Odpověď od AI
Nulová bezpečnost je systém v Dart, který pomáhá předcházet chybám během běhu souvisejícím s dereferencí null. Kompilátor analyzuje kód a určuje, zda proměnná může obsahovat hodnotu null. Pokud je proměnná deklarována jako neumožňující null, kompilátor zaručuje, že jí nikdy nebude přiřazena hodnota null.
Hlavní aspekty nulové bezpečnosti:
- Nezřejmý typ bez null: Výchozí typy neumožňují null (non-nullable).
// int nemůže být null int count = 0; - Typ umožňující null: Pro explicitní označení, že proměnná může být null, se používá otazník
?:// String? může být null String? name; - Operátor
!(non-null assertion): Používá se k potvrzení, že výraz umožňující null není null. Je třeba používat opatrně, protože při null dojde k výjimce.String? nullableName = 'Flutter'; // Používáme !, vědomi si, že nullableName není null v tomto kontextu print(nullableName!.length); - Operátor
?(null-aware operátory): Používá se pro bezpečný přístup ke členům nebo volání metod na výrazech umožňujících null.?.(null-aware přístup):String? nullableString; // Pokud nullableString není null, bude volána length, jinak výsledek bude null int? length = nullableString?.length;??(pokud null):String? serverName; // Pokud serverName není null, použije se jeho hodnota, jinak 'Guest' String displayName = serverName ?? 'Guest';??=(při null přiřadit):String? cache; // Pokud cache je null, přiřadí se jí 'Loading...' cache ??= 'Loading...';
- Flow Analysis (Analýza toku): Kompilátor Dart analyzuje kód a určuje, kdy proměnná umožňující null je garantovaně nenull v určité části kódu, což umožňuje její použití jako neumožňující null.
String? greeting = getGreeting(); // Kompilátor ví, že greeting není null po této kontrole if (greeting != null) { print(greeting.toUpperCase()); // Může být bezpečně použit toUpperCase() }
Výhody nulové bezpečnosti:
- Snížení chyb: Předchází NullReferenceException (nebo podobným) během běhu.
- Vylepšená čitelnost: Výslovně ukazuje, může-li proměnná být null.
- Zvýšený výkon: Kompilátor může provádět optimalizace s vědomím, které proměnné jsou garantovaně nenull.
Nulová bezpečnost byla zavedena v Dart 2.12.