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

0

  1. 1
  2. 2
  3. 3
  4. 4
override public function toString():String
    {
        return Object(container).toString() + "." + super.toString();
    }

Еще одно украшение Флексового фреймворка: mx.core::Repeater.
Для тех, кто не в курсе: toString() вызываетйса автоматически когда мы пытаемся вывести информацию об объекте в консоль. (Т.е. жизненно необходим для тестирования). Свойство container у репитера радко, но может буть null, но изза того, что флексовые разработчики не категорически никогда не кастуют ничего, то это должно было бы выкинуть исключение, но, конвертация используемая в примере (вместо каста) в силу особенностей языка вместо того чтобы просто умереть с исключением создаст новый динамический объект, врезультате получим что-то типа:
"[Object object].имяКомпонента".
т.е. на самом деле код должен был выглядеть примерно так:

return (this.container ? this.container.toString() + "." : "") + super.toString();

Запостил: wvxvw wvxvw, (Updated )

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

  • Для тех, кто не в курсе: toString() вызывается автоматически когда мы пытаемся вывести информацию об объекте в консоль. (Т.е. жизненно необходим для тестирования). Свойство container у репитера редко, но может быть null, но изза того, что флексовые разработчики категорически никогда не кастуют ничего, то это должно было бы выкинуть исключение, но, конвертация используемая в примере (вместо каста) в силу особенностей языка вместо того чтобы просто умереть с исключением создаст новый динамический объект, врезультате получим что-то типа:
    (Прошу прощения - куча ошибок, надо больше спать...)
    Ответить
    • Object(container) - это не совсем каст... Это создание нового объекта из старого. Чтобы вылетел эксепшн достаточно было просто сделать container.toString()
      Настолько я помню, null объектом не является во флеше, прога выпадет.

      Ну в общем, это не совсем прям говнокод. Скорее баг, который надо запостить в соответстующие органы =)
      Ответить
      • Не, фишка в том, что код рабочий. т.е. Object(null) - получаем [Object object] но это явно не то, что автор хотел. Просто container типизован как какой-то интерфейс, а вызов toSrting() у объекта типизированого как интерфейст даст ошибку компиляции, вот автор и влепил конвертацию незадумтваясь, вместо того, чтобы на null проверить.
        Ответить
    • Не, с этим там как раз все в порядке - Repeater наследуется от UIComponent, а там toString() уже определен, поэтому надо override.
      Ответить

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

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

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


    8