Timo Müller
Timo Müller

Reputation: 17

Simplify a switch statement

I would like to sum up the code below to make it less and more beautiful.

I have 5 models (User, Group, Event, Member, Appearance), three shown below.

I’d like to simplify the code.

  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;
  }

Upvotes: 0

Views: 87

Answers (1)

ישו אוהב אותך
ישו אוהב אותך

Reputation: 29783

If your User, Group, and Event have a common id, then You can simplify your code by using dynamic type. See related documentation.

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;
}

Upvotes: 1

Related Questions