#dart
#dart
Вопрос:
Я хотел бы обобщить приведенный ниже код, чтобы сделать его меньше и красивее.
У меня есть 5 моделей ( User
, Group
, Event
, Member
, Appearance
), три показаны ниже.
Я хотел бы упростить код.
String getId(uri) {
String pathSegment;
if (uri.pathSegments.length >= 2) {
pathSegment = uri.pathSegments[1];
} else {
return null;
}
switch (resource) {
case 'users':
for (User user in models[resource]) {
if (user.id == pathSegment) {
return pathSegment;
} else {
return null;
}
}
break;
case 'groups':
for (Group group in models[resource]) {
if (group.id == pathSegment) {
return pathSegment;
} else {
return null;
}
}
break;
case 'events':
for (Event event in models[resource]) {
if (event.id == pathSegment) {
return pathSegment;
} else {
return null;
}
}
break;
default:
break;
}
return null;
}
Комментарии:
1. Вы можете заменить весь свой блок switch-case только этим:
return ((models[resource].firstWhere((it) => it.id == pathSegment, orElse: () => null)) != null) ? pathSegment : null;
Ответ №1:
Если ваши User
, Group
, и Event
имеют общий id
, то вы можете упростить свой код с помощью dynamic
type . Смотрите соответствующую документацию.
String getId(uri) {
String pathSegment;
if (uri.pathSegments.length >= 2) {
pathSegment = uri.pathSegments[1];
} else {
return null;
}
return _getIdFromItems(models[resource], pathSegment);
}
String _getIdFromItems(List<dynamic> items, String pathSegment) {
for (dynamic item in items) {
if (item.id == pathSegment) {
return pathSegment;
} else {
return null;
}
}
return null;
}
Комментарии:
1. Обратите внимание, что это предполагает, что не существует других значений для
resource
whereitem.id == pathSegment
, которые могли бы быть удовлетворены. В исходном коде возвращалось бы значение,resource
отличное от'users'
,'groups'
, и'events
‘null
.