在另一个else语句中嵌套if/else语句是一种不好的编程实践吗?

4
if() {

}else {
    if (IsAlternateRow=='true')
        IsAlternateRow = 'false';
    else
        IsAlternateRow = 'true';
}

我可以在另一个else语句中放置if和else语句吗?


4
请尝试将这个问题发布到代码审查网站(http://codereview.stackexchange.com/)。那里更加适合此类问题的讨论。 - Hosam Aly
是的,从技术上讲你可以这样做,但是为了保持代码的“清洁”和可读性,尽可能避免这种情况。 - Timothy Groote
附注:if (IsAlternateRow == 'true') 一定会是 false,因为 == 评估对象引用相等性。如果您想要字符串比较,请使用 .equals() - wkl
1
现在不再是Java,而是JavaScript了...这让人感到很困惑 :D - Skurmedel
1
是的,这个问题自创建以来已经发生了很大变化。最初它是一个“如何改进这段代码”的问题,并被标记为java。现在它是一个被标记为javascript的“我可以嵌套if/else语句吗”的问题... - Rob Hruska
显示剩余2条评论
9个回答

9

是的,在else语句中放置一个if是完全可接受的做法,但在大多数情况下,使用else if更清晰、更简洁。例如:

if (test) {
   // Do something
} else if (otherTest) {
   // Do something else
} else {
   // Do a third thing
}

实际上,这是一种简写形式。
if (test) {
   // Do something
} else {
     if (otherTest) {
         // Do something else
     } else {
         // Do a third thing
     }
}

在大多数情况下,这两个应该编译成几乎相同的程序。

您的代码示例不是很清晰,也无法正确编译,更清晰的示例代码可能会帮助我们为您提供帮助。


9

注意:在此答案发布后,该问题已被重新标记为JavaScript(最初它是关于Java的,因此此答案是关于Java的)。

一般来说,在else语句中放置ifelse是可以的。

但是,您的代码存在几个问题。IsAlternateRow=='true'在语法上无效。

  • 如果这是一个字符串比较,您应该使用双引号和.equals()
  • 如果这是一个布尔比较,您最好只需执行IsAlternateRow = !IsAlternateRow而不是整个嵌套的if

3
不行。'true'和'false'不是有效的字符常量。 - Isaac Truett
@Isaac Truett - 我赞成你的评论,但是这个问题的标签已从 java 更改为 javascript,所以它不再适用。我们被晚期编辑搞糊涂了 :( - Rob Hruska
@Issac 为什么“true”和“false”不是有效的字符常量? - Ash Burlaczenko
@Ash 在Java中,单引号用于包装单个字符常量。多个字符则为字符串,字符串常量则用双引号包装。"foo"是一个有效的字符串常量。'foo'是无效的语法。 - Isaac Truett

6

尝试

IsAlternateRow = !IsAlternateRow;

(更新以显示此代码中的外观)
(注:此处为说明,非翻译内容)
var IsAlternateRow = false;

if(/* -- insert equation here -- */) 
{
 // do something
} 
 else 
{
    IsAlternateRow = !IsAlternateRow;
}

1
这是一种简单的反转布尔值的方法。 IsAlternateRow(解释为false)= !IsAlternateRow(解释为!false,或true) 这适用于从false到true和从true到false的情况。 - Timothy Groote
@theJava:IsAlternateRow将使用布尔值的相反值来执行===,以此来改变IsAlternateRow当前的值。 - Shaz
我只是感到困惑...你能把这段代码放在我的语句中并展示给我看吗?我应该在什么地方声明isAlternateRow? - theJava
我更新了答案,以展示你如何在这种情况下实现它。 - Timothy Groote
我应该将IsAlternateRow=='true'放在我的if条件中吗? - theJava
如果您将布尔值放入IsAlternateRow中,则它将包含布尔值TRUE或FALSE,而不是字符串“true”和“false”。这将使比较IsAlternateRow的值变得更加容易。例如:if(IsAlternateRow) { //进行操作 - Timothy Groote

4

返回 (IsAlternateRow.equals('true')) ? 'false' : 'true'

(如果“IsAlternateRow”等于“true”,则返回“false”,否则返回“true”)

3

一般来说,要回答这样的问题,你应该问自己:

这是否易于阅读?

浅层嵌套的if/else语句并不可怕,但是一旦你开始过度嵌套,就应该进行重构。


2
这样做没问题,但有更简单的方法来完成你正在做的事情:
IsAlternateRow = !IsAlternateRow

1

正确的做法:

if() {

} else if (IsAlternateRow=='true') {
    IsAlternateRow = 'false';
}
 else
{
    IsAlternateRow = 'true';
}

使用字符串进行布尔比较并不是最好的方式。 - Timothy Groote

1

是的,你可以这样做。如果你想要对同一个对象/变量进行多次评估,你可以使用 switch 语句,但在许多情况下,交错的 if 语句同样能够胜任。


1
回答你的问题,是的,你可以无限嵌套if/else语句。你提供的代码将会顺利编译。但是考虑到你在谈论Java,我想除非那是伪代码,否则它不会提供所需的结果。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接