GPPのコーディング規則です。 勝手に別のプロジェクトとかで使ってもいいです。 また、この規則はめずもなのAS3.0に最適化されているかも。 このページはまだ編集中です。
インデント
- タブスペースのサイズは半角スペース4つ分。
- 段落やASDocのタグ揃えにTabを使い、それ以外は半角スペースを利用してください。
- パッケージ, クラス, メソッドの"{"は次の行から始めてください。
- オブジェクト宣言以外と上記以外の"{"は" "を前に入れてください。
- オブジェクト宣言の"{"は前後にインデントは必要ありません。
- if-else, else, try, finallyは直前で改行をしてください。(コメントを入れやすくするため)
- ただし、一行しか処理を書かない場合は"{}"を省略しない状態で一行で書いてもいいとします。
- 引数などに使われる","の後には半角スペースかタブを1つ以上入れてください。
- 型宣言の":"の前後には半角スペースは入れないでください。
- ループさせる前にlなどの変数で配列長を取得して、その値分だけループさせるようにしてください。
// パッケージ, クラス, メソッド package { public class Hoge () { public function Hoge () { // オブジェクト宣言, パッケージ, クラス, メソッド以外 if (true) { trace("変わりようの無い事実"); // ... } // そんな事はない else { trace("あれ?"); // ... } // ScriptTimeoutErrorは2回発行、1回目しか取れない仕様 catch { var l:int = ["t", "e", "s", "t"].length; for (var i:int=0; i<l; i--) { trace("無限ループって怖いね"); if (i & 1) { trace("偶数"); } else { trace("基数"); } } } // こういう風にコメント入れられる try (e:ScriptTimeoutError) { var traceObj:Object = {y:"ゆっくり", s:"して", i:"いって", n:"ね!"}; trace(traceObj.n); } } public static function hogeHoge ():String { return String.fromCharCode(12362, 21069, 12373, 12435, 12418, 26247, 12384, 12394); } } }
メンバ定義
- 修飾子は以下の順番で書きます
- public, internal, protected, private
- static
- override
- final
- const, function, var
たとえばこういう風に書きます
public static override final function foo ():void;
コメント
- 1行コメントの場合は"//"を使用してください。
- コメント開始直後(とコメント終了直前)は改行、半角スペース、タブスペースのいずれかにしてください。
- ドキュメントコメント(/** ~ */)は基本的にASDocの規則にしたがってください。
構文 最適化
- 三項演算子(?:演算子)は極力使わないでください。 (if条件演算子と速度が重いか同程度で、見づらくなることが多いため)
- ブロック({})の省略は控えてください。
- 式を最適化した場合は、最適化前のソースをコメントで残してください。
var i:int; // var hoge:uint = uint (i/2); var hoge:uint = i >>> 1;
パッケージ / クラス名
- パッケージ名は小文字のみ。
- パッケージ名の最初にプロジェクトのロケーションを書きます。(大概はドメインからになります。)
- ロケーションの次にプロジェクト名をつけます。
- プロジェクト名のパッケージ中に機能別にパッケージを分けていきます。
- クラス名は大文字からはじめ、大文字小文字を混同させて単語の区切りがわかるようにします。
squareというクラス名にしたい場合 Squareというクラス名になります。
play soundというクラス名にしたい場合 PlaySoundというクラス名になります。
変数 / 定数 / メソッド / イベントハンドラ名
- 変数の型によって接頭辞をつけないでください(AS3.0は型安全であるため)
- 変数名は小文字から始め、クラス名と同じく大文字小文字を混同させて単語の区切りが分かるようにします。
- privateメンバー変数の名前は接尾辞として"_"を付けてください。
- 変数は必ずprivateで宣言し、get/setメソッドで受け渡ししてください。
- 定数名は全て大文字で始め、単語間を"_"で繋ぎます。
- メソッド名は小文字からはじめ、クラス名と同じく大文字小文字を混同させて単語の区切りが分かるようにします。
- メソッド名は戻り値がある場合は接頭辞をつけます。
has* 指定されたオブジェクトが存在するか? is* 状態の判定(たいていBoolean型が戻り値) get* 指定したオブジェクトを取得
他は今後作るページに乗せます。
- また、機能がついになるメソッド名は接頭辞もついになるようにします
add/remove get/set start/stop begin/end first/last next/prev now/old show/hide など...
- イベントハンドラ名は接頭辞にonをつけ、その後にイベント名を頭文字を大文字にして付けます。
- 変数 / 定数 / メソッド / イベントハンドラ名は基本的に省略しませんが、XMLなどの一部の世間的に広まっている単語は除きます。
- パブリックフィールドはなるべく使用しないでください。
- その代わりプロパティやアクセッサを利用してください。
その他
- 文字コードを「UTF-8」。改行コードを「LF」にします。
- 一応その情報をタブサイズと一緒にソースの先頭に書くこと
// tab=4 // encoding=UTF-8 // newline=LF
- メソッドを定義するときはfunctionName ()みたいにメソッド名と引数の間を半角スペースか改行
- メソッドを呼び出すときはfunctionName()とくっ付ける
レイアウト
本来はタブを使用しますが、ここでは半角スペースで代用しています。 また、それぞれの区切りの中でさらにアクセス修飾子などによって区切りがあります。 一番左に来ているものを前に書きます。箇条書き数字が若い方を優先します。 ただし、複数に重なるのはメソッドをもっと分割できると予想されます。
- static > instance
- public > protected > internal > private
- const > var > function
レイアウト例(めずもな)
// tab=4 // encoding=UTF-8 // newline=LF package jp.example.gpp { // imports import flash.display.Sprite; /** * クラス説明 * @author コーディング者 * @version 保存時刻 * @since 作成時刻 * @see 必要ならば此処に */ public class Hoge extends Sprite { // staticな定数 /////////////////////////////////////////////////////////////////////////// public static const HOGE_TEST:String = "test"; // staticな変数 /////////////////////////////////////////////////////////////////////////// public static const staticValue:Number; // コンストラクタ ///////////////////////////////////////////////////////////////////////// public function Hoge () { z = 42; } // 上記以外の変数 ///////////////////////////////////////////////////////////////////////// var z_:Number; var rotationZ_:Number; // getter/setter ////////////////////////////////////////////////////////////////////////// /** * getter/setterがあるばあいはこっちにドキュメントコメント。 */ public function get z ():Number { return z_; } public function set z (value:Number):void { z_ = value; } /** * AS3.5には追加されるっぽいね */ public function get rotationZ ():Number { return rotationZ_; } public function set rotationZ (value:Number):void { rotationZ_ = value; } // 入力メソッド /////////////////////////////////////////////////////////////////////////// /** * メソッドの説明。 * @param src 追加するオブジェクト。(@param, @returnでは改行はしないでください。) * @param isHoge (default = false)デフォルト値がある場合はこう書く。(Stringとかなら""も) * @return 成功したかどうか */ public function addHoge (src:Sprite, isHoge:Boolean=false):Boolean { // ... return true; } // 演算メソッド /////////////////////////////////////////////////////////////////////////// /** * で、説明どうするよ。 * @param rest 可変変数はこうすれば良い。 */ public function startHoge (...rest):void { // ... } /** * 状態調べたり、消したりするのはこっちだね */ public function removeHoge (src:Sprite, isHoge:Boolean=false):Boolean { // ... return true; } /** ごめん、説明考えるの無理 */ public function isHoge (dest:Sprite):Boolean { // ... return false; } // 出力メソッド /////////////////////////////////////////////////////////////////////////// /** * 特定の情報を出すものはここに */ public function getHoge (index:int):Sprite { return new Sprite(); } // イベントハンドラ /////////////////////////////////////////////////////////////////////// /** * hogeイベントが発行されると呼び出されます。 */ public function onHoge (msg:HogeEvent):void { trace("hogehoge"); } } }