1. ActionScript / Говнокод #11841

    −95

    1. 01
    2. 02
    3. 03
    4. 04
    5. 05
    6. 06
    7. 07
    8. 08
    9. 09
    10. 10
    11. 11
    12. 12
    13. 13
    private var _disabled:int = 0;
            public function set enabled(v:Boolean):void {
                if (!v) {
                    this._disabled ++;
                } else {
                    this._disabled --;
                }
                this.run();
            }
    
            public function get enabled():Boolean {
                return !this._disabled;
            }

    Интересно что будет если _disabled внезапно примет значение -1.

    Запостил: kyzi007, 27 Сентября 2012

    Комментарии (13) RSS

    • Если терпения хватит нажать на кнопку 2147483647 раз, то ничего особенного.
      Ответить
      • Угу. Ничего особенного. В начальном состоянии исполняем set_enabled(true) (разрешаем уже разрешенное). Внезапно get_enabled начинает возвращать false.
        Ответить
    • угу, поле _disabled и свойство enabled - вот это инкапсуляция!
      Ответить
    • enabled = true; //иногда это enabled = false
      Ответить
      • На самом деле можно пофиксить, написав return _disabled <= 0. Тогда дела будут обстоять не так уж ужасно.
        Ответить
        • Я сделала проверку на -1 и эксепшен из под дебаг сборки.
          Ответить
          • а почему бы не поменять на int на Boolean? скучно?
            Ответить
            • Ну видимо нужно включать\выключать из нескольких независимых мест, поэтому и счетчик.
              Ответить
              • А boolean что нельзя выключать из нескольких независимых мест, или нужно проверять сколько раз включили или выключили?
                Ответить
                • > А boolean что нельзя выключать из нескольких независимых мест
                  Есть случаи, когда места должны быть действительно независимыми, а результат должен получаться как логическое "И" от их установок.

                  Приведу глупый пример - есть пачка валидаторов и кнопка ОК. Если валидатор видит, что его поле заполнено неправильно, он вызывает enabled = false, если же поле заполняется корректно - enabled = true. Кнопка разблокируется когда все валидаторы будут согласны со введенными данными. С boolean так не выйдет.
                  Ответить
                  • Еще может быть потребность включать-выключать объект из разных функций, одна из которых вызывается другой, а может вызываться и отдельно.
                    Более далекий пример - рекурсивные мьютексы.
                    Ответить
                    • Ну применений много. До кучи добавлю еще один далекий пример - подсчет ссылок на объект\библиотеку.
                      Ответить
    • Похоже на какой-то недосемафор...
      Ответить

    Добавить комментарий