我认为有一种趋势——至少在初级开发人员中——认为代码越短越好。但情况并非总是如此。
我认为有一种趋势——至少在初级开发人员中——认为代码越短越好。(在我之后重复:更短并不总是更好。)我当然会成为这种思路的牺牲品,即使我知道这是错误的。这就是为什么当我发现它时,我认为隐含else是自切片面包以来最好的东西。
直到一位高级开发人员对我进行了其他教育。
本·怀特在Unsplash上拍摄。这是我被吓坏了。
这是什么隐含的 ‘ else’?
如果您已经熟悉该概念,请跳至下一部分。对于其他所有人:
使用隐式elsewithif语句利用了return语句结束函数执行这一事实。在某些情况下,这可以让我们消除else语句,从而缩短代码。
看看下面的玩具giveMeFood功能giveMeFoodImplicit。从技术上讲,我们不需要 an,else因为如果你给我吃巧克力(只是说),该函数会提前返回’yum’并停止执行。如果你没有,那么它会返回’no Thanks’。
两个函数——一个带有显式“else”,一个带有隐式“else”
事实上,我可以添加更多if…return语句来代替if…else,最后添加一个默认值return!看起来更干净,不是吗?这是否意味着我们可以else永远吻别?
使用 if…return 代替 if…else
为什么以及何时避免隐含’else’
肯定有使用隐式的场合else,但这是高级开发人员向我建议的:
这是一个例子来说明他的意思。
假设我们有一个函数可以检查用户选择的国家,并返回一个拨号代码。目前,checkCountryCode仅用于处理”United States”和”United Kingdom”作为参数。else使用隐式完全省略第二个条件并缩短代码是很诱人的。
checkCountryCode 函数最初仅用于处理两个输入,因此很想使用隐式 else
如果我们以后想要扩展该功能以处理更多国家(例如乌拉圭和乌兹别克斯坦),就会出现问题。很容易忘记或混淆隐式return应该处理的内容(在这种情况下,+44如果输入是,它应该返回”United Kingdom”)!
当我们开始扩展函数以处理更多国家/地区时,很容易忘记隐含的 else 应该处理什么条件!
现在这是用显式elses 重写的代码。它肯定会更长,但现在如果有人经过我们尚未考虑的国家/地区,则会引发错误——如果此函数嵌套在更大的代码库中,这将特别有用。
这个实现看起来有点冗长,但它更具可读性,因此更容易扩展
是的,你可以在没有 final 的情况下抛出错误else,但这是我们需要问自己的基本问题:
省略elses left, right 和 center真的让我的代码更容易理解吗?如果有一堆if…returns然后throw在底部突然出现一个声明,其他人会很直观地阅读吗?