If-else vs if not-if

Par*_*gun 0 standards if-statement

根据工作中的领导,两者之间的区别

if (invalid) {
   ...some code
}

if (!invalid) {
  ...some code
}
Run Code Online (Sandbox Code Playgroud)

if (invalid) {
  ...some code
} else {
  ...some code
}
Run Code Online (Sandbox Code Playgroud)

可以理解为一种风格选择。我想知道人们在哪里划线以及您会如何考虑这一点。

PS:是的,我知道否定不应该是 if 语句的“名义”情况。请忽略这一点,因为我试图完全复制引发讨论的相关代码。

Jon*_*eet 5

这里不仅存在冗余,而且根据语言的不同,正确性/有效性也可能存在差异。考虑这个 C# 代码:

int value;
bool condition = DateTime.UtcNow.Second < 30;
if (condition)
{
    value = 10;
}
else            
{
    value = 20;
}
// No problem, value is definitely assigned
Console.WriteLine(value);
Run Code Online (Sandbox Code Playgroud)

这是完全有效的。但是如果我们以冗余的方式编写它,我们会得到一个编译时错误:

int value;
bool condition = DateTime.UtcNow.Second < 30;
if (condition)
{
    value = 10;
}
if (!condition)
{
    value = 20;
}
// error CS0165: Use of unassigned local variable 'value'
Console.WriteLine(value);
Run Code Online (Sandbox Code Playgroud)

在 Java 中也是如此,我怀疑在许多其他语言中也是如此。编译器可以考虑这样一个事实,即在if/ 中else,执行将恰好流入这些分支之一。在“两个 if 语句”风格中,语言规则并不能保证。