secondlife コーディングルール
俺俺 AS3 のコーディングするときに適用しているルール。特に何かのコーディング規約を参考にしているわけではなくなんとなく。JavaScript? 書く感じに近いかも
全般
こんな感じに書いてます。(このコードは動かないよ!)
package com.example {
import flash.display.Sprite;
public class Example extends Sprite {
public function Example() {
super();
}
public function fooBarBaz(arg1:Number, arg2:RegExp, ... args):String {
var foo:String = 'foo';
if (foo == bar) {
//
}
for (var i:uint = 0; i < expression; i++) {
}
for each (var key:String in hash) {
hash[key] = baz();
}
return foo;
}
public function mouseDownHandler(e:Event):void {
//
}
}
}
インデント
tab は使わずスペース四つ
スペース位置
- {, } を書く場合は必ず前にスペースを入れる
if (exp) { // } else if (exp) { // } else { // }
- = の前後もスペースを入れる
- , 行末でない; の後にはスペースを入れる
call(foo, bar, baz); for (var i:uint = 0; i < expression; i++) {
- 型指定 : の前後はスペースを入れない
var foo:String = ''; public function foo():void {
変数, 関数名
- 基本は camelCase
fooBarBaz originalSize completeHandler
- 頭に _ はつけない。_をつけるのは getter/setter でラップする変数のみ
private var _size:int; public function get size():int { return _size; } public function set size(newSize:int):void { _size = newSize; }
- this でのインスタンス変数(プロパティ)呼び出しは基本行わない。ローカル変数で重複する場合や、見通しが悪い時のみつける
public var times:uint; public function run(times:uint):void { this.times = times; }
キャスト
- キャストはただの変数キャストなら 型() で、レシーバ呼び出しの戻り値では as で行う。型() と as だと挙動がちがうけどまぁ、、、。見通し優先。
var x:Number = Number(num);
var x:Number = foo.methodCall() as Number;
// この書き方は見づらいのでしない var x:Number = Number(foo.methodCall());
イベントリスナ
- 自分自身に対するリスナはイベント名の camelCase + Handler で
private function mouseDownHandler(e:Event):void { - 自分自身のプロパティや変数に対するリスナ(バインドメソッド)の場合は、変数名 + イベント名 + camelCase + Handler で
private var star:Sprite; // 中略 private function starMouseDownHandler(e:Event):void {
コメント
- コメントは一行、後置なら // で。三行以上やドキュメントなら /* */ で。
// コメント /* * 三行 */
前置 if/for
- 前置 if は基本一行で書く。
if (a == b || c == d) foo.callMethod(bar);
行が長いときは二行に。また三行以上の時は {} を使う。
if (a == b || c == d || e == f)
foo.bar.bazcallMethod(arg1, arg2, arg3);
- 前置 for(って云うの?) は使わない。for は後に複数行になることが多いので。
if/else if/else
- 基本的に制御構造の部分は一行で書く
if (exp) { // } else if (exp) { // } else { // }
行末のセミコロン
- AS3 では行末のセミコロンを省略できる場合がほとんどが、明示的に ; はつける。
foo = bar; doSomething(); fooBarBaz(arg); - Ruby だとセミコロン省略が普通だけど AS3 だとなんか気持ち悪いんだよね…。
// これでも動く、けど気持ち悪い foo = bar doSomething() fooBarBaz(arg)
