Проанализировать dynamic как int или вернуться к значению по умолчанию

#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'] выражение по всей логике.