return 对代码可读性的影响

在函数中,是否应该控制尽量少的 return 出口?
比如 (以 PHP 代码举例):

<?php

/**
 * 控制尽量少的退出点
 */
function foo1($var)
{
    try {
        if (empty($var)) {
            throw new \Exception('emty var');
        }

        if (!is_string($var)) {
            throw new \Exception('var must be string');
        }

        return sprintf("input-var:%s \n", $var);
    } catch (\Exception $e) {
        return sprintf("error:%s \n", $e->getMessage());
    }
}

/**
 * 不控制,可以结束的时候直接 return
 */
function foo2($var)
{
    if (empty($var)) {
        return 'error:empty var' . PHP_EOL;
    }

    if (!is_string($var)) {
        return 'error:var must be string' . PHP_EOL;
    }

    return sprintf("input-var:%s \n", $var);
}

常见观点

正面:应该控制

  • 过多的 renturn,增加了函数出口点,不利于代码阅读

反面:没必要

  • 多个 return 也没什么,类似 try-catch 在效率上有所损失,尽量少用

中立

  • 两种写法只是跟人风格问题,没有优略
  • 短函数多个 return 无伤大雅,但是长函数中,会严重降低可读性

各位客观,欢迎留下你的观点。

我的观点:
无论是短函数还是长函数,都尽量控制一下 return 点,因为短函数随着迭代可能会变成长函数。
而且多个 return 会明显降低长函数的可读性。
对于 try-catch 结构,在性能上的一丁点牺牲,换来的可读性提升,是值得的。

尚方宝剑之说
浏览 608回答 18
18回答

白猪掌柜的

观点与你相反,函数中要尽可能多的使用 return 来控制,因为 return 从设计上来说就是这个功能,表示执行权限的移交。这样不会造成任何执行权限的问题。所谓函数,从设计之初,核心就是计算和返回。 滥用 try catch 会导致上级 try catch 无法正确捕获异常 语义化上来说,return 也比 try catch 更加清晰明了。

慕容708150

个人倾向于尽快return的原则,特别是对于多层嵌套的if和for,能第二行return,绝不放第三行。

UYOU

请正确使用Exception机制。

人到中年有点甜

防御式编程 <?php function run($a) { if (!conditionA($a)) return false; if (!conditionB($a)) return false; //... return true }

白衣染霜花

个人倾向return;关于可读性,return了,后面的代码就别读了。

杨__羊羊

其实方法单一职责后,return的使用不会那么让人讨厌

MYYA

个人倾向尽早return,减少过多运行无用代码

慕码人8056858

function a($b){ $c = ''; if($b==1){ $c = 1; }else if($b==2){ $c = 2; }else{ $c = 0; } return $c; }

慕尼黑8549860

在我看来只要不是压缩和混淆,都不影响阅读

翻阅古今

return (is_dir($this->dirPath) ? rmdir($this->dirPath) : false) ? true : false; 这种方式怎么样?
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Java