美文网首页
使用switch(true)代替冗长的if-else

使用switch(true)代替冗长的if-else

作者: wwpeng520 | 来源:发表于2018-08-05 17:39 被阅读0次

今天偶然看到 switch(true) 的写法,第一感觉是有点奇怪,细细一想,发觉这个写法很妙,先上代码:

var num = 25;
switch (true) {
    case num < 0:
        alert("Less than 0.");
        break;
    case num >= 0 && num <= 10:
        alert("Between 0 and 10.");
        break;}
    case num >= 10 && num <= 20:
        alert("Between 10 and 20.");
        break;
    default:
        alert("More than 20.");
}


一般我们的写法都是如下所示。我们根据 expression 的值等于哪个值是做相应的操作,然后跳出 switch 语句。(此时 expression 的值都是确定的几个值)。switch 语句中的每一种情形(case)的含义是:“如果表达式(expression)等于这个值(value),则执行后面的语句(statement)”。这里的表达式我们会习惯性的认为是一个确定的值,而遇到不确定值或者一个取值范围时好像不适用了(其实不是的)。

switch (expression) {
    case value: statement
        break;
    case value: statement
        break;
    case value: statement
        break;
    default: statement
}

此种情况下如果使用 if-else 语句,代码结构如下。代码结构与可读性比 switch 差些,如果判断条件更多时,switch 就更有优势了。从根本上说,switch 语句就是为了让开发人员免于编写像下面这样的代码。

if (expression === 'case1') {
    // do sth...
} else if (expression === 'case1') {
    // do sth...
} else if (expression === 'case1') {
    // do sth...
} else {
    // do sth...
}

// 最常见的是有区间范围的情况
if (num === 0) {
    // do sth...
} else if (num < 10) {
    // do sth...
} else if (num < 100) {
    // do sth...
} else {
    // do sth...
}

所以初学者(我也是)会这样认为:

  • 当 expression 是一个确定的值,且 expression 的值存在较多可能时,选择 switch;
  • 当需要对 expression 的值判断多个范围(而不是具体值)时,选用 if-else 语句。

回到我们开头的那段代码,这个例子之所以给 switch 语句传递表达式 true,是因为每个 case 值都可以返回一个布尔值。这样,每个 case 按照顺序被求值,直到找到匹配的值或者遇到 default 语句为止。

这样我们不难发现上面的结论都是错的,switch 语句也可使用范围判定的语句,这样就可以代替冗长的 if-else 语句了。

相关文章

  • 使用switch(true)代替冗长的if-else

    今天偶然看到 switch(true) 的写法,第一感觉是有点奇怪,细细一想,发觉这个写法很妙,先上代码: 一般我...

  • 第4篇,控制流

    if-else 请看下面的用例: 注意: Python中没有switch语句,我们可以使用if-else来完成对应...

  • 2. 空间换时间问题

    1. switch-case与if-else switch-case的效率比if-else的效率要高很多,属于典型...

  • 60 - 策略模式

    在实际的项目开发中,策略模式是比较常用的。最常见的应用场景是,利用它来避免冗长的 if-else 或 switch...

  • 使用Switch(true)模式

    在做多条件时,我一般会尽量使用switch,但是判断的条件需要表达式时,就只能灰溜溜的去使用if-elseif-e...

  • R 数据管理

    for, while, if-else,ifelse,switch 实例

  • Kotlin常用语法

    java中的switch kotlin使用when代替java中的switch,但比switch强大的多 for循环

  • if-else与switch的比较

    if-else与switch的比较 相同点:都可以实现多分支结构 不同点:if-else可以处理数据 switch...

  • Switch,While 循环,For 循环

    PHP Switch 语句:语句用于基于不同条件执行不同动作,使用 Switch 语句可以避免冗长的 if..el...

  • Swift使用(二)流程控制,for-in、if-else、wh

    Swift使用(二)流程控制,for-in、if-else、while、switch 很多人都说OC的语法很奇怪,...

网友评论

      本文标题:使用switch(true)代替冗长的if-else

      本文链接:https://www.haomeiwen.com/subject/uknbvftx.html