Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/database/9.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逻辑控制_If Statement_Coding Style - Fatal编程技术网

If statement 最佳实践:if逻辑控制

If statement 最佳实践:if逻辑控制,if-statement,coding-style,If Statement,Coding Style,关于编码标准、速度和效率,以下哪项是适合这种情况的更好的编程实践 function foo() { if(bar) { return 0; } if(baz) { return 0; } if(qux) { return 0; } } 或 我倾向于第一个条件,因为只需要计算一个条件,因此速度会更快,但是有多个返回值s是不好的 //编辑 我将使用的语言主要是PHP和JavaScript,可能是C++和Ruby。 < P>关于第二个例子, > 是大多数语言,所以只有必要的条

关于编码标准、速度和效率,以下哪项是适合这种情况的更好的编程实践

function foo() {
  if(bar)   { return 0; }
  if(baz)   { return 0; }
  if(qux)   { return 0; }
}

我倾向于第一个条件,因为只需要计算一个条件,因此速度会更快,但是有多个
返回值
s是不好的

//编辑


我将使用的语言主要是PHP和JavaScript,可能是C++和Ruby。

< P>关于第二个例子,<代码> > <代码>是大多数语言,所以只有必要的条件才会被评估。例如,如果
bar
的计算结果为true,则不会计算
baz
qux


知道这一点,我可能会选择第二个示例。

在C中,您可以使用第二个版本,因为它在性能方面是相同的,但看起来更好。如果
bar
为真,则不再检查其他标志。

这完全取决于语言。许多语言都会缩短求值过程,因此,如果
bar
为真,则其他两种语言都不会求值,在这种情况下,任何半体面的编译器都会对它们进行优化。在您提到的四种语言(C++、Ruby、PHP和Javascript)中,它们都进行短路评估

而且,不管“避免多重回报”的人群会告诉你什么,这不是你应该像羊一样遵守的规则。这是为了避免出现难以看到返回(或循环中断)发生的情况。您的第一个解决方案不会像您的第二个解决方案那样受到该问题的影响

盲目遵循教条而不了解其背后的原因应被视为一种罪行,可处以痛苦的酷刑。

后者但作为:

function foo()
{

   var result = 1;

   if(bar || baz || quz)
   {
       result = 0;
   }

   return result;
}

随意退出带有“return”的代码是一种不好的做法,这会使调试成为一场噩梦——特别是如果您正试图调试的是其他人的代码!控制流应始终在函数底部退出

现在几乎每一种编程语言,这意味着这两种示例在控制流和性能方面是等效的

如果多个返回分布在整个函数中并且返回不同的内容,那么确实应该避免使用多个返回,因为这会降低可读性。另一方面,具有检测不可接受条件并停止执行流的早期退出条件是相当标准的:

function getFriendList() 
{
  if (! has_internet_connection() ) return null;
  if (! is_logged_in() ) return null;

  return server.getFriendList();
}

在第二种情况下,由于您使用的是逻辑OR,因此只有在必要时才会检查第二个条件,因此我希望使用第二个条件来编写更好的编码标准。

我认为后一个例子在编码方面更好。在OR语句中,atmost一个条件为true语句为true。因此,如果第一个条件为真,则不会再考虑其他条件。速度和效率都没有损失。

如果
bar | | baz | | qux
为假,你的方法应该返回什么?@Mark-它实际上来自更大的上下文,因此为了简洁起见,我删除了其他内容。谢谢你的提醒。我可能会在水上24/7然后…但谢谢你的建议。Rob的
return
变量解决了“难以看到的返回”的情况,我想?是的,但我自己认为没有必要,因为原始代码很好。Rob的回答提到了另一个方面,即代码路径没有返回任何内容,但我假设这只是一个片段,您意识到这是一个坏主意(无论如何,编译器/解释器应该捕捉到这一点)。事实上,我更喜欢原来的解决方案而不是Rob的,因为我觉得他的解决方案看起来很凌乱,但这只是我个人的偏好——它仍然有效。好的,谢谢@pax(+1)和其他人。我将@Victor作为一个很好的总结,而且因为他的代表性明显低于8万P
function getFriendList() 
{
  if (! has_internet_connection() ) return null;
  if (! is_logged_in() ) return null;

  return server.getFriendList();
}