Назад к вопросам
Middle
108
questionbank
Какие возможности появились с внедрением Null-safety в Dart?
Sobes Copilot
Получайте ответы в реальном времени
Ответ от нейросети
sobes.tech AI
С внедрением Null-safety в Dart появились следующие возможности:
- Отсутствие ошибок времени выполнения, связанных с null: Компилятор гарантирует, что переменная, объявленная как non-nullable, никогда не будет иметь значения null. Это исключает ошибки типа
NoSuchMethodErrorво время выполнения, которые ранее могли возникать при попытке вызова метода на null-значении. - Явное указание на возможность null: Теперь необходимо явно указывать, может ли переменная иметь значение null, добавляя
?к типу.String? nullableString; // Может быть null String nonNullableString = "Some value"; // Не может быть null - Улучшенная читаемость и предсказуемость кода: Код становится более понятным, так как сразу видно, какие переменные гарантированно не являются null.
- Оптимизация производительности: Компилятор может использовать информацию о nullability для более эффективной компиляции кода.
- Операторы для безопасной работы с null: Появились новые операторы:
?.(null-aware access): Вызывает метод или получает свойство, только если объект не null.String? nullableString = getPotentiallyNullString(); int? length = nullableString?.length; // length будет null, если nullableString равен null??(null-aware assignment): Присваивает значение только если переменная равна null.String? nullable; String nonull = nullable ?? "default"; // nonull будет "default"??=(null-aware assignment): Присваивает значение переменной только если она равна null.String? text; text ??= "hello"; // text станет "hello"!(non-null assertion): Утверждает, что значение не null. Следует использовать с осторожностью, когда разработчик уверен, что значение не null, но компилятор не может это гарантировать.String? nullableValue; // ... (логика, которая гарантирует, что nullableValue не null) String nonNullable = nullableValue!; // Утверждаем, что не null
- Тип
late: Позволяет отложить инициализацию non-nullable переменной до первого обращения.late String initializedLater; void setup() { initializedLater = "Initialized!"; } - Тип
required: Используется в конструкторах и функциях для указания обязательных параметров. В контексте null-safety,requiredделает параметры non-nullable по умолчанию (если тип не помечен?).class MyClass { MyClass({required String name}); }