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

    −121

    1. 01
    2. 02
    3. 03
    4. 04
    5. 05
    6. 06
    7. 07
    8. 08
    9. 09
    10. 10
    11. 11
    private function taskResizer_resizeFinished(event:ResizerEvent):void {
                var width:int = event.width;
                var height:int = event.height;
                task.changeSize(width, height);
                // Wake up bindings
                var zones:* = zones; // AHAHAHHAHAHA
                this.zones = null;
                this.zones = zones;
                taskResizer.width = width;
                taskResizer.height = height;
            }

    Апдейт биндингов и контрольный выстрел в (шестой) строке.

    Запостил: maleka, 28 Января 2014

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

    • Объясни для незнающих.
      Ответить
      • переменной присваивают её же в инициализации?
        Ответить
        • Судя по всему где-то рядом есть
          [Bindable]
          private var zones:ОченьДлинныйТипКоторыйВломПисатьПолностью =
              new ОченьДлинныйТипКоторыйВломПисатьПолностью();
          Ответить
          • Добро пожаловать в мир нормальных IDE c автодополнением кода.
            Ответить
            • А при чем тут ИДЕ? Вы просто забыли про давно существующий мир нормальных языков, в которых тип нужно указывать, когда компилятор сам не сможет его вычислить.
              Ответить
              • притом что длинныйтипкоторыйвломписать среда сама будет угодливо подсовывает тебе по первым его буквам.
                Ответить
                • Можно так назвать, что и автокомплит не поможет. Да и в "современных ИДЕ" часто встречается такое, что одного класса по многу разновидностей из разных библиотек. Это заморочливо искать тип переменной, если он все равно ни на что не влияет. Да и читать эту муть потом долго.
                  Ответить
                  • > одного класса по многу разновидностей из разных библиотек

                    +1

                    У нас такие любители автодополнения все проекты завязали на скала-рантайм только из-за того, что кто-то случайно заимпортил Arrays не из java.util, а из scala.actors.
                    Ответить
                    • А поправить не судьба?
                      Ответить
                      • я-то исправил. Но просто это много лет оставалось незамеченным. Разбираться с зависимостями это ведь так скучно.
                        Ответить
                        • А анализатора никакого нет?
                          Ответить
                          • А кто заморачивается? я так понимаю, скалу где-то там уже прикрутил покой-то хрен, никто и не заморачивался, почему рантайм нужен во всех модулях, а не в одном.

                            Идея скрывает секцию импортов по умолчанию, любители иде туда особо не смотрят.
                            Ответить
                            • о, еще нет рефлекса проверять пакет класса.
                              я как-то обжегся о ClassCastException, когда из-за неправильного импорта BigDecimal не был тем BigDecimal, что нужен. теперь всегда проверяю, ибо Eclipse не смотрит в первую очередь импорты из пакетов библиотеки, а часто смотрит в зависимости.

                              например, несмотря на присутствие org.apache.tapestry5.annotations.Inject все время пытается навязать мне javax.inject.Inject
                              Ответить
                              • Это, кстати, может быть и осмысленным поведением (хотя, скорее всего просто по алфавиту смотрит).
                                В теории, по крайней мере, эти Явакс аннотации, они же стандартные, т.е. даже если гобелен ее реализовал, то "лучше" использовать явавскую, т.как это типа более универсально...
                                Ответить
        • И какой в этом смысл? Может, просто ошибка?
          Ответить
          • Смысл в том, что это свойство, а не простое поле класса и вызов сеттера обладает побочным эффектом - инициализирует механизм "биндингов" (реактивное программирование, как его видят во Флексе). Ирония заключается еще и в том, что реактивное программирование как раз таки призвано устранить необходимость рукопашных обновлений и поддержания связей / зависимостей между переменными.
            Ответить
    • А че не так-то? Кроме путаницы zones и this.zones... да и то конпелятор должен разрулить, нет возможности счас проверить
      Ответить
    • вангую кучу других багов в проекте, если сопровождающие не уверены в работоспособности даже этого кода, и перестраховываются.
      Ответить
      • Нет, это типичное желание любого, кто сталкивался с тем, как биндинги работают и попытлася сделать что-то менее тривиальное чем связать одну пару полей. Хуже всего то, что у этой проблемы нет особенно хорошего решения. Можно найти обозреватель биндингов привязаный к этому классу, но его нужно искать через интроспекцию (он не доступен на этапе написания кода - генерируется компилятором). Можно самому определить сеттер и в нем явно вызвать механизм связывания - но это все равно, что закатывать солнце вручную, этот механизм был как раз придуман для того, чтобы этого не делать.
        Просто сам по себе механизм плохо работает, и на много лучше его не реализовать без массивного вмешательства в работу компилятора и рантайма.
        Ответить

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