鍍金池/ 問(wèn)答/Java  PHP  GO  網(wǎng)絡(luò)安全/ return 對(duì)代碼可讀性的影響

return 對(duì)代碼可讀性的影響

在函數(shù)中,是否應(yīng)該控制盡量少的 return 出口?
比如 (以 PHP 代碼舉例):

<?php

/**
 * 控制盡量少的退出點(diǎn)
 */
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());
    }
}

/**
 * 不控制,可以結(jié)束的時(shí)候直接 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);
}

常見(jiàn)觀點(diǎn)

正面:應(yīng)該控制

  • 過(guò)多的 renturn,增加了函數(shù)出口點(diǎn),不利于代碼閱讀

反面:沒(méi)必要

  • 多個(gè) return 也沒(méi)什么,類似 try-catch 在效率上有所損失,盡量少用

中立

  • 兩種寫(xiě)法只是跟人風(fēng)格問(wèn)題,沒(méi)有優(yōu)略
  • 短函數(shù)多個(gè) return 無(wú)傷大雅,但是長(zhǎng)函數(shù)中,會(huì)嚴(yán)重降低可讀性

各位客觀,歡迎留下你的觀點(diǎn)。

我的觀點(diǎn):
無(wú)論是短函數(shù)還是長(zhǎng)函數(shù),都盡量控制一下 return 點(diǎn),因?yàn)槎毯瘮?shù)隨著迭代可能會(huì)變成長(zhǎng)函數(shù)。
而且多個(gè) return 會(huì)明顯降低長(zhǎng)函數(shù)的可讀性。
對(duì)于 try-catch 結(jié)構(gòu),在性能上的一丁點(diǎn)犧牲,換來(lái)的可讀性提升,是值得的。

回答
編輯回答
解夏

return (is_dir($this->dirPath) ? rmdir($this->dirPath) : false) ? true : false;

這種方式怎么樣?

2017年12月1日 21:49
編輯回答
紓惘

個(gè)人傾向return;關(guān)于可讀性,return了,后面的代碼就別讀了。

2017年2月25日 05:05
編輯回答
壞脾滊

個(gè)人傾向于盡快return的原則,特別是對(duì)于多層嵌套的iffor,能第二行return,絕不放第三行。

2018年6月8日 04:41
編輯回答
硬扛

個(gè)人傾向盡早return,減少過(guò)多運(yùn)行無(wú)用代碼

2017年11月25日 21:26
編輯回答
柚稚

個(gè)人傾向盡早return;
函數(shù)越短越好,單一職責(zé),劃分最小單元。

2017年5月22日 11:21
編輯回答
病癮

中立,團(tuán)隊(duì)自己達(dá)成一致就可以了。
運(yùn)行時(shí)差異并不大??勺x性是對(duì)人來(lái)說(shuō)的,如果你使用IDE,比如PHPStorm來(lái)說(shuō),IDE可以很好的檢測(cè)出來(lái)是否邏輯上不可達(dá)的代碼或者區(qū)間空洞這種問(wèn)題,如果你再使用 phpdoc 來(lái)規(guī)范你的return 類型,IDE可以直接給你標(biāo)記出來(lái)你的哪些返回是有問(wèn)題的。如果你使用phpcs這種靜態(tài)掃描工具再結(jié)合IDE來(lái)一起工作的話,你會(huì)發(fā)現(xiàn),IDE給出的提示會(huì)非常詳細(xì)。。細(xì)到你不想使用。。。
如果你說(shuō)的可讀性是指 文本編輯器 里的可讀性,你還是在團(tuán)隊(duì)里面規(guī)范下IDE的使用吧。

2017年8月21日 23:01
編輯回答
冷溫柔

其實(shí)方法單一職責(zé)后,return的使用不會(huì)那么讓人討厭

2017年3月5日 15:26
編輯回答
帥到炸

在我看來(lái)只要不是壓縮和混淆,都不影響閱讀

2017年5月27日 23:10
編輯回答
青黛色

盡早返回。
造成難以閱讀的不是return多,是代碼有其他問(wèn)題。

2017年5月12日 04:44
編輯回答
過(guò)客

應(yīng)該盡早 return 支持 +1,減少嵌套和圈復(fù)雜度,感覺(jué)還是挺不錯(cuò)的哦 (??ロ??)?? ~~

2017年7月16日 14:45