If statement 如果返回,是否应省略以下内容?
vsIf statement 如果返回,是否应省略以下内容?,if-statement,language-agnostic,If Statement,Language Agnostic,vs if(条件1)返回; ... 如果(2)返回; … 我通常包括else,即使if返回,但我一直看到它被省略。我意识到它不是必需的,所以实际上是否更清楚地将else排除在外?在文体上有共识吗 如果在上述嵌套结构之后有很多If/else子句,那么执行时间是否会有显著差异?这确实是一个基于个人意见的问题。没有正确的答案。每个人都以自己喜欢的方式做这件事。我的首选方法是尽早检查无效病例。这样代码就不会缩进,更具可读性。我通常使用它来验证输入参数。所以我更喜欢的方式是- if (condition1
if(条件1)返回;
...
如果(2)返回;
…
我通常包括else
,即使if
返回,但我一直看到它被省略。我意识到它不是必需的,所以实际上是否更清楚地将else
排除在外?在文体上有共识吗
如果在上述嵌套结构之后有很多
If/else
子句,那么执行时间是否会有显著差异?这确实是一个基于个人意见的问题。没有正确的答案。每个人都以自己喜欢的方式做这件事。我的首选方法是尽早检查无效病例。这样代码就不会缩进,更具可读性。我通常使用它来验证输入参数。所以我更喜欢的方式是-
if (condition1)
{
return;
}
else
{
...
if (condition2)
{
return;
}
else
{
...
}
}
遵循真正深入的if…else
模式没有任何明显的改善。如果遵循“单返回原则”(请参阅和其他),则永远不会从if
块中返回
如果你不是,那么在我看来,这是个人偏好的问题,但也取决于情况。基本上我试着做最清楚的事情。一般来说,我确实包括else,因为它更清晰,但有时我不会;下面是一个例子,说明在其中包含else
子句似乎是浪费(而且不是更清楚):
在这种情况下,很清楚发生了什么。但是,如果我在较大代码块的上下文中编写单个if
,我通常会包含else
外观,因为return会终止调用它的当前函数,return语句下面的所有代码都将被忽略
在返回语句之后执行的唯一代码是位于finally中的代码,如下所示:
bool test_three_things( /*some input...*/ )
{
if ( /*first test...*/ )
return false;
if ( /*second test...*/ )
return false;
if ( /*third test...*/ )
return false;
return true;
}
def foo(arg1, arg2):
if condition:
return arg1
else:
return arg2
走这边
你带着口袋里的钱去商店只买不到100美元的巧克力,否则你会买衣服。所以如果和其他放宽限制。你可以在两者之间购买。
另一方面,如果你去市场只买巧克力,那么你几乎没有选择,所以只有如果意味着更多的限制。
基于此示例,您可以决定在代码中需要什么。视情况而定。有一点
对于普通情况,我通常会保留一个else
,以实现明显的并行性:
try{
if(condition == true)
{
return;
}
}
finally{
//Code here will run too
}
但对于任何稍微复杂的事情,我会删除其他
,通常建议其他人也这样做。这是因为很难遵循这样的函数:
bool test_three_things( /*some input...*/ )
{
if ( /*first test...*/ )
return false;
if ( /*second test...*/ )
return false;
if ( /*third test...*/ )
return false;
return true;
}
def foo(arg1, arg2):
if condition:
return arg1
else:
return arg2
假设我想重构这个函数,或者重构一些使用它的代码,我想知道返回值是如何精确计算的,因为有人忘记了编写文档。我看到的第一件事是三个独立的,如果中都有一堆代码,那么现在看来有八种不同的组合可能发生在value
上,谁知道每个返回的路径有多少,我叹了口气,喝了一大口伏特加,想弄清楚它们都是什么
更糟糕的是,想象一下,如果这些if
块中的每一个都只是有条件地返回
另一方面,即使有更多的条件,这也很容易遵循:
def foo():
if cond1:
# ten lines here
return value
else:
if cond2:
# another ten lines
return value
else:
if cond3:
# ten more lines
return value
# ...a couple dozen lines here...
return value
这能走多少路?第四,它们显然是相互排斥的,而且return
s甚至在视觉上排列成一行
嵌套块读起来像指数复杂性。顺序块读起来像一系列步骤,更像是你想要传达的内容
最终,我认为尽可能保持你的<代码>回报代码>是对单一回报原则精神的一个很好的折衷,否则我从来没有想过要遵循这一原则
是的,我重构了如下代码:)如果你的条件为false怎么办?我忘记了在伪代码中返回。这就是你的意思吗?我不知道返回if块与删除else块有什么关系。如果您的条件为真,则返回。但是如果你的条件是错误的呢?你的其他街区是空的吗?没有。。。?另一种选择是if(condition1)return。。。如果(条件2)返回代码>如果没有换行符就不清楚,我把它添加到原来的问题中。这个问题被问得要死。一般来说,最好避免深嵌套。除了病理情况外,编译代码中肯定没有差异,因为它们具有相同的控制流图。