博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
陈旧语法密度之三——用直接删除else的方法消除if-else if-else
阅读量:2397 次
发布时间:2019-05-10

本文共 2319 字,大约阅读时间需要 7 分钟。

用直接删除else法消除if-else if-else

这几节先说一些简单的情况,在基本语法的层面,即使是仍然保持面向过程的编码,也能消除。

请看下面的代码:

public String getReversedOperator3() {

if (operator.equals("=")) {        return "!=";    } else if (operator.equals("==")) {        return "!=";    } else if (operator.equals("!=")) {        return "=";    } else if (operator.equals("<")) {        return "!<";    } else if (operator.equals(">")) {        return "!>";    } else if (operator.equals("<=")) {        return "!<=";    } else if (operator.equals(">=")) {        return "!>=";    }    return "?";}

实际上,居然可以直接删除所有else,变成:

public String getReversedOperator4() {    if (operator.equals("=")) {        return "!=";    }    if (operator.equals("==")) {        return "!=";    }    if (operator.equals("!=")) {        return "=";    }    if (operator.equals("<")) {        return "!<";    }    if (operator.equals(">")) {        return "!>";    }    if (operator.equals("<=")) {        return "!<=";    }    if (operator.equals(">=")) {        return "!>=";    }    return "?";}

有人可能会说:“我怎么可能犯这种低级错误!”且慢,请先在自己项目的代码中搜索一下else if再说吧。这种情况在我所看的代码中数量庞大,大约10%~20%的else(包括下面的变形)都可以如此兵不血刃地删除掉。

下面则是一种类似的变形:

public String getReversedOperator1() {    String reversedOperator = null;    if (operator.equals("=")) {        reversedOperator = "!=";    } else if (operator.equals("==")) {        reversedOperator = "!=";    } else if (operator.equals("!=")) {        reversedOperator = "=";    } else if (operator.equals("<")) {        reversedOperator = "!<";    } else if (operator.equals(">")) {        reversedOperator = "!>";    } else if (operator.equals("<=")) {        reversedOperator = "!<=";    } else if (operator.equals(">=")) {        reversedOperator = "!>=";    } else {        reversedOperator = "?";    };    return reversedOperator;}

又有人会说:“这个else没什么大问题,删不删都可以。”这时候我们要回到代码刚开始写的那一天:如果有人实际上写了第二种没有else的代码,我们是否会执意在上面加上个else变成第一种呢?当然不会。

弯路走多了,有时候连直路都不认识了,这才是问题的关键。

所以这本来是一篇如何不写else的文章,因为世间else写的太多了,才变成了删else的文章。

可以因为旧代码没有修改的价值了因此而不修改,但千万不要认为旧代码是好的。否则未来还会继续照样写。

当然在实际的环境中,我们会把他们都删光,否则很难识别未来是否又多了任何else代码。这种态度很像人类对待老鼠、苍蝇、蟑螂的态度:99.999%的上述所谓害虫实际上都不带有致命的病菌,但没有人真的去识别哪只害虫身上可能有病。

一种特殊情况

“如果前面的例子不直接return怎么办?”

这个时候最好封装一个方法,直接给return掉;然后在任何需要这个分支的地方调用这个方法而非拷贝这段if-else if-else代码。否则很快就会遇到最早我们提到的那个问题了:(当我们维护的时候)居然没有一种简单方法确定性地找到所有用过某个分支的地方。

“我拷贝的代码,当然一模一样!怎么会找不到……咦,谁手这么贱,在else  if 中间放了两个空格!”

转载地址:http://otbob.baihongyu.com/

你可能感兴趣的文章
linux在下软件安装-jdk和tomcat安装
查看>>
java框架基础 静态代理和动态代理
查看>>
jQuery ajax开发基于json
查看>>
oracle数据库
查看>>
oracle中间的数据类型
查看>>
vscode利用cmake调试
查看>>
zcash挖矿
查看>>
zcash挖矿指南
查看>>
区块链术语解释
查看>>
./configure,make,make install的作用
查看>>
学术论文录用结果通知(Notification)
查看>>
Theorem等数学化的论述
查看>>
使用HttpClient爬取国内疫情数据
查看>>
引用传递和值传递有什么区别
查看>>
C++从入门到放肆!
查看>>
C++是什么?怎么学?学完了能得到什么?
查看>>
学好C语言,你只需要这几句口诀!
查看>>
选择大于努力!0基础学好C语言编程,首先要掌握的是什么?
查看>>
C语言和其他语言的不得不说的差别!
查看>>
夫妻俩在互联网公司工作,年收入曝光,网友:这么高!
查看>>