提前返回有好处吗?

276 阅读4分钟

全文共1634字,预计学习时长5分钟

来源:Pexels


使用提前返回(early returns)还是不使用提前返回,这是个问题,两者都有其缘由。


关于使用提前返回,程序员往往有很强的个人偏好。有些人从不使用,另一些人却对此执念很深。但除了个人编程风格外,还有别的其他原因吗?


本文中,小芯将和大家一起讨论可以在代码中使用提前返回的原因,以及为什么一些程序员不选择使用提前返回。


在开始深入探讨提前返回这个话题之前,我们首先要了解一下“提前返回到底是什么?”



提前返回是指编写的函数能在结尾处返回预期结果。


在函数中,其余代码应尽快触发终端,防止偏离函数目的。


提前返回的运行正如其名所述。下面就是提前返回的运行模式:


functionsomeFunction(someCondition) {
if (!someCondition) {
return;
} // Do something
}

但和往常一样,在编程中,一个问题总有多种解决方法。这两种解决方案都很好,没有优劣之分。


提前返回的另一种替代方法可能是这样的:


function someFunction(someCondition){
if (someCondition) {
// Do something
}
}

那么,为什么要考虑使用提前返回?


考虑使用提前返回的原因之一,就是能让代码的视觉效果更加流畅。如果选择其他替代方法,使用if语句,就需要额外缩进,而使用提前返回则并不需要,代码的可读性也更强。


使用提前返回的另一个原因,是它可以让diffs命令更加简洁,尤其是所做更改会改变缩进的话,更是如此。如果不采用提前返回方法,即使可能只有几行代码,diff命令也会非常繁琐。


最后一个原因,提前返回是程序员的定心丸。通过使用提前返回,可以先排除无效情况(保镖模式),再空出一行,便可专注于函数的“真正”主体。


此外,如果不使用提前返回,那就只有一个出口点,意味着人们必须一直在脑海中搜索全部代码,直到函数运行结束。


那么,为什么不使用呢?


另一方面,关于为什么不该使用提前返回,也有一些原因。笔者在StackOverflow网站上读到过一篇很好的评论文章,几乎涵盖了大部分反对使用提前返回的原因:


“一般来说,人们希望函数中能有尽可能少的返回点。实际原因是为了简化代码读取,因为可以始终假设每个函数都能够接收参数,执行逻辑,并返回结果。


而增加返回次数往往会使逻辑复杂化,增加读取和充分理解代码所需的时间。


一旦代码达到了维护阶段,新手程序员试图推理逻辑时,多次返回就会大大影响他们的效率(当注释比较分散,代码模糊不清时尤其糟糕)。


函数的长度越长,问题也就越严重。


该评论来自于马克·凯格尔。尽管发布于十多年前,但笔者认为,如果决定不使用提前返回,该评论仍有意义。


在某些情况下,使用提前返回就比较夸张。来看看下面的例子:


  1. function setAge(age) {
  2. if (!age) {
  3. return;
  4. }

  5. this.age = age;
  6. }

此处使用提前返回似乎不太对,对代码来说可能弊大于利,因为本可以更简洁:


function setAge(age) {
if (age) {
this.age = age;
}
}


来源:Pexels


提前返回,你选择用还是不用?你是那种喜欢使用提前返回的程序员吗,因为这样代码可以平稳运行?还是在函数里最多只返回一次结果?


现在,轮到你了!快分享一下你对提前返回的看法吧~

留言 点赞 关注

我们一起分享AI学习与发展的干货
欢迎关注全平台AI垂类自媒体 “读芯术”


(添加小编微信:dxsxbb,加入读者圈,一起讨论最新鲜的人工智能科技哦~)