Dart中if else if的替代方案是什么?

7
我想用另一个字符串替换Dart中的URL字符串。 例如:
if (url == "http://www.example.com/1") {
home = "example";
} else if (url == "http://www.example.com/2") {
home = "another example";
}

有没有更简洁且可能更快的方法?我要做这个超过60次..


“更好的方式”高度基于个人观点。更好在哪方面?可读性?可维护性?速度? - Muldec
1
如果有更好的方法,尤其是在代码量更少的情况下,请使用它。 - Jona
好的,你的第二种情况可以完全删除,因为它的条件永远不会成立... - jamesdlin
这只是一个打字错误..当然末尾会有另一个数字。 - Jona
5个回答

7

如果你想减少代码量,可以尝试以下方式:

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

5

我喜欢Muldec的答案,因为我个人觉得switch语句有点难以理解。我也喜欢设置默认值的选项,这样你就可以“重新定义”switch语句了。额外的好处是,你可以将其作为一个表达式内联使用,仍然具有类型安全性...像这样。

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");

案例2的代码可以如下所示:
TValue case2<TOptionType, TValue>(
  TOptionType selectedOption,
  Map<TOptionType, TValue> branches, [
  TValue defaultValue = null,
]) {
  if (!branches.containsKey(selectedOption)) {
    return defaultValue;
  }

  return branches[selectedOption];
}

1

您可以使用switch语句。

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

   case constant_expr2: { 
      //statements; 
   } 
   break; 

   default: { 
      //statements;  
   }
   break; 
} 

参考资料


0

映射

              var mapper = {
                  'discountCode1': 0.5,
                  'discountCode2': 0.7,
                  'discountCode3': 0.8,
                };

功能

             double getDiscount(double price, String discountCode) {
                  if (mapper.containsKey(discountCode)) {
                    return mapper[discountCode]! * price;
                  } else {
                    return price;
                  }
                }

-2
只需将值 "http://www.example.com" 存储在字符串变量中,并每次连接即可。请参考下面的代码。
String originalUrl = 'https://www.example.com';
if (url == originalUrl + '/1') {

}

否则你可以使用Switch Case。 - Ritesh Sharma

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接