Coding style 如果';其他';无论如何都会发生,是否应该宣布?
可能重复:Coding style 如果';其他';无论如何都会发生,是否应该宣布?,coding-style,if-statement,Coding Style,If Statement,可能重复: 什么时候 这: 或者这个: var bar = function() { if (a != 0) return true else return false } 您应该尽可能使代码更清晰。在这种情况下,只需直接返回表达式结果即可 return (a != 0) 但一般来说,我尽量避免从函数中间返回。每个函数有一个返回 无论如何,它都会在编译时得到优化,所以运行时没有差异 和往常一样,你可以争论风格。我的50美分:第一个变体(没有显式的其他变体)更好,因为它没有那么多代码
什么时候 这: 或者这个:
var bar = function() {
if (a != 0) return true
else return false
}
您应该尽可能使代码更清晰。在这种情况下,只需直接返回表达式结果即可
return (a != 0)
但一般来说,我尽量避免从函数中间返回。每个函数有一个返回 无论如何,它都会在编译时得到优化,所以运行时没有差异 和往常一样,你可以争论风格。我的50美分:第一个变体(没有显式的其他变体)更好,因为它没有那么多代码做完全相同的事情 当然,在这种情况下,你会这样做
return a != 0;
。。。但是我认为这个问题应该是一般性的。我认为这样做是一个很好的实践,因为这样做会使更改代码变得更容易。例如,假设您想要打印结果。您可以这样更改它:
if(statement)
result = true
else
result = false
return result
if (a != 0) {
print "returning true"
return true
}
print "returning false"
return false
这意味着添加两次打印,否则:
if (a != 0) {
retval = true
} else {
retval = false
}
print "returning ", retval
return retval
这意味着添加一个打印,但如果没有其他打印,这将无法工作
当然,这是一个人为的例子,但它展示了您应该如何使代码尽可能可维护。这两种语言在大多数语言中的工作原理是相同的,但我认为使用
else
最好是更明显地说明,当上面的if
/else if
语句都不正确时,就这样做,尽管这显然是不必要的。但是,如果在
if
语句下面有很多代码,那么就不应该这样做,因为这样做只会让大量不必要的其他
语句变得一团糟。因为编译器可能会将其缩减为相同的编译代码,所以请做您认为更“漂亮”的事情
请注意,代码优雅是主观的,因此教条式地坚持一种或另一种格式是不必要的。我倾向于不使用其他格式。如果它是多余的,任何开发人员都应该了解将会发生什么:
public void DoSomethingConditionally(Foo foo)
{
if (Bar)
{
foo.DoX();
return;
}
foo.DoY();
}
我不同意那些每个函数只需要一个返回点的人,你的函数应该很小,几个返回点可以增强而不是阻碍可读性。如果语言要求If/else语句使用大括号,我个人喜欢删除else语句和附带的大括号。代码的意图同样清晰,但代码缩进程度将降低,这(通常)提高了可读性
正如其他人提到的,编译器将优化else语句。但是如果您处理的是解释性语言,必须解释else语句。在这种情况下,删除它将导致轻微(非常轻微)的性能提高。IMO-如果您的意图是在满足某些条件时返回
true
(例如,找到某个内容),然后可能以其他方式处理数据,最后,当没有发现任何内容时,返回false,则不带else
的选项更清晰
如果返回值仅取决于If中的条件,则If-else变量看起来更好。这无关紧要。无论哪种方式,编译器都将生成相同的代码。检查现有代码遵循的约定,然后执行相同的操作
就我个人而言,我不会用“其他”这个词,因为这是显而易见的。我发现额外的“else”看起来很混乱。我个人喜欢这种语法:
/*Function header comments*/
Function(...)
{
/*English what the if is trying to achieve*/
If(...)
{
...
Return True; /*What this tells me*/
}
Else
{
...
Return False: /*What this tells me*/
}
}
只是因为如果我这么做的话,我发现自己处于这样的境地
If(...)
Return True;
Else
Return False;
或
或
这不是很清楚,即使有正确的评论,一行是很酷的,如果我做一个比较无论如何,有一个很好的机会,我可能会想到一些需要发生的事情在该地区无论如何,我的意思是我做一个如果超过微笑。另外,如果我发现一个特殊情况需要一个Else-if,那么只需添加Else-if部分即可
function DoSomethingConditionally(foo)
{
if (Bar)
{
foo.DoX();
return;
}
else
{
foo.DoY();
}
}
我喜欢这种风格,以防万一我以后需要添加一些东西 当然,“else”应该明确声明
应明确声明“else”的原因有几个:
我不会为了一些“酷”的编程风格而牺牲可读性。但是,如果您面临诸如缩小javascript之类的面向对象问题,我会理解的
但是对于另一个问题,比如“如果一个数字可以被2整除,那么它甚至是奇数”,您应该显式地编写它,这样读者(可能不是程序员)在阅读代码时就不会感到困惑。因为读者(可能是数学家)只知道这样的不变量,他/她只知道一点编程语言。我决定是否使用“else”取决于我对“if”的语义解释,在某些情况下还取决于返回值。如果我觉得“如果”决定了两个行动方案或两个返回值,我将使用“其他”。如果我觉得是在正常行事还是“提前堕胎”之间做出决定,我会跳过其他步骤。如果返回值回答了问题“某件事失败了吗”,我通常会将错误返回视为早期中止,即使剩下的唯一要做的事情是返回成功,因此跳过“else”。但是,如果返回值询问“Is something xxx”,那么我将更经常地包含“else”。只需插入一个else,然后转到更激动人心的内容 这个例子过于简单化了。大部分答案
If(...)
Return True;
Else
Return False;
If(...)
Return True;
Return False;
(...)?Return True:Return False;
function DoSomethingConditionally(foo)
{
if (Bar)
{
foo.DoX();
return;
}
else
{
foo.DoY();
}
}
public void DoSomethingConditionally(Foo foo)
{
if (Bar)
{
foo.DoX();
return;
}
if (Baz)
{
foo.DoZ();
return;
}
foo.DoY();
}
public void DoSomethingConditionally(Foo foo)
{
if (Bar)
{
foo.DoX();
}
elseif (Baz)
{
foo.DoZ();
}
else
{
foo.DoY();
}
return;
}