Назад к вопросам
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});
    }