Flex - Должен ли я сделать проверку == перед назначением логического значения? - PullRequest
0 голосов
/ 17 июля 2011

Должен ли я сделать это так:

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

или

DeviceDisplay.IsSpeedAvailable = true;

Мне показалось, что я видел, что flex / as3 выполняет внутреннюю проверку булевых переменных перед их назначением, чтобы убедиться, что вы переназначаете материал, но я не могу найти его для подтверждения.

Я знаю, что это мелочи, но я бы хотел знать.

Ответы [ 2 ]

3 голосов
/ 17 июля 2011

Если вы используете тег [Bindable] для уведомления о свойстве, событие не будет запущено, если значение не изменится .Если вы посмотрите на сгенерированный код, он проверит, изменилось ли значение.Если значение не изменилось, событие не запускается.Если изменил , событие запускается.

Из-за этого вы только усложняете свой код (и становитесь избыточным), проверяя перед установкой значения.вы просто устанавливаете нормальное логическое значение (без уведомления об изменении), затем вы ничего не получите, проверив сначала, поэтому вам не нужно проверять.

Если вы используете какой-то специальный мутатор,установка значения вызывает побочный эффект, тогда вы должны проверить его внутри своего мутатора, но никогда за его пределами.Например:

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

    _foo = value;
    doSideEffect();
}

Это, например, шаблон, который [Bindable] пишет для вас, когда вы его используете (где doSideEffect запускает событие изменения).

По моему мнению, это только раз, когда вы должны когда-либо проверять значение bool перед его установкой.

0 голосов
/ 17 июля 2011

AS не выполняет внутреннюю проверку перед установкой логического значения, поэтому, если важно не переназначать ему значение (например, избегать прослушивания изменения от срабатывания), то сначала следует выполнить проверку.

Если крайне важно, чтобы значение не было переназначено, вам следует подумать о том, чтобы написать свой собственный метод установки для него (или переопределить существующий), который проверяет значение перед его установкой. Таким образом, каждое присвоение этой переменной имеет проверку - что означает меньше допущений и ошибок в будущем.

Вот тестовый сценарий, чтобы проиллюстрировать, что проверка не сделана - что имеет смысл, учитывая, что для этого потребуется дополнительная обработка.

<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>
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...