4

考虑以下两种编码风格:

嵌套条件:

if(is_numeric($user_id)) {

    // .. do stuff
    if(is_valid_user($user_id)) {
        return foo($user_id);
    } else {
        return FALSE;
    }

} else {
    return FALSE;
}

与只是在出现问题时停止:

if(!is_numeric($user_id)) {
    return FALSE;
}    

// .. do stuff

if(!is_valid_user($user_id)) {
    return FALSE;
}

return foo($user_id);

这当然至少部分是关于味道的。但是这两种不同的风格叫什么?

什么时候优先于另一个?

还有其他的,或许更简洁的编码风格?

4

3 回答 3

1

return与您的问题相关的另一种编码风格是每个方法/函数只有一个语句。

学校经常教授这个原则。我认为 Martin Fowler 最初是基于一些在线搜索的支持者。

主要原因可能与 PHP 无关,但例如在 C 中,如果您在需要清理的函数中动态分配了内存,那么到处都有返回会导致重复代码、内存泄漏或不得不使用goto获取释放内存的代码。

于 2012-08-09T23:42:20.753 回答
1

您可以else完全省略 s。

if (is_numeric($user_id)) {

    // do stuff

    if (is_valid_user($user_id))    
        return foo($user_id);
}

return false;

更简洁,更少的代码,仍然易于阅读/理解。

于 2012-08-09T23:37:45.263 回答
1

我通常认为嵌套越少越容易阅读。出于这个原因,我更喜欢第二种风格。当然,你使用什么风格并不重要,我什至会稍微改变你的第二个例子,让我更容易阅读。

if(!is_numeric($user_id)) return FALSE;

// .. do stuff

if(!is_valid_user($user_id)) return FALSE;

return foo($user_id);

对我来说,右侧的返回语句使它们脱颖而出。此外,将整个内容放在一行中有助于我将语句描绘成门,并轻松地将代码拆分为多个部分……但这只是我。

于 2012-08-09T23:55:34.247 回答