考虑以下两种编码风格:
嵌套条件:
if(is_numeric($user_id)) {
// .. do stuff
if(is_valid_user($user_id)) {
return foo($user_id);
} else {
return FALSE;
}
} else {
return FALSE;
}
VS。只是在出现问题时停止:
if(!is_numeric($user_id)) {
return FALSE;
}
// .. do stuff
if(!is_valid_user($user_id)) {
return FALSE;
}
return foo($user_id);
这当然至少部分是关于味道;但这两种不同的风格叫什么?
什么时候优先于另一个?
还有其他可能更清晰的编码风格吗?
答案 0 :(得分:1)
您可以完全取消else
。
if (is_numeric($user_id)) {
// do stuff
if (is_valid_user($user_id))
return foo($user_id);
}
return false;
更清洁,更少的代码,仍然易于阅读/理解。
答案 1 :(得分:1)
与您的问题相关的另一种编码风格是每个方法/函数只有一个return
语句。
学校经常教这个原则。我认为Martin Fowler是最初基于一些在线搜索的支持者。
主要原因可能与PHP无关,但在C语言中,例如,如果你在需要清理的函数中动态分配了内存,那么在整个地方返回会导致重复的代码,泄漏的内存,或者必须使用goto
来获取释放内存的代码。
答案 2 :(得分:1)
我通常认为最少嵌套更容易阅读。因此,我更喜欢第二种风格。当然,使用什么样的风格无关紧要,我甚至会稍微改变你的第二个例子,让我更容易阅读。
if(!is_numeric($user_id)) return FALSE;
// .. do stuff
if(!is_valid_user($user_id)) return FALSE;
return foo($user_id);
对我来说,右边的回复陈述让他们脱颖而出。此外,将整个事情放在一行上可以帮助我将这些语句描绘成门,并轻松地将代码转换为部分......但这只是我。