Безопасный вызов у объектов в Dart
Оператор ?. обращается к полю или методу только
если ссылка на объект не null. Иначе результат
всего выражения - null:
class Post {
String title;
Post(this.title);
}
Создадим объект и выведем его:
Post? post = Post("note");
Post? empty = null;
print(post?.title);
print(empty?.title);
У вложенного объекта поле тоже может быть пустым.
Несколько ?. подряд образуют цепочку: при первом
null дальнейшие шаги не выполняются:
class City {
String name;
City(this.name);
}
class Post {
City? city;
Post(this.city);
}
Создадим объекты и выведем результат:
var withCity = Post(City("Paris"));
var noCity = Post(null);
print(withCity.city?.name);
print(noCity.city?.name);
Метод nullable-объекта вызывают так же - с ?.
перед именем метода:
class City {
String name;
City(this.name);
String label() {
return "city: $name";
}
}
class Post {
City? city;
Post(this.city);
}
Создадим объект и вызовем метод:
var post = Post(null);
print(post.city?.label());
Даны классы City и Post из урока.
Переменная post типа Post? равна null.
Выведите название города одним выражением.
Сделайте класс Profile с методом title().
Сделайте класс Account с полем profile
типа Profile?. Выведите результат title()
для аккаунта без профиля.