2011-07-17 36 views
0

我應該做這樣的:Flex - 在分配布爾值之前,我應該做一個==檢查嗎?

if (DeviceDisplay.IsSpeedAvailable == false){ 
DeviceDisplay.IsSpeedAvailable = true; 
} 

DeviceDisplay.IsSpeedAvailable = true; 

我以爲我看到的Flex/AS3做對布爾進行內部檢查,他們被分配到確保您重新分配前東西,但我無法找到它來確認。

我知道這是小東西,但我想知道。

+0

我不確定你關心的是什麼。即使價值實際上沒有變化,您是否擔心會發生事件?如果是這種情況,那麼最好的方法是確保添加事件處理程序,並在執行DeviceDisplay.IsSpeedAvailable = DeviceDisplay.IsSpeedAvailable時查看它是否被調用。 – jswolf19

+0

是的,我試圖找出它是否會更新可綁定控件。選定的答案表示它不會,但看起來我很安全,只是爲了設置它。 – Nate

回答

3

如果您正在使用屬性通知[Bindable]標籤,事件不會得到當值不改變解僱。如果您查看生成的代碼,它將檢查值是否已更改。如果它有而不是更改,它不會觸發事件。如果它已更改,事件將觸發。

因此,您只需在設置值之前通過檢查來使代碼複雜化(並且是冗餘的)。

如果你只是設置一個正常的布爾值(沒有變化通知),那麼你不會通過首先檢查獲得任何東西,所以你不需要檢查。

如果您正在使用某種自定義增值器,其中設置該值會導致副作用,那麼您應該在增發器內部檢查它,但不要超出它。就像這樣:

public function set foo(value):void { 
    if(value == _foo) 
     return; 

    _foo = value; 
    doSideEffect(); 
} 

這是一種模式,例如,該[Bindable]寫你,當你使用它(其中doSideEffect火災發生變化的事件)。

在我看來,這是只有時間你應該在設置它之前檢查布爾值。

0

因爲在設置布爾值之前AS沒有進行內部檢查,所以如果重要的是不重新分配一個值(比如避免更改監聽器被觸發),那麼您應該先進行檢查。

如果重要的是不要重新分配值,則應該考慮爲它設置自己的setter方法(或覆蓋現有值),然後在設置值之前檢查值。通過這種方式,每個賦予該變量的支票都有支票 - 這意味着更少的假設和錯誤。

這裏有一個測試腳本來說明沒有進行檢查 - 考慮到需要額外的處理才能自動完成檢查,這是有道理的。

<mx:Script> 
    <![CDATA[ 
     import mx.controls.Alert; 

     private var _bool : Boolean = true; 

     private function set myBool (val : Boolean) : void { 
      _bool = val; 
      mx.controls.Alert.show('set!'); 
     } 

     private function get myBool() : Boolean { 
      return _bool; 
     } 

    ]]> 
</mx:Script> 

<mx:VBox> 
    <mx:Button label="set true" click="myBool = true;"/> 
    <mx:Button label="set false" click="myBool = false;"/> 
</mx:VBox> 
+0

P.s.好名字。 ;) – Nate

相關問題