Введение в обобщения в Dart
Списки строк и списки чисел уже описывают как
List<String> и List<int>. Отдельная
задача - написать одну и ту же логику для разных
типов элемента без копирования кода под каждый
вариант.
Часто нужен первый элемент списка или пустое значение, если список пуст. Для строк и для чисел алгоритм совпадает, меняется только тип элемента. Здесь помогает параметр типа - имя, которое подставляется вместо конкретного типа в объявлении функции или класса.
Буква T в угловых скобках после имени
функции объявляет такой параметр. В сигнатуре
List<T> и результат T? согласованы
с этим именем - компилятор связывает их при вызове
с фактическим типом аргумента.
Для списка строк функция возвращает строку или
null, для списка чисел - число или
null. Одно объявление покрывает оба случая,
потому что T каждый раз выводится из
переданного списка или задается явно в угловых
скобках у имени функции.