dart alternate for a lot of if elseiif

5,706

Solution 1

If you want less code, you can do somtehing like this :

homes = {
  "http://www.example.com/1": "example",
  "http://www.example.com/2": "another example",
  "http://www.example.com/3": "yet another one",
};
home = homes[url];

Solution 2

I like Muldec's answer as I personally find switch statements to be a bit awkward to read. I also like the option of having a default so you could 'kind of' redefine the switch statement. The additional benefit is that you can use it inline as an expression and it is still typesafe...like this.

case2(myInputValue,
  {
    "http://www.example.com/1": "example",
    "http://www.example.com/2": "another example",
    "http://www.example.com/3": "yet another one",
  }, "www.google");

The case2 code could be

TValue case2<TOptionType, TValue>(
  TOptionType selectedOption,
  Map<TOptionType, TValue> branches, [
  TValue defaultValue = null,
]) {
  if (!branches.containsKey(selectedOption)) {
    return defaultValue;
  }

  return branches[selectedOption];
}

Solution 3

You can use a switch statement.

switch(variable_expression) { 
   case constant_expr1: { 
      // statements; 
   } 
   break; 

   case constant_expr2: { 
      //statements; 
   } 
   break; 

   default: { 
      //statements;  
   }
   break; 
} 

References

Share:
5,706
Jona
Author by

Jona

Updated on December 12, 2022

Comments

  • Jona
    Jona over 1 year

    I want to replace an URL String in Dart with another String. Example:

    if (url == "http://www.example.com/1") {
    home = "example";
    } else if (url == "http://www.example.com/2") {
    home = "another example";
    }
    

    Isn't there a better way with less code and maybe faster? I'd have to do this over 60 times..