Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/magento/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
If statement 如果返回,是否应省略以下内容?_If Statement_Language Agnostic - Fatal编程技术网

If statement 如果返回,是否应省略以下内容?

If statement 如果返回,是否应省略以下内容?,if-statement,language-agnostic,If Statement,Language Agnostic,vs if(条件1)返回; ... 如果(2)返回; … 我通常包括else,即使if返回,但我一直看到它被省略。我意识到它不是必需的,所以实际上是否更清楚地将else排除在外?在文体上有共识吗 如果在上述嵌套结构之后有很多If/else子句,那么执行时间是否会有显著差异?这确实是一个基于个人意见的问题。没有正确的答案。每个人都以自己喜欢的方式做这件事。我的首选方法是尽早检查无效病例。这样代码就不会缩进,更具可读性。我通常使用它来验证输入参数。所以我更喜欢的方式是- if (condition1

vs

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)返回如果没有换行符就不清楚,我把它添加到原来的问题中。这个问题被问得要死。一般来说,最好避免深嵌套。除了病理情况外,编译代码中肯定没有差异,因为它们具有相同的控制流图。