コーディング規約

Flashの制作会社では、作っていない会社のほうが多いように思いますが、なんとなく世の中のコードに規則性があるのでまとめてみました。アクションスクリプトのオリジナルコーディング規約です。

変数名

基本は半角英字で、始まりは小文字、区切りには大文字を使います。ランタイムの実行速度にも影響するので、原則として型指定を行います。

var myPopupMovie :Sprite = new Sprite();

タイムラインに配置するムービークリップなど

接尾肢を付けます。古典的なルールですが、これはコードヒントも表示されるので常用しています。

my_mc // ムービークリップ
my_txt // テキストフィールド
my_btn // シンプルボタン

タイムラインに配置するものは接尾肢をつけ、スクリプトで生成するものは次項のルールで変数名を付けてます。タイムラインとスクリプトのどちらで準備したオブジェクトか、名前でわかれば便利だと思ってます。

アクションスクリプトでの変数

変数の型を小文字にして先頭文字を頭を付けるとわかりやすいです。AS3.0になると色んな型が増えたのでこれは賛否両論な気がしますが、AS2.0時代は有用なルールだったと思います。

var mMyAnimation:MovieClip; // mはムービークリップ
var sMyAlert :String; // sはストリング型
var aList :Array; // aは配列

クラス名

始まりは大文字で後ろは小文字。単語が変わる度に大文字を使う。

class MyClass{}
class FukidashiImage{}

パッケージ名

全部小文字で、自分のドメイン名を逆さにして使います。クラスは世界中で唯一を保証するためです。

// clockmaker.jpの場合は逆さにしてjp.clockmaker
package jp.clockmaker
{
    public class MyClass{}
}

プライベート変数 / プライベートメソッド

変数名の頭にアンダーバーを付ける。

private var _nMaxItems :Number = 100;
private var _aXmlData :Array = [];
private function _render() :void
{
    // hogehoge
}

prototype拡張してクラスを作っていたAS1.0時代は、このアンダーバーは常用していましたが、AS3.0のクラス内ではアンダーバーを使う人が少なくなってきた印象があります。個人的にはthis参照しなくても読みやすいので、アンダーバーを付けるようにしてます。

パブリック変数 / パブリックメソッド

特に頭にアンダーバーを付けずに命名

public var maxItems :uint = 100;
public var xmlData :Array = [];
public function render() :void
{
    // hogehoge
}

setter/getter

できれば一単語の小文字の英単語。

private const MAX_WEIGHT:Number = 100;
private var _weight :Number;
public function set weight( num:Number ) :void
{
    if( num < MAX_WEIGHT ) _weight = num;
}
public function get weight( ) :Number
{
    return _weight;
}

セッター/ゲッターはコリン・ムック氏によればモディファイヤー/リトリーバーと呼んだ方が良いのですかね。

定数

大文字で区切り文字はアンダーバー

private const MAX_ITEMS :int = 10;
private const ERROR_TEXT :String = "エラーが起きたよ";

静的定数

大文字で区切り文字はアンダーバー。同じクラス内で参照するときにはクラス名を先頭に付ける。これもコリン・ムック氏のアドバイス

public class MyClass
{
    static public const LOAD_COMPLETE :String = "loadComplete";

    public function MyClass()
    {
        trace( MyClass.LOAD_COMPLETE ); // MyClass. は省くことができるが、付けるのがコリン氏のお勧め
    }
}

import文

面倒なので、*による参照がお勧め。参照するクラスがない場合にコンパイルエラーになりますが、それを未然に防ぐため。

import flash.display.*;
import flash.events.*;

import jp.clockmaker.*;

イベント名

クラス内に必ず静的定数を用意しておく。外部からは定数を参照するようにする

package jp.clockmaker
{
    import flash.events.*;
    import flash.display.*;

    public class MyClass extends EventDispatcher
    {
        static public const ANIMATION_FINISH:String = "finish"; // 静的定数

        public function stopAnimation():void
        {
            dispatchEvent( new Event( MyClass.ANIMATION_FINISH ) );
        }
    }
}

//timeline
var myClass:MyClass = new MyClass();
myClass.addEventListener( MyClass.ANIMATION_FINISH, onFinishHandler );
function onFinishHandler( e:Event ):void{}

いろいろ長々と書きましたが、アクションスクリプトの自己流プログラミング規約いかがでしたでしょうか?アドバイスがございましたら、ぜひどしどしコメントに投稿ください!

追記

Livedocsに命名規則に関する記事が載ってました。Livedocsのほうが詳細で丁寧ですが、「_」テクニックなど実用的なことは触れてないので、あわせて参照するといいかも。
http://livedocs.adobe.com/flash/9.0_jp/main/wwhelp/wwhimpl/common/html/wwhelp.htm?context=LiveDocs_Parts&file=00001090.html