Назад к вопросам
Junior
231
questionbank
Что такое нулевая безопасность (null safety) в Dart?
Sobes Copilot
Получайте ответы в реальном времени
Ответ от нейросети
sobes.tech 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 operators): Используется для безопасного доступа к членам или вызовам методов null-допускающих выражений.?.(null-aware access):String? nullableString; // Если nullableString не null, будет вызвана length, иначе результат будет null int? length = nullableString?.length;??(if null):String? serverName; // Если serverName не null, используется его значение, иначе 'Guest' String displayName = serverName ?? 'Guest';??=(if null assign):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.