2014-11-24 53 views
2

这两组if语句之间是否存在任何实际的(更快/更慢,功能等)差异?这两个if()语句之间是否有任何实际区别?

1:

var myVar:Boolean; 
if (myVar == true) 
{ 
    //do stuff 
} 
//waldo: 
if (myVar == false) 
{ 
    //do other stuff 
} 

2:

var myVar:Boolean; 
if (myVar == true) 
{ 
    //do stuff 
} 
//waldo: 
else 
{ 
    //do other stuff 
} 

这具体地是关于如果()变量仅具有两个可能的值(null以外)语句,如布尔变量的问题。

+0

除了已经提到的内容之外,在#2中,**总是**会发生(* else *)。在#1中,如果'myVar == null'则不会发生任何事情 - 所以这两个例子并不相同。 – 2014-11-24 10:52:31

回答

1
  1. 这些例子在功能上并不相同。正如@Nicolas已经提到myVar可以在第一个块中更改,然后第二个如果语句将为true。事情是这样的:

    if (myVar == true) 
    { 
        //do stuff 
        myVar = false; 
    } 
    if (myVar == false) 
    { 
        // now this will be executed 
    } 
    

这不会在第二种情况下发生的。

  1. 在第一个例子中,布尔值被检查两次(即两个if语句),但在第二个布尔值中只检查一次。这给了轻微的性能优势。如果很少这样做,它不会太多,但是如果此代码每秒执行很多次(例如,在数百个电影剪辑中输入帧事件),那么性能好处可能变得至关重要。例如,如果您可以每秒节省50毫秒,那么性能将提高5%。

  2. 在我看来,第二个例子更具可读性。

0

主要区别在于,在第一个示例中,如果myVar的值在两个块之间更改为false,则第二个语句仍将执行。在第二个示例中,即使myVar在第一个块完成后变为假,else子句也不会执行,因为关联的if子句已被执行(只有其中一个将运行)。就性能和代码质量而言,通常需要使用类似于第二个示例的内容(除非第一个示例的副作用是必需的)。

+0

你可以按照OP在示例中显示的方式在if和else语句之间插入代码吗?我从来没有尝试过这么有趣,所以我很好奇 - 对我来说似乎很混乱。无论如何,无论您是否可以,这个答案仍然是100%有效的。 – Neguido 2014-11-24 04:30:39

+0

你在问if/else块之间有'// waldo:'吗?我相信这只是合法的,因为它是一个评论,否则你将无法在那里获得可执行代码。 – 2014-11-24 05:36:31

+0

也是这么想的,我只是不确定OP是否已经在那里表示一段代码,就像在语句(“// do stuff”)中所做的那样。 – Neguido 2014-11-24 05:54:20

相关问题