#dart
#dart
Вопрос:
Я хотел бы убедиться, что этот код не может существовать в кодовой базе: final Function onPress
вместо этого он должен быть final void Function() onPress
В настоящее время у меня есть следующие правила, и, похоже, я не могу найти правило для получения этого:
analyzer:
exclude:
- lib/**/*.g.dart
strong-mode:
implicit-casts: false
implicit-dynamic: false
linter:
rules:
always-specify-types: true
always_declare_return_types: true
Комментарии:
1. Я не верю, что оно существует. Хотя лично я бы тоже отказался от этого соглашения в пользу typedefs . (У этого, в частности, есть существующий typedef в вызываемой платформе Flutter
VoidCallback
.)2. Спасибо. Я считаю, что определения типов обычно просто препятствуют удобочитаемости, но мы используем существующие, когда они понятны, например, VoidCallback .
3. Я думаю, что определение переменной с помощью typedef намного более читабельно, чем, например
final Future<Map<String, U>> Function<T, U>(List<List<T>>, int, int, bool) listConfigurator;
4. Я тоже, так что я, вероятно, использовал бы его в этом случае. С другой стороны, typedef для
bool Function()
orvoid Function(bool)
кажется почти полностью бессмысленным и просто добавляет связывание / шаблон без всякой причины. И эти типы простых обработчиков, как правило, составляют около 95% от того, что я определяю, когда это не VoidCallback.5. Вы используете описательный typedef по той же причине, по которой вы используете описательное имя для переменной: оно дает четкое описание того, для чего будет использоваться функция, вместо общей подписи функции. И я бы вряд ли назвал одну строку кода, которая в основном состоит из сигнатуры функции, которую вам все равно нужно вводить, чрезмерным количеством шаблонов, на самом деле я бы сказал, что более шаблонно вводить подпись вручную каждый раз. (И typedefs — это просто сопоставители для сигнатур функций, а не типы сами по себе, поэтому я бы тоже не назвал это связью.)