http://opensource.adobe.com/wiki/display/flexsdk/Coding%20Conventionsを自分用にまとめた。
とりあえず命名規則。最終的にadobe flex sdk拡張の自分的コーディング規約を作るのが目標。
短縮形
短縮形は一般的なもの以外は使わないようにする。
短縮した文字列 | 元の文字列 | 例 |
---|---|---|
acc | accessibility | ButtonAccImpl |
auto | automatic | autoLayout |
eval | evaluate | EvalBindingResponder |
impl | implementation | ButtonAccImpl |
info | information | GridRowInfo |
num | number of | numChildren |
min | minimum | minWidth |
max | maximum | maxHeight |
nav | navigation | NavBar |
regexp | regular expression | RegExpValidator |
util | utility | StringUtil |
頭字語
頭字語の綴りは、必ず大文字または小文字のいずれかで統一する。識別子を大文字で始めるか、小文字で始めるかなどは後述の規則に従う。
頭字語 | 元の文字列 |
---|---|
AIR | Adobe Integrated Runtime |
CSS | Cascading Style Sheets |
HLOC | High Low Open Close |
IME | Input Method Editor |
MX | Miracle Experience |
MXML | Macromedia fleX Markup Language |
RPC | Remote Procedure Call |
RSL | Runtime Shared Library |
SWF | ShockWave Flash Object |
UI | User Interface |
UID | User IDentification |
WSDL | Web Services Description Language |
XML | Extensible Markup Language |
単語の区切り
キャラメルスタイルとは、単語の区切りを大文字とするスタイル。特にすべての単語の区切りを大文字とする場合を「UCC(Upper Caramel Case))」という。先頭だけ小文字にする場合を「LCC(Lower Caramel Case)」という。アンダースコアスタイル(各単語を_で繋ぐ)のいずれか。コンテキストによって使い分ける。
コンテキスト | スタイル | 備考 | 例 |
パッケージ | キャメル(LCC) | なるべく1単語で | package jp.mixi.music.player |
名前空間 | アンダースコア | - | namespace mx_internal |
インターフェース | 先頭I + キャメル(UCC) | - | IEventDispatcher |
クラス | キャメル(UCC) | - | class Main |
イベント名の値 | キャメル(LCC) | - | public static const EVENT_COMPLETE:String = "eventComplete" |
プロパティ | キャメル(LCC) | - | private var playerSetting:PlayerSetting; |
メソッド | キャメル(LCC) | - | public function checkEnvironment():void; |
イベントハンドラ | キャメル(LCC) + Handler | this以外はプロパティ名 + _ + キャメル(LCC) + Handler | mouseDownHandler; ticketLoader_completeHandler; |
名前に型を含める方法
ActionScript1の古い規則は使用しない
var hoge_btn:Button; var border_mc:MovieClip;
クラス名を小文字にしたものや、イメージしやすい名前を付ける
var button:Button; var border:MovieClip; var borderSkin:MovieClip; var borderShape:MovieClip;
パッケージ
binding、logging、messaging、printing accessibility、core、graphics、rpc charts、collections、containers、controls、effects、events、formatters、managers、preloaders、resources、skins、states、styles、utils、validators
ファイル
import可能なファイルは含まれる唯一のpublicオブジェクトの名称と一致させる
- Hoge.as
public class Hoge { ... }
- getHoge.as
public function getHoge { ... }
インタフェース
先頭をIとし、以降をUCCで記述する
IFocusManager
クラス
UCCで記述する
public class SomeClassName { ... }
プロパティ、getter/setter、変数
- LCCで記述する
- forループはindexをi, 上限をn。内部ループにはそれぞれj, mを用いる。
for (var i:int = 0; i < n; i++) { for (var j:int = 0; j < m; j++) { } }
- for inループにはpを用いる。
for (var p:String in someObject) { }
ストレージ変数
getter, setterに対応するストレージ変数には、そのアクセス子に_を付けたものとする
private var _color:uint; public function get color():uint { return _color; } public function set color(value:uint):void { _color = value; }
メソッド
- LCCで記述する
- 動詞を用いる
- パラメータを指定しないメソッドは極力getter, setterにする
- ただし、処理が多い場合はfindHoge, calculateHogeとする
- 基底クラスのメソッドをオーバーライドしたが、基底クラスの基底メソッドも使いたい場合、基底クラスの基底メソッド用のメソッドには以下のように$をつけてfinal属性で定義しておく。
/** * addChildをオーバーライドしたメソッド * @param child 追加する子供 */ override public addChild(child:DisplayObject):DisplayObject { // オーバーライドした処理 } /** * 基底クラスの振る舞いをするメソッドは$をつけてfinal属性で定義する * @param child 追加するDisplayObject */ public final $addChild(child:DisplayObject):DisplayObject { return super.addChild(child:DisplayObject); }
イベントハンドラ
LCC + Handlerを付ける。
(私はEssential ActionScript3.0を呼んで以来、LCC + Listenerとしていましたが、AS3ではaddEventListenerで登録する対象がhandlerなので、LCC + Handlerに納得しました。)
mouseDownHandler
someComponent_hogeHandler
引数
- setterの引数はvalueとする
public function set label(value:String):void { }
- イベントハンドラの引数はeventとする
public function mouseDownHandler(event:Event):void { }
その他
- objectという名は使わない
- itemはデータアイテムを指すので、Display表示ツリー内のアイテムという意味で使わない
- rendererは、データアイテムを表示可能なDisplayObjectという意味で使用する。
- typeはAS3の型を示します。それ以外の場面では、「kind」を使用する。