Задачи на null-безопасность в Dart. Часть 2
Дана следующая строка:
String? str = 'test';
Убедитесь, что переменная не null, и принудительно разверните её оператором !, затем выведите длину.
Дана следующая переменная:
String? str = null;
Объясните, почему оператор ! опасен на nullable-значении, и покажите безопасную альтернативу через ?? или if (str != null).
Дан следующий код:
class User {
Address? address;
}
class Address {
City? city;
}
class City {
String? name;
}
User? user = User()
..address = (Address()..city = (City()..name = 'Москва'));
Выведите имя города через цепочку null-aware доступа: user?.address?.city?.name. Затем задайте user = null и убедитесь, что выражение возвращает null без ошибки.
Сделайте функцию String trimOrEmpty(String? value): если аргумент не null, верните строку без пробелов по краям через trim(), иначе — пустую строку ''.
Дана следующая переменная:
int? num = 10;
С помощью проверки if (num != null) (promotion) выведите удвоенное значение. Затем присвойте num = null и через ??= задайте значение по умолчанию 0.
Дан следующий список:
List<String?> list = ['a', null, 'b', null, 'c'];
Получите List<String> без null: через whereType<String>() или через .nonNulls (Dart 3). Выведите результат.
Дана следующая переменная:
List<int>? list = [1, 2, 3];
Проверьте через list?.contains(2) ?? false, есть ли элемент 2. Затем присвойте list = null и повторите проверку.
Сделайте функцию void printLength(String? str): если str == null — сразу выйдите из функции через return; иначе выведите длину. Покажите, что после проверки тип промоутится до String.
Сделайте функцию String? joinNullable(String? a, String? b), которая склеивает две nullable-строки через пробел. Если обе строки null — верните null; если одна из них null — верните вторую без лишнего пробела.
// примеры ожидаемого поведения:
// joinNullable('hello', 'world') -> 'hello world'
// joinNullable('hello', null) -> 'hello'
// joinNullable(null, null) -> null
Дана следующая строка:
String? raw = '42';
Преобразуйте String? в int? через int.tryParse(raw ?? ''). Затем повторите для raw = 'abc' и для raw = null — в обоих случаях должен получиться null.