Пример ответа
Коротко: Null safety — это система типов в Dart, которая предотвращает ошибки, связанные с null-значениями, делая типы не-nullable по умолчанию и требуя явного указания nullable-типов через ?. В моём опыте разработки на Flutter это значительно повысило надёжность приложений, сократив runtime-ошибки.
Ключевые идеи:
- Типы по умолчанию не допускают null, что устраняет ошибки 'null reference' на этапе компиляции
- Для nullable-переменных используется ? (например, String?), и доступ к ним требует проверки или операторов вроде ??, ?., или !
- Система включает flow analysis, который автоматически продвигает типы после проверок, упрощая код
Пример: Например, при объявлении String name = 'John' нельзя присвоить null, а для String? nullableName = null требуется обработка, как в print(nullableName?.length ?? 0), чтобы избежать сбоев.
Пример использования null safety в Dart с nullable и non-nullable типами
dart
void main() {
// Non-nullable тип — ошибка компиляции при присвоении null
String nonNullable = 'Hello';
// nonNullable = null; // Ошибка: A value of type 'Null' can't be assigned
// Nullable тип с ?
String? nullable = null;
nullable = 'World';
// Обработка nullable значений
print(nullable?.length); // Используем ?. для безопасного доступа
print(nullable ?? 'Default'); // Используем ?? для значения по умолчанию
// Flow analysis: после проверки тип продвигается
if (nullable != null) {
print(nullable.length); // Без ?., так как nullable теперь non-nullable в этом блоке
}
// Явное утверждение с ! (осторожно, может вызвать ошибку, если null)
String forced = nullable!; // Утверждаем, что nullable не null
print(forced);
}
Вопросы для интервьюера:
- Как вы мигрировали старый код на null safety? — Я использовал dart migrate для автоматического анализа и конвертации, затем вручную проверял спорные места, особенно с внешними пакетами, и добавлял аннотации @required или required для параметров.
- Какие операторы null safety вы чаще всего применяете в Flutter-виджетах? — В виджетах я часто использую ?. для безопасного доступа к свойствам (например, text?.length), ?? для значений по умолчанию (как в Text(data ?? 'Loading')), и late для отложенной инициализации, когда уверен в значении до использования.
Практический совет (на неделю):
- Начните с включения null safety в новом проекте Flutter через Dart 2.12+ и используйте dart analyze для проверки кода
- При работе с nullable данными из API, всегда обрабатывайте возможные null с помощью ?? или проверок, чтобы избежать сбоев в UI
Flutter Developer
Общий
40%