#dart #flutter #dynamic-typing
#dart #флаттер #динамический ввод
Вопрос:
У меня есть карта с динамическими значениями, одним из которых может быть int
, string
или null
(т. е. несуществующий ключ).
Я хочу сохранить это значение в int
переменной. Синтаксический анализ, который я придумал, оказался довольно громоздким:
Map<String, dynamic> map = {'maxposts': null}; // or 23 or '42'
// Try to parse an int value or fall back to 0
int maxposts = (map['maxposts'] is int)
? map['maxposts']
: int.tryParse(map['maxposts'] ?? '0') ?? 0;
Есть ли более приятный способ выполнить такой синтаксический анализ «попробовать-запасной вариант»?
Комментарии:
1. Я не думаю, что есть.
Ответ №1:
Вы можете абстрагировать операцию в функцию типа
int intOrStringValue(dynamic o) {
if (o is String) o = int.tryParse(o);
return o ?? 0;
}
или
int intOrStringValue(dynamic o) =>
(o is String ? int.tryParse(o) : o) ?? 0;
Оно становится более читаемым, когда вы не повторяете map['maxposts']
выражение по всей логике.