30 октября 2012

Документация actionscript 3

Нашел в своих архивах правила оформления кода при написание приложение на 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


Комментариев нет:

Отправить комментарий

Поделиться своими мыслями...