Flexのコーディング規約

Adobe Edge: 2008年6月 コーディングスタンダードのススメ
こんな記事が上がってきて、そういえばまだコーディング規約に目を通していなかったなと遅まきながらチェックしてみる。
基本的にJavaスタイルベースで書けばだいたい大丈夫だと把握。気になったところだけメモ。
命名規則
名前は略さないのが基本だが、いくらかお決まりの略称が用意されている。
* acc for accessibility, as in ButtonAccImpl * auto for automatic, as in autoLayout * eval for evaluate, as in EvalBindingResponder * impl for implementation, as in ButtonAccImpl * info for information, as in GridRowInfo * num for number of, as in numChildren * min for minimum, as in minWidth * max for maximum, as in maxHeight * nav for navigation, as in NavBar * regexp for regular expression, as in RegExpValidator * util for utility, as in StringUtil
頭文字でできた略語は全部大文字にするか全部小文字にするかのどちらか。例えばSWFなら、Swfではなく、SWFかswfにする。ちなみに、AIR(エア)など単語のように読ませるものをacronym、CSS(シーエスエス)のようにアルファベットで読ませるものをinitialismというらしい(Acronym and initialism – Wikipedia)。
アセットのファイル名は小文字で、アンダースコアで区切る(icon_align_left.pngなど)。
アクセサ
getHoge()やsetHoge()ではなくgetter/setterを使う。ただし、getHoge()が計算に時間のかかるメソッドのときは、getterは使わず、findHoge()、calculateHoge()、determineHoge()などと名づけて、遅いメソッドであることを示唆しなさいと。なるほど。
setterの引数にはvalueを使う。
public function set hoge(value:String):void
getter/setterでhogeを扱うとき、保存する変数は_hogeにする。
イベントハンドラ
イベントハンドラの名前はイベントの種類+Handler。mouseDownHandler()など。個人的にはonMouseDown()のほうが好みなんですが。引数にはeventを使う。eなどは駄目。要するにこれが制式。
protected function mouseDownHandler(event:Event):void
サブコンポーネントからイベントが送られるときはプリフィックスにコンポーネント名を入れてアンダースコアで区切る。textInput_focusInHandler()など。
配列その他
Arrayには何の型の要素が入るかコメントで注釈すること。まだ調べてませんが、Flash 10ではVectorを使うところなんでしょう。
var a:Array /* of String */ = []; function f(a:Array /* of Number */):Array /* of Object */
Arrayの初期化には基本的に配列リテラルを使うこと。サイズを指定するときのみArrayコンストラクタを使う。
× new Array() × new Array(1, 2, 3) ○ [] ○ [ 1, 2, 3 ] ○ new Array(3)
オブジェクトも同様。
× new Object()
○ {}
○ { a: 1, b: 2, c: 3 }
以下、正規表現やXMLなどの例がありますが、要はリテラルで簡潔に書けるときはいつでもそうするようにってことですね。
16進数はx以外大文字で(0xFFCC88)。Numberの定数は必ず小数部まで表記すること(1なら1.0)。ただし、ピクセルの座標は例外。
overrideキーワードはアクセス修飾子の前、static、finalキーワードはアクセス修飾子の後ろに書くこと。
override protected method measure():void public static const MOVE:String = "move"; public final class BoxDirection
コンストラクタが変数を初期化する引数を取るときは、変数と同じ名前で。
public function MyClass(foo:int, bar:int)
{
this.foo = foo;
this.bar = bar;
}
あと、括弧の位置が自分の趣味に合わない。それに、1行80文字制限なんていまどきないんじゃないかと思うんですが……このあたりは丁重にスルーさせてもらうということで。ひとまずこんなところでしょうか。
やっぱりいろいろ議論があるらしい。