← All posts tagged ActionScript

Constantiner
разработка ActionScript Кажется, как-то Ваня Дембицкий (но могу ошибаться) писал, и я с этим согласен, насчет форматирования одинокой строчки кода в блоках типа if-else или в циклах. Типа принято не ставить скобочки если строчка в блоке единственная. Я с этим не согласен по двум причинам:

1. Код менее читаемый. Приходится специально принимать во внимание тот факт, что строчка одна. И форматировать в голове. С учетом того, что наличие или отсутствие {} никак не влияет ни на производительность, ни на размер, поставить {} — проявление уважения к читающему код.

2. Код — это не то, что вырублено раз и навсегда в граните. Его постоянно приходится менять. И что за мудачество приходится совершать если в блоке из нескольких строк надо удалить все, кроме одной? Или если надо добавить еще одну строчку. Приходится совершать глупые и неадекватные движения по простановке или убиранию скобочек. Я называю это мудачеством.

А вообще, формальное отношение к форматированию кода меня пугает. За всеми такими правилами либо лежит сермяжный смысл, либо не лежит. Скажем, перенос { на новую строку или написание на той же, где while, if или for. Полагаю, что в Java правило оставлять на той же связано с тем, чтобы уменьшить число строк чтобы на древних маленьких экранах их вместилось побольше. Резонно. Тогда в эту концепцию вписывается и убирание {} для однострочных выражений.

Но в ActionScript большинство придерживается Адобовских соглашений. Где { идет на новой строке. Ничего страшного. Но тогда довод про экономию строк в однострочных выражениях уже неубедителен.

В общем, строгое следование правилам форматирования в однострочных выражениях я считаю занудством. В чистом виде. Особенно с учетом отсутствия адекватных форматтеров в случаях использования в качестве корпоративного стандарта Flash Builder, в котором нет форматтера, а сторонний форматтер не поддерживает приведения к единому правилу по однострочным выражениям. Он лишь позволяет не менять текущего форматирования для них.

Легко писать, что кто-то формалист и зануда когда сам являешься таковым :) На будущее: меньше формализма в самом себе.
Constantiner
Flash ActionScript В AS сильно не нравится, что он в регулярных выражениях не считает юникодные алфавиты для матчинга метапоследовательностей типа \b :( Кто знает, написал ли кто универсальное решение, подходящее для всех языков? :)
Constantiner
AOP Flash ActionScript Хм. Всего лишь четыре решения, которые позиционируются как AOP для ActionScript stackoverflow.com При этом ни одно не доделано именно до AOP-решения. Тем не менее асинхронные динамические прокси реализованы, так что metatags based runtime weaving в принципе возможен. Если дозрею (думаю, что не раньше, чем через полгода), то возьмусь :)
Constantiner
Flash ActionScript А если честно, все эти 3D итд — все это фигня. Ну вы посмотрите на ActionScript! Лет пять он не менялся если не считать убогий Vector. А меж тем конструкции вида:
/** Invalidates cached formatting information on this element because, for example, the <code>parent</code> changed,
* or the <code>id</code> or the <code>styleName</code> changed.
*
* @playerversion Flash 10
* @playerversion AIR 1.5
@langversion 3.0/

function invalidate(target:Object):void;
которые описываются в интерфейсе, не прибавляют ни капельки ясности. Понятно, что все эти бесконечные Object'ы ставятся чтобы метод мог принимать параметры различных типов. Но ведь есть же перегрузка методов. Ведь можно расширить язык так, чтобы было несколько методов invalidate с различными, но узкими и конкретными типами параметров. Но тут же, мля, 3D. Параметры только программист увидит, на экране пленарного доклада Adobe MAX их не покажешь. А 3D — покажешь. Нытик-mode off Ж)
Constantiner
Flash Flex ActionScript На самом деле, ни сигналы, ни текущая событийная модель не являются нормальными. Понятно, что Адобам нужно претендовать на открытость, и они взяли открытые стандарты (ECMAScript, W3C DOM Level 3 Event Specification), которые, тем не менее, к предметной области не сильно готовы. Вместо того, чтобы придумать свое адекватное решение. Хорошо это или плохо? Не берусь судить.
Constantiner
Flex ActionScript Конечно, по части объявления локальных переменных и области видимости ActionScript явный недоязык. Потому как областью видимости окальной переменной является весь метод, вне зависимости от места объявления. И компилятор сообщает лишь о проблемах повторного объявления переменной. Соответственно, видно, что код Flex-фреймворка — быдлокод (я гарантирую это). Например, в UIComponent:
if (p)
{
var inheritChain:Object = p.inheritingStyles;
if (inheritChain == UIComponent.STYLE_UNINITIALIZED)
inheritChain = nonInheritChain;
}
else
{
// Pop ups inheriting chain starts at Application instead of global.
// This allows popups to grab styles like themeColor that are
// set on Application.
if (isPopUp)
{
if (FlexVersion.compatibilityVersion >= FlexVersion.VERSION_3_0 && _owner && _owner is IStyleClient)
inheritChain = IStyleClient(_owner).inheritingStyles;
else
inheritChain = ApplicationGlobals.application.inheritingStyles;
}
else
inheritChain = StyleManager.stylesRoot;
}
То есть в первом блоке if'а переменная объявлена, а во втором уже считается объявленной. И даже Билдер не может перепрыгнуть из второго блока к объявлению переменной в первом. Быдлокод, хуле.
Constantiner
Flash-Builder Flex Adobe ActionScript А вообще, мне жалко Адобов в процессе написания ими всяких квикфиксов для Flash Builder'а. Это им надо писать еще один синтаксический анализатор. Ну или скопировать код из кода компилятора Flex SDK. Они же не умеют сделать это общим недублирующимся кодом. Что получится, мы все уже знаем.
Constantiner
ActionScript Забавно. Если в if поставить сравнение Boolean с int (if (booleanValue < intValue)), то компилятор даже не заикнется и код как-то выполняться будет. А вот Java бы сразу за это натянула. Эх :(
Constantiner
ActionScript Без генериков этот класс Vector — просто кусок сами знаете чего. Боюсь, что к моменту ввода генериков в ActionScript 11 (если доживет) синтаксис превратится в полную кашу, либо опять поступятся обратной совместимостью :(