Junior
Какво е нулева безопасност (null safety) в Dart?
sobes.tech AI
Отговор от AI
Нулевата безопасност е система в Dart, която помага да се предотвратят грешки по време на изпълнение, свързани с разыменуване на null. Компилаторът анализира кода и определя дали променливата може да съдържа стойност null. Ако променливата е обявена като не допускаща null, компилаторът гарантира, че никога няма да бъде присвоена стойност null.
Основни аспекти на нулевата безопасност:
- Неявен тип без null: По подразбиране типовете не позволяват null (non-nullable).
// int не може да бъде null int count = 0; - Тип, допускащ null: За явно указване, че променливата може да бъде null, се използва въпросителен знак
?:// String? може да бъде null String? name; - Оператор
!(non-null assertion): Използва се за потвърждение, че изразът, допускащ null, не е null. Трябва да се използва с внимание, тъй като при null ще се хвърли изключение.String? nullableName = 'Flutter'; // Използваме !, знаейки, че nullableName не е null в този контекст print(nullableName!.length); - Оператор
?(null-aware оператори): Използва се за безопасен достъп до членове или извиквания на методи върху изрази, допускащи 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...';
- Анализ на поток (Flow Analysis): Компилаторът Dart анализира кода и определя кога променливата, допускаща null, е гарантирано не null в определена част от кода, позволявайки да се използва като не допускаща null.
String? greeting = getGreeting(); // Компилаторът знае, че greeting не е null след тази проверка if (greeting != null) { print(greeting.toUpperCase()); // Може безопасно да се използва toUpperCase() }
Предимства на нулевата безопасност:
- Намаляване на грешките: Предотвратява NullReferenceException (или подобни) по време на изпълнение.
- Подобрена четливост: Явно указва дали променливата може да бъде null.
- Повишена производителност: Компилаторът може да извършва оптимизации, знаейки кои променливи са гарантирано не null.
Нулевата безопасност беше въведена в Dart 2.12.