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

    −139

    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
    14. 14
    15. 15
    16. 16
    17. 17
    /**
     *  @private
     */
    public function set heightInLines(value:Number):void
    {
        if (value == _heightInLines)
            return;
        
        _heightInLines = value;
        heightInLinesChanged = true;
        
        heightConstraint = NaN;
        
        invalidateProperties();
        invalidateSize();
        invalidateDisplayList();
    }

    А значение по умолчанию-то NaN...

    RichEditableText's measure() method uses widthInChars and heightInLines to determine the measuredWidth and measuredHeight. These are similar to the cols and rows of an HTML TextArea.

    Since both widthInChars and heightInLines default to NaN, RichTextEditable "autosizes" by default: it starts out very small if it has no text, grows in width as you type, and grows in height when you press Enter to start a new line.

    The default value is NaN.

    Запостил: wvxvw, 07 Апреля 2014

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

    • Ну а что туда еще можно положить? null же в Number не влезет поди?
      Ответить
      • В D все числа с плавающей точкой тоже по умочанию NaN-ом инициализируются.
        Ответить
        • Ну NaN в качестве дефолта очень даже рулит... Даже если программист и компилятор где-то просрали неинициализированную переменную - прога выдаст NaN (ну или повиснет). Что намного лучше неправильно-рандомного ответа...

          Хотя мне тут жабий подход все-таки по душе. Если компилер не смог доказать, что локальная переменная инициализирована - значит пускай программист ее явным образом инициализирует сам.
          Ответить
      • Ну, во-первых, числа должны тут быть целыми, т.как поле не может быть полторы строки в высоту (по другим причинам).
        Во-вторых, я не против NaN как такового, а против проверки NaN == NaN, которая в редких случаях может приветси к тому, что на каждом этапе рендеринга, это текстовое поле будет помечено как изменившееся (не смотря на то, что ничего не менялось), и его отрендерят по-новой (принимая во внимаие, что это текст, который рендерится посимвольно Флешем - это может сожрат очень много ресурсов).
        Ответить
        • Флеш рендерит не весь кадр целиком? Только обновленные участки?
          Ответить
          • Нет, если есть отладчик, то можно в нем вызвать контекстное меню и включить Show Redraw Regions - он покажет что перерисовывалось в последнем апдейте. Но смысл не в этом. У Флекса своя схема апдейтов, и он форсирует переирсовку всего кадра - тут уже ничем не поможешь, но одно дело когда эта перерисовка - результат интерпретации SWF формата в сишном коде, а другое дело, когда компоновкой занимается АС, особенно принимая во внимание ну очень громоздкие флексовые компоненты.
            Т.е. код выше в довольно редкой, но возможной ситуации, типа биндинга к этому свойству от другого свойства, которое тоже было NaN, компонент и лейаут менеджер впадут в бесконечный цикл валидации / инвалидации, при том, что изменений не было.
            Ответить

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