Nullable-параметр в Dart
Запись T в объявлении сама по себе не
допускает null: подставленный тип
должен быть ненулевым, если только тип явно
не написали T? в нужном месте сигнатуры.
Функция может искать элемент в списке и не
находить его - тогда результат помечают
как nullable через T?, а список
остается List<T>:
T? findFirst<T>(List<T> list, bool Function(T) match) {
for (final item in list) {
if (match(item)) {
return item;
}
}
return null;
}
final nums = [2, 4, 6];
print(findFirst(nums, (n) => n > 10));
print(findFirst(nums, (n) => n == 4));
Если бы параметр типа объявили как T?
в угловых скобках, смысл был бы другой: сам
T уже включал бы null, и List<T>
хранил бы nullable-элементы. Сравните с
функцией, которая возвращает строго T
и завершает программу с ошибкой, когда список
пуст:
T firstStrict<T>(List<T> list) {
if (list.isEmpty) {
throw StateError("empty");
}
return list[0];
}
final words = ["io", "api"];
print(firstStrict(words));
Объявите функцию, которая возвращает последний
элемент списка или null для пустого
списка. Проверьте на пустом списке строк
и на списке из одного слова "go",
оба результата выведите.
Объявите функцию, которая возвращает первый
элемент списка и завершает программу с
ошибкой, если список пуст. Для списка
7, 8 выведите полученное
число.