Верхняя граница в Dart
Параметр типа T сам по себе не говорит,
какие операции разрешены над значением. Верхняя
граница записывается через extends:
T extends Comparable<T> означает, что под
T допустим только тип, который реализует
этот интерфейс или наследует класс.
Функция максимума из двух значений опирается
на сравнение через Comparable:
T maxOf<T extends Comparable<T>>(T a, T b) {
return a.compareTo(b) >= 0 ? a : b;
}
print(maxOf(3, 7));
print(maxOf("beta", "alpha"));
Внутри тела доступен метод compareTo для
типа T, потому что граница гарантирует
поддержку Comparable. Без extends
такой вызов компилятор отклонит:
bool isOrdered<T extends Comparable<T>>(List<T> values) {
for (var index = 1; index < values.length; index++) {
if (values[index - 1].compareTo(values[index]) > 0) {
return false;
}
}
return true;
}
print(isOrdered([1, 2, 3]));
print(isOrdered(["a", "c", "b"]));
Объявите функцию, которая возвращает меньшее
из двух значений с границей Comparable.
Сравните 15 и 8 и выведите
результат.
Сделайте функцию, которая проверяет, отсортирован
ли список по возрастанию. Проверьте список
"aa", "bb", "cc" и выведите ответ.