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

    −122

    1. 1
    2. 2
    3. 3
    4. 4
    5. 5
    6. 6
    protected override function getCurrentSkinState():String
    {
    	if (!this._currentState) this._currentState = "edit";
    	else this._currentState = super.getCurrentSkinState() || "edit";
    	return this._currentState;
    }

    Еще грабли от Адоба.

    Запостил: wvxvw, 11 Февраля 2014

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

    • Для полноты счастья надо сделать _currentState сеттером и чтобы обязательно в нем еще одна проверка с модификацией была.
      Ответить
      • в сеттере нужна модификация до super.getCurrentSkinState(), если это "edit"
        Ответить
    • а АS в тенаринк не умеет ? к чему этот if
      Ответить
      • Да этот код вроде бы вообще можно упростить до:
        return super.getCurrentSkinState() || "edit"
        Ответить
        • Хотя нет, не эквивалентно. Вариант из топика первом вызове (если изначально в __currentState лежал null) возвращает тупо "edit", а при последующих - унаследованное значение, или "edit", если родитель вернул null...

          P.S. Что за хрень здесь вообще творится?!
          Ответить
          • Автор не умеет в чистые функции.
            Ответить
            • Напомнило http://tinyurl.com/syadiw-tshort
              Ответить
            • На самом деле все гораздо хуже... стейты объявляются в МХМЛ, и время их инициализации неизвестно, поэтому:
              - конструктор недоступен.
              - неизвестно проинициализировался ли компонент, или нет.
              - на счет чистых функций, тут про чистоту нужно думать не в академическом, а в более приземленном смысле. Как ни открою адобовские исходники, так и хочется руки вымыть.
              Весч вообще никакой отладке не поддается, бряк поставить некуда, логгер - аналогично, негде. Сидишь вот перед монитором, и, практически, играешь в лотерею: скомпилировалось и... нет, сука, не работает, ну давай, еще тут че-та поменяем...
              Ответить
          • присвоение нужно было в инициализацию вынести и делать как ты сказал

            На самом деле хуйня же - флаг храниться текстом, дефолтный флаг вшит в проверку исполнения. По идеи тут должен стоять жирный ексепшен.

            Если нет state - пшел нахуй из моего ооп
            Ответить
            • зачем исключение. Ну нет значит не установили вернуть null, пусть кому надо разбирается. Эксепшен там или установить значение.

              может же быть вполне не винный код типа if (!this->getState()) this->setState('Дефолтное значение');

              я так в пхп делаю потому что в определении переменных класса нельзя выражения.
              Ответить
              • Если это какое то действие извне, то стейт должен меняться при выборе действия. например в комбобоксе. Никакого дефолта быть не должно. Ибо это будет ипать как неочевидно

                Хотя с другой стороны всего говна в коде не видно, хз че там происходит
                Ответить
                • ну в кобобоксе должно же быть что то выбрано. вот и дефолтное значение.
                  Ответить
                  • Ну так там и так что то выбрано. Оно должно из комбобокса приходить, значение, а не синхронизироваться 1000 затычек.
                    Ответить
                    • Я не говор. про 1000 одной хватит. Но по хорошему надо в конструкторе.
                      Ответить
                  • "в кокобоксе"
                    >FIXED
                    Ответить
    • показать все, что скрытоХуй.
      Ответить

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