Нашел в своих архивах правила оформления кода при написание приложение на actionscript, решил что будет кому-нибудь интересно и выложить так что вперед под кат.
Оглавление: Порядок перечисления членов класса ASDocs Метаданные Полный список порядка следования Именование this/super Оформление кода 7.1 Общая шапка 7.2 Авторство класса 7.3 Спойлеры 7.4 ASDoc private 7.5 Block-style 7.6 Именование и аббревиатуры 7.7 Упорядочивание кода 7.8 Константы Прочее 1. Порядок перечисления членов класса Записывать члены класса лучше в определённом порядке, для того что бы любой человек мог сходу определить место, где определен любой из интересующих его членов. Можно поделить весь класс на 3 группы и оформлять его в этом порядке лучше их и записывать: - статические члены (static) - конструктор - члены экземпляра Второе деление проходит по типам членов: - константы (const) - переменные (var) - свойства (get/set, геттер в этой паре всегда должен идти первым) - методы - обработчики событий Констант у экземпляров не бывает. Фактически это свойства. Дальше режим по видимости членов класса: - public - уникальный namespace - internal - protected - private Последние деление: - Переопределённые члены (override) - Члены интерфейса (implements) - Обычные члены - Все члены напрямую связанные с каким-то членом, лучше и писать рядом с ним, например: private var _a:uint = 0; public function get a():uint { return this._a; } 2. ASDocs Все члены класса должны иметь ASDocs: /** * @private */ private var _a:uint = 0; /** * описание свойства */ public function get a():uint { return this._a; } 3. Метаданные Метаданные описываются пред ASDoc'ами: [Bindable] /** * описание свойства */ public function get a():uint { return this._a; } 3.1. Метаданные класса Метаданных класса в своём большинстве может быть дофига, поэтому выделим 2 группы: События ([Event(...)]) Прочие 4. Полный список порядка следования: public static const. namespace static const. internal static const. protected static const. private static const. private static var. public static get/set. namespace static get/set. internal static get/set. protected static get/set. public static function. namespace static function. internal static function. protected static function. private static function. constructor. private var / const. public override get/set public implements get/set public get/set namespace override get/set namespace get/set internal override get/set internal get/set protected override get/set protected get/set public override function. public implements function. public function. namespace override function. namespace function. internal override function. internal function. protected override function. protected function. private function. events handlers. 5. Именование - Константы (статические): UPPER_CASE; - Публичные свойства, методы, имена локальных переменных: camelStyle (camel-style, верблюд, каждое слово с прописной, первое — со строчной); - private/protected (internal и custom namespace по ситуации) свойства с обязательным подчеркиванием в начале: _camelStyle; - Свойства, являющиеся членами экземпляра класса, объявленные как const по объявлению не отличаются от обычных свойств (т. е. не используется UPPER_CASE); - Имена классов с прописной: MyClass; - Имена обработчиков событий: handler_eventName. "eventName" является значением константы соответствующего события (например MouseEvent.MOUSE_OVER -> handler_mouseOver) 6. this/super. Обязательное и повсеместное использование this. Для вызова родительских методов и свойств по умолчанию рекомендуется использовать super (например super.addChild вместо this.addChild). 7. Оформление кода 7.1 Помимо упомянутого ASDoc необходимо также размещать шапку класса (в самом начале класса, год меняется в соответствии с текущим): //////////////////////////////////////////////////////////////////////////////// // // YOUR DOMAIN© ${year} // //////////////////////////////////////////////////////////////////////////////// 7.2 Стандартный ASDoc с именем автора класса (перед объявлением класса в пакете): /** * @author %nickname% * @version 1.0 * @playerversion Flash 9 * @langversion 3.0 */ NB: Имя автора класса в дальнейшем не изменяется, даже если другой человек полностью его переписал. Авторство остается за тем, кто его создал. 7.3 Визуальное отделение (желательно) однотипных членов класса комментариями-спойлерами: //------------------------------------------------------------------------ // // Class variables // //------------------------------------------------------------------------ ...переменные класса... //------------------------------------------------------------------------ // // Constructor // //------------------------------------------------------------------------ ...конструктор... и т. д. 7.4 Все недоступные снаружи (кроме public) члена класса должны иметь ASDoc @private: /** * @private */ 7.5 Визуальное разделение блоков кода пустыми строками (обозначены как ***): var x:Number = 10; var y:Number = 20; *** super.addChild...; super.removeChild...; super.setChildIndex...; x = 50; *** if (x > 40) { (фигурная скобка не переносится, пустой строки после скобки также нет) this.move(50, 60); *** if (y == 90) { super.doSomething(); this.doAnotherThing(); } *** if (super.enabled) super.disable(); (в однострочном условии, цикле и т. п. фигурные скобки можно опустить и писать в одну строку) this.render(); } *** this.done(); 7.6 При именовании следует избегать избыточности. Не стоит допускать имен, состоящих более чем из четырех слов. Аббревиатуры и сокращения в нижний регистр не переводятся (playerID вместо playerId, CSSUtils вместо CssUtils, SWFFormat вместо SwfFormat и т. д.) 7.7 При написании однотипных членов класса стоит соблюдать логический порядок. Например, если некие команды сервера описаны в xml-файле, то их реализация в коде должна иметь в коде такой же порядок следования, что и в xml. Методы добавления/удаления чего-либо должны следовать вместе (addChild, потом removeChild и т. п.) Порядок подписки/отписки на события какого либо объекта должен совпадать с порядком следования обработчиков: super.addEventListener(Event.ADDED, this.handler_added); super.addEventListener(Event.ADDED_TO_STAGE, this.handler_addedToStage); super.addEventListener(Event.REMOVED_FROM_STAGE, this.handler_removedFromStage); ... super.removeEventListener(Event.ADDED, this.handler_added); super.removeEventListener(Event.ADDED_TO_STAGE, this.handler_addedToStage); super.removeEventListener(Event.REMOVED_FROM_STAGE, this.handler_removedFromStage); ... private function handler_added(event:Event):void { ... } private function handler_addedToStage(event:Event):void { ... } private function handler_removedFromStage(event:Event):void { ... } 7.8 Константы событий и их значения напрямую связаны друг с другом путем перевода из UPPER_CASE в camelStyle. Т. е. если константа типа события имеет имя VARIABLE_CHANGE, то значение его будет variableChange. Иные варианты не допускаются. При постановке метатега [Event] и при написании подписки на события в Flex Builder редактор автоматически добавляет в список доступных события, указанные в метатегах, при этом имя константы будет получено переводом значения параметра name из camelStyle в UPPER_CASE. При написании имени обработчика события после handler_ пишется значение константы. 8. Прочее Для удобства разработки советую использовать Eclipse Monkey (http://download.eclipse.org/technology/dash/update) Эта тулза ускоряет разработку раз в несколько, за скриптами для него обращаться на m.sychev@crazybit.ru Формат хранения swf-библиотек. Flash Player 10, Actionscript 3.0, Flash CS4. Именование через ‘_’ например: button_0_0_up, window_3_1, question_icon
Комментариев нет:
Отправить комментарий
Поделиться своими мыслями...