以这种方式使用 if/else if/else 是一种好习惯吗?

Posted

技术标签:

【中文标题】以这种方式使用 if/else if/else 是一种好习惯吗?【英文标题】:Is using if/else if/else this way a good practice? 【发布时间】:2015-05-06 08:55:15 【问题描述】:

我正在开发一个我们从以前的供应商那里继承的应用程序以及客户端 javascript 中的许多地方我看到这样的内容:

if (self.DESIGNEE_TYPE_SCREEN_ROUTE_REGEX.test(url)) 
    goToSelectDesigneeType.call(self);
 else if (self.FUNCTION_CODES_SCREEN_ROUTE_REGEX.test(url)) 
    goToSelectFunctionCodes.call(self);
 else if (self.DISCIPLINE_SCREEN_ROUTE_REGEX.test(url)) 
    goToSelectDiscipline.call(self);
 else 
    goToSelectDesigneeType.call(self);
 else ...

这用于进入工作流程中的下一步,它工作正常,但它的某些内容并不适合我。这很常见吗,还是有更好的方法来做同样的事情?

【问题讨论】:

强烈建议您使用switch语句。 如果这是有效的代码,你最好在codereview.stackexchange.com Switch 语句要好得多。此外,在 if / if else / else 块中只能有一个 else。 我认为这会对您有所帮助。 ***.com/questions/2922948/… 您可以创建一个数组,其中每个元素都包含一个正则表达式和要调用的函数,然后对其进行迭代,直到找到匹配项;但我怀疑这是否值得。 【参考方案1】:

你可以在这里使用switch(true) idiom。

switch(true) 
  case self.DESIGNEE_TYPE_SCREEN_ROUTE_REGEX.test(url) :
    goToSelectDesigneeType.call(self);
    break;
  case self.FUNCTION_CODES_SCREEN_ROUTE_REGEX.test(url) :
    goToSelectFunctionCodes.call(self);
    break;
  case self.DISCIPLINE_SCREEN_ROUTE_REGEX.test(url) :
    goToSelectDiscipline.call(self);
    break;
  default :
    goToSelectDesigneeType.call(self);

只是我的意见,这更容易阅读。

【讨论】:

以上是关于以这种方式使用 if/else if/else 是一种好习惯吗?的主要内容,如果未能解决你的问题,请参考以下文章

if...else代码优化

通过 IF Else 语句以编程方式使 iPhone 振动 [重复]

带有 if else 的 Pandas 列表达式

面试官:你写的if、else太多啦

利用策略模式代替if else

python 中 if 的用法(if else, if not, elif)