pblog

pplog.net を作っている @ppworks こと越川直人(Koshikawa Naoto)のブログ。esa LLCで働いてます(\\( ⁰⊖⁰)/)

コーディング規約 命名規則編

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;

パッケージ

  • LCCで記述する
  • 特定の概念を表す、名詞や動名詞を使用する
  • 複数のアイテムを実装する場合は複数形とする
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
{
...
}

名前空間

アンダースコアスタイル

mx_internal

インタフェース

先頭をIとし、以降をUCCで記述する

IFocusManager

クラス

UCCで記述する

public class SomeClassName
{
...
}

イベント

LCCで記述する

public static EVENT_COMPLETE:String = "eventComplete";

スタイル

LCCで記述する

color, fontSize

プロパティ、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
{

}
public function mouseDownHandler(event:Event):void
{

}

その他

  • objectという名は使わない
  • itemはデータアイテムを指すので、Display表示ツリー内のアイテムという意味で使わない
  • rendererは、データアイテムを表示可能なDisplayObjectという意味で使用する。
  • typeはAS3の型を示します。それ以外の場面では、「kind」を使用する。