ДействиеСценарий / Говнокод #11841 Ссылка на оригинал

0

  1. 1
  2. 2
  3. 3
  4. 4
  5. 5
  6. 6
  7. 7
  8. 8
  9. 9
  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 kyzi007, (Updated )

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

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

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

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

Семь раз отмерь — один отрежь, guest!

    А не использовать ли нам bbcode?


    8