全文共1634字,预计学习时长5分钟
来源:Pexels
使用提前返回(early returns)还是不使用提前返回,这是个问题,两者都有其缘由。
关于使用提前返回,程序员往往有很强的个人偏好。有些人从不使用,另一些人却对此执念很深。但除了个人编程风格外,还有别的其他原因吗?
本文中,小芯将和大家一起讨论可以在代码中使用提前返回的原因,以及为什么一些程序员不选择使用提前返回。
在开始深入探讨提前返回这个话题之前,我们首先要了解一下“提前返回到底是什么?”
提前返回是指编写的函数能在结尾处返回预期结果。
在函数中,其余代码应尽快触发终端,防止偏离函数目的。
提前返回的运行正如其名所述。下面就是提前返回的运行模式:
functionsomeFunction(someCondition) { if (!someCondition) { return; } // Do something}
但和往常一样,在编程中,一个问题总有多种解决方法。这两种解决方案都很好,没有优劣之分。
提前返回的另一种替代方法可能是这样的:
function someFunction(someCondition){ if (someCondition) { // Do something }}
那么,为什么要考虑使用提前返回?
考虑使用提前返回的原因之一,就是能让代码的视觉效果更加流畅。如果选择其他替代方法,使用if语句,就需要额外缩进,而使用提前返回则并不需要,代码的可读性也更强。
使用提前返回的另一个原因,是它可以让diffs命令更加简洁,尤其是所做更改会改变缩进的话,更是如此。如果不采用提前返回方法,即使可能只有几行代码,diff命令也会非常繁琐。
最后一个原因,提前返回是程序员的定心丸。通过使用提前返回,可以先排除无效情况(保镖模式),再空出一行,便可专注于函数的“真正”主体。
此外,如果不使用提前返回,那就只有一个出口点,意味着人们必须一直在脑海中搜索全部代码,直到函数运行结束。
那么,为什么不使用呢?
另一方面,关于为什么不该使用提前返回,也有一些原因。笔者在StackOverflow网站上读到过一篇很好的评论文章,几乎涵盖了大部分反对使用提前返回的原因:
“一般来说,人们希望函数中能有尽可能少的返回点。实际原因是为了简化代码读取,因为可以始终假设每个函数都能够接收参数,执行逻辑,并返回结果。
而增加返回次数往往会使逻辑复杂化,增加读取和充分理解代码所需的时间。
一旦代码达到了维护阶段,新手程序员试图推理逻辑时,多次返回就会大大影响他们的效率(当注释比较分散,代码模糊不清时尤其糟糕)。
函数的长度越长,问题也就越严重。
该评论来自于马克·凯格尔。尽管发布于十多年前,但笔者认为,如果决定不使用提前返回,该评论仍有意义。
在某些情况下,使用提前返回就比较夸张。来看看下面的例子:
function setAge(age) { if (!age) { return; } this.age = age;}
此处使用提前返回似乎不太对,对代码来说可能弊大于利,因为本可以更简洁:
function setAge(age) { if (age) { this.age = age; }}
来源:Pexels
提前返回,你选择用还是不用?你是那种喜欢使用提前返回的程序员吗,因为这样代码可以平稳运行?还是在函数里最多只返回一次结果?
现在,轮到你了!快分享一下你对提前返回的看法吧~
推荐阅读专题
留言 点赞 发个朋友圈
我们一起分享AI学习与发展的干货
编译组:刘露敏、余书敏
相关链接:
https://medium.com/better-programming/are-early-returns-any-good-eed4b4d03866
如需转载,请后台留言,遵守转载规范
推荐文章阅读
长按识别二维码可添加关注
读芯君爱你