Flex - 我应该在分配布尔值之前进行==检查吗?

时间:2011-07-17 03:41:16

标签: flex

我应该这样做:

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

DeviceDisplay.IsSpeedAvailable = true;

我以为我看到flex / as3在分配之前会对布尔值进行内部检查,以确保你重新分配东西,但我找不到它来确认。

我知道这是小事,但我想知道。

2 个答案:

答案 0 :(得分:3)

如果您使用[Bindable]标记进行财产通知,则如果值未发生变化,则不会触发事件。如果查看生成的代码,它将检查值是否已更改。如果更改,则不会触发事件。如果更改,则会触发事件。

因此,在设置值之前,通过检查只会使代码复杂化(并且是冗余的)。

如果您只是设置普通布尔值(没有更改通知),那么您首先检查不会获得任何结果,因此您无需检查。

如果您正在使用某种自定义mutator,其中设置值会产生副作用,那么您应该在mutator中检查它,但绝不在它之外。像这样:

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

    _foo = value;
    doSideEffect();
}

例如,这是[Bindable]在您使用时为其写的模式(doSideEffect触发更改事件)。

在我看来,这是唯一时间你应该在设置之前检查bool的值。

答案 1 :(得分: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>