【问题标题】:Nested condition vs. return on unexpected result嵌套条件与意外结果返回
【发布时间】:2012-08-09 23:32:51
【问题描述】:

考虑以下两种编码风格:

嵌套条件:

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);

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

什么时候比另一个更受青睐?

还有其他可能更简洁的编码风格吗?

【问题讨论】:

    标签: php coding-style conditional


    【解决方案1】:

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

    if(!is_numeric($user_id)) return FALSE;
    
    // .. do stuff
    
    if(!is_valid_user($user_id)) return FALSE;
    
    return foo($user_id);
    

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

    【讨论】:

      【解决方案2】:

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

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

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

      【讨论】:

        【解决方案3】:

        您可以完全不使用 elses。

        if (is_numeric($user_id)) {
        
            // do stuff
        
            if (is_valid_user($user_id))    
                return foo($user_id);
        }
        
        return false;
        

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

        【讨论】:

        • 但是is_numeric检查和is_valid_user检查之间有代码
        • @hackattack 问题中没有提到
        • 没有? ...我从 2 个 if 语句之间的“// .. do stuff”评论中得到了这种印象
        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2017-11-14
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多