2014-11-24 31 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

相關問題