这两组if语句之间是否存在任何实际(更快/更慢,功能等)差异?
var myVar:Boolean;
if (myVar == true)
{
//do stuff
}
//waldo:
if (myVar == false)
{
//do other stuff
}
var myVar:Boolean;
if (myVar == true)
{
//do stuff
}
//waldo:
else
{
//do other stuff
}
这特别是关于变量的if()语句的问题,这些变量只有两个可能的值(非null),如布尔变量。
答案 0 :(得分:1)
这些示例在功能上并不相同。正如@Nicolas已经提到的,myVar
可以在第一个块中更改,然后第二个if语句将为true。像这样:
if (myVar == true)
{
//do stuff
myVar = false;
}
if (myVar == false)
{
// now this will be executed
}
在第二种情况下不会发生这种情况。
在第一个示例中,布尔值被检查两次(即两个if语句),但在第二个布尔值中只检查一次。这会带来轻微的性能优势。如果很少这样做会不会很多,但如果这段代码每秒执行很多次(例如,在数百个影片剪辑的内部输入帧事件中),那么这样的性能优势就变得至关重要。例如,如果每秒可以节省50毫秒,那么性能将提高5%。
在我看来,第二个例子更具可读性。
答案 1 :(得分:0)
主要区别在于,在第一个示例中,如果myVar
的值在两个块之间变为false,则第二个语句仍将执行。在第二个示例中,即使myVar
在第一个块完成后变为false,也不会执行else
子句,因为已经执行了关联的if
子句(其中只有一个将执行运行)。
就性能和代码质量而言,你通常会想要使用第二个例子(除非第一个例子的副作用是必要的)。