ActionScript 3.0 コーディング規約の日本語訳

ActionScript 3.0 コーディング規約とも言うべき Adobe の

Coding Conventions – Flex SDK – Confluence

の日本語訳に取り組んでいます。

一晩じゃ終わりませんでした。すいません。毎度のことですが、英語も AS も自信ナイので、読まれる方は原文と照らし合わしながら読むとよいかと思います。まぁ原文もコードが中心なので訳す必要があるのかも謎ですが、パッと目を通して概要を知るきっかけにはなるかと思います。まだまだ翻訳途中ですが、間違えてたら教えてください。

ちまちま手を入れていきますのでよろしくです。ページの整形(スタイルシート)もあとでやります。

(日本語訳ココから)


Flex SDK coding conventions and best practices

Note:このページはまだ完成していません。いくつかの箇所はまだ途中だったりしますが、でもまずは書かれている部分からだけでも始めてみるといいでしょう。

Introduction

このドキュメントは ActionScript 3 製のオープンソース Flex フレームワークコンポーネントのコーディング規約です。この規約に従うことで首尾一貫して綺麗なプロっぽいコードが記述できます。

これらの規約は必ずしも “最善の” コードだとは断言できませんので、絶対に従えということではありませんが、それでもこの整合性は重視されますし、今後も Flex SDK プロジェクトはこれらの規約に準拠していく予定です。

Contents

命名規則
Language Usage
File Organization
コードフォーマット
ASDoc

命名規則

正しい命名規則を守れば、使いやすく理解しやすいコードを書くことができます。正しい名前を名付けるために時間をかけて考えることはとても大事なことです。API としての公開を考えている場合にはなおさらです。

ここで紹介する命名規約は ECMAScript と Flash Player 9 の規約にのっとって制定しています。

略語

略語の使用は避けましょう。例えばメソッド名を calcOptVal() にするよりも calculateOptimalValue() にする方が良いです。

名前を短くしてキーストロークを短くするよりも、言葉の意味を明確にすることの方が重要です。もしあなたが略語を使わなければ、他のデベロッパー達も(本来 “qualified” を意味する) “qual” とか “qlfd” が一体何を意味していたかを覚えておかなくても済むからです。

しかし、いくつかの略語は判例化されています:

  • 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 のように使います。

このリストの内容が略語の全てではありません。もし上記リストにない略語を使おうと思った時は、ネットでソースコードを探してみて、その言葉が既に使用されているものかどうかを調べてみると良いでしょう。もし見つからなければその略語を使うのが本当に適切なのか、もう一度考え直してみましょう。

時に我々(Flex SDK 開発チームかな?)は(故意に)略語について相反する命名をしていることがあります。例えば、我々は “horizontal” と “vertical” を使って多くの場合 horizontalScrollPolicyverticalScrollPolicy と命名していたりしますが、その一方で、 H と V に省略した上で、それらを使って重要なパーツであるコンテナの名前を HBoxVBox と命名したりしていますね。

頭字語

いくつかの頭字語:AIR, CSS, HLOC, IME, MX, MXML, RPC, RSL, SWF, UI, UID, URL, WSDL, XML といった単語は Flex 界では有名な頭字語です。

頭字語は全部が大文字か、全部が小文字で使います(例:SWFswf は使っても Swf は使いません)。全てを小文字で表記するのは、頭字語の名称そのものを識別子(インスタンス名)として使う時と、識別子の先頭文字に使う時に限られます。どの場合にどういった識別子名をつければよいかは以下の規約をご覧下さい。

頭字語を使った識別子の命名例:CSSStyleDeclaration, IUID, uid, IIME, and imeMode

単語の連結

複数の単語から構成されている場合、単語の境目の処理方法は:インターキャプス方式(例:LayoutManagermeasuredWidth)と、アンダースコア方式(例object_proxy)の2通りあります。どちらの方式を選ぶかは以下の規約にお読み下さい。

単語が1単語なのか連結語なのか判断しにくい時もあります、我々(開発チーム内)でも矛盾が起こる場合があります。例:dropdown, popUp, pulldown

まれに上記の「頭文字ルール」に該当する2単語が隣接する場合が起こります。例えば、loadCSSURL() のような場合(まぁ実際は使用を控えますが)のような場合です。ですが、こういう名前は避けるべきです。

タイプを特定しやすい命名法について

(「ムービークリップ」や「ボタン」といった)タイプが分かりやすくなるように命名したい場合は、“その単語”を最後尾につけるようにします。旧来の ActionScript 1 で使われていた _mc といった型の略語を表す接尾辞の使用はやめましょう。例えば、ボーダー状の図形の名前を borderborderSkinborderShape と命名するのは大丈夫です。決して border_mc にしてはいけません。

状況にもよりますが、最善の命名規則は、単純にそのオブジェクトの型を異なるケース(大文字なら小文字という意味)で命名したものがいいでしょう:

var button:Button = new Button();

パッケージ名

先頭文字を小文字で始め、以降はインターキャプス方式で命名しましょう。例:controls, listClasses

パッケージの名前は名詞か動名詞 (動詞の一種ですが -ing を付けて名詞扱いとする)にしましょう。動詞や形容詞、副詞にしてはいけません。

似たような機能をまとめる、つまりパッケージにする際は、その(機能の)複数形で名付けるようにしましょう。例:charts, collections, containers, controls, effects, events, formatters, managers, preloaders, resources, skins, states, styles, utils, validators

パッケージ名にはその機能(コンセプト)を表す動名詞を使うのが一般的です。例:binding, logging, messaging, printing。あるいは、”機能を表す名詞”にするようにします。例:accessibility, core, graphics, rpc.

例えば、FooBar コンポーネントサポート用のクラスを入れるパッケージには fooBarClasses と名付けましょう。(サポート用クラス?原文:A package containing classes that support component FooBar should be called fooBarClasses.)

ファイル名

For importable APIs, the file name must be the same as the public API inside. But include files don’t have to follow this rule.

Start the names of include files for [Style(...)] metadata with an uppercase letter, use intercaps for subsequent words, and make the last word “Styles”: BorderStyles.as, ModalTransparencyStyles.as.

(画像等の)アセットファイル名は先頭文字は小文字で、単語と単語の間はアンダースコアで繋ぎます。例:icon_align_left.png.

名前空間名

先頭文字は小文字で、単語と単語の間はアンダースコアで繋ぎます。例:mx_internal, object_proxy.

インターフェース名

先頭に I を、あとはインターキャプス方式で命名します。例:IList, IFocusManager, IUID.

クラス名

先頭文字を大文字で始め、以降はインターキャプス方式で命名しましょう。例:Button, FocusManager, UIComponent.

Event クラスのサブクラスは FooBarEvent というふうに命名します。

Error クラスのサブクラスは FooBarError というふうに命名します。

the EffectInstance subclass associated with effect FooBar FooBarInstance.

Formatter クラスのサブクラスは FooBarFormatter というふうに命名します。

Validator クラスのサブクラスは FooBarValidator というふうに命名します。

Name skinning classes FooBarBackground, FooBarBorder, FooBarSkin, FooBarIcon, FooBarIndicator, FooBarSeparator, FooBarCursor, etc.

Name utility classes FooBarUtil (not FooBarUtils; the package is plural but the class is singular).

It is common to name a base class FooBarBase: ComboBase, DateBase, DataGridBase, ListBase.

イベント名

先頭文字を小文字で始め、以降はインターキャプス方式で命名しましょう。例:"move", "creationComplete".

Style names

先頭文字を小文字で始め、以降はインターキャプス方式で命名しましょう。例:color, fontSize.

Enumerated values for String properties

先頭文字を小文字で始め、以降はインターキャプス方式で命名しましょう。例:"auto", "filesOnly",

定数

全てを大文字にし、単語と単語の間はアンダースコアで連結します。例:OFF, DEFAULT_WIDTH.

定数に文字列(String 型)を指定する時は、識別子名もその文字列に対応させます。例:

public static const FOO_BAR:String = "fooBar";

プロパティ(変数と getter/setter)名

先頭文字を小文字で始め、以降はインターキャプス方式で命名しましょう。例:i, width, numChildren

ループの開始値には i を使い、上限値には n を使います。その中に入れ子になるループの開始値には j 、上限値には m を使いましょう。

for (var i:int = 0; i < n; i++)
{
for (var j:int = 0; j < m; j++)
{
...
}
}

Use p (for “property”) for a for-in loop variable:

for (var p:String in o)
{
...
}

If a class overrides a getter/setter and wants to continue to expose the base getter/setter, it should do so by implementing a property whose name is the base name with a $ prepended. This getter/setter should be marked final and should do nothing more than call the supergetter/setter.

mx_internal final function get $numChildren():int
{
return super.numChildren;
}

Storage variable names

Give the storage variable for the getter/setter foo the name _foo.

メソッド名

先頭文字を小文字で始め、以降はインターキャプス方式で命名しましょう。例:measure(), updateDisplayList().

メソッド名は動詞にしましょう。

パラメーターのないメソッドはParameterless methods should generally not be named getFooBar() or setFooBar(); these should be implemented as getter/setters instead. However, if getFooBar() is a slow method requiring a large amount of computation, it should be named findFooBar(), calculateFooBar(), determineFooBar(), etc. to suggest this, rather than being a getter.

If a class overrides a method and wants to continue to expose the base method, it should do so by implementing a method whose name is the base name with a $ prepended. This method should be marked final and should do nothing more than call the supermethod.

mx_internal final function $addChild(child:DisplayObject):DisplayObject
{
return super.addChild(child);
}

イベントハンドラ名

イベントハンドラはそのイベントタイプ名称に “Handler” をくっつけた名前にします。例:mouseDownHandler().

If the handler is for events dispatched by a subcomponent (i.e., not this), prefix the handler name with the subcomponent name and an underscore: textInput_focusInHandler().

引数(パラメーター)名

setter のパラメーターには value を使います:

正しい記述例:

public function set label(value:String):void

悪い記述例:

public function set label(lab:String):void

Or this:

public function set label(labelValue:String):void

Or this:

public function set label(val:String):void

イベントハンドラの引数には( e, evt, eventObjではなく)event を使うようにします:

protected function mouseDownHandler(event:Event):void

Resource bundle names

If a resource bundle contains resources for a particular package, name the bundle the same as the package: controls, {formatters}}, validators.

Resource key names

先頭文字を小文字で始め、以降はインターキャプス方式で命名しましょう。例:pm, dayNamesShort.

Miscellaneous nomenclature

Avoid “object” because it is vague.

An “item” is a data item, not a DisplayObject.

A “renderer” is a DisplayObject that displays a data item.

A “type” is an AS3 type; use “kind” otherwise.

Language Usage

This section discusses how we use the language constructs of ActionScript 3, especially when there are multiple ways to express the same thing.

コンパイルオプション

コンパイルオプションである -strict-show-actionscript-warnings はオンにしておきましょう。(もとから flex-config.xml ファイルでデフォルトで設定されています。)

Property-based APIs

Favor property-based APIs rather than method-based APIs, because these are more suitable for declarative-style MXML programming.

型宣言

あらゆる定数、変数、関数、引数、関数の返り値には型宣言(型注釈)しておくようにしましょう。たとえ“型無し”という場合でも :* と宣言しておきましょう。

正しい記述例:

var value:*;

悪い記述例:

var value;

型はできる限り厳密に(せばめて)指定しましょう。ループのインデックス番号は Number 型ではなく int 型にするべきです。当然 Object とか * にするのはNGです。別の例として、 mouseDownHandler の引数は、event:Event ではなく event:MouseEvent として宣言すべきです。.

たとえ負の数にはならない場合であっても、整数には int を使います。uint は RGB の色指定、ビットマスク、その他の数値でない値にのみ使用します。

値が undefined になり得る場合にのみ型指定 * を使うようにしましょう。たいていの場合では * ではなく Object を使うようにし、“オブジェクトが存在しない”という場合は null を使いましょう。

Array 型を宣言する時は、配列の型を示す Array 宣言の直後の部分に、/* of ElementType */ というコメントを追加して、その配列の要素の型を明示しておくようにしましょう。将来的に実装されるかと思われます(←原文:A future version of the language is likely to have typed arrays)

正しい記述例:

var a:Array /* of String */ = [];

悪い記述例:

var a:Array = [];

これは正しい記述例:

function f(a:Array /* of Number */):Array /* of Object */
{
...
}

悪い記述例:

function f(a:Array):Array

リテラル(定型文的な意味で)

undefined

可能な限り使用は控えましょう。It is only necessary when dealing with values whose compile-time is type is *, and you should be using * sparingly as well.

intuint リテラル

整数型(int)には小数点を使わないようにしましょう。

正しい記述例:

2

悪い記述例:

2.

16進数値には小文字の x と大文字の A-Z を使いましょう。

正しい記述例:

0xFEDCBA

悪い記述例:

0Xfedcba

RGB 値は常に6桁の16進数値で記述しましょう。

正しい記述例:

private const BLACK:uint = 0x000000;

悪い記述例:

private const BLACK:uint = 0;

When dealing with indices, use the value -1 to mean “no index”.

Number リテラル

Number 型を使うときは明示的に小数点を書きましょう。0の時も小数指定するようにしましょう。

正しい記述例:

alphaFrom = 0.0;
alphaTo = 1.0;

悪い記述例:

alphaFrom = 0;
alphaTo = 1;

ただし、座標のピクセル指定では使わないように。which are by convention integral even though they can in principle be fractional.

正しい記述例:

var xOffset:Number = 3;

悪い記述例:

var xOffset:Number = 3.0;

指数を表記する時はE ではなく e にしましょう。

正しい記述例:

1.0e12

悪い記述例:

1.0E12

Use the default value NaN as the “not set” value for a Number.

String 表記

Use quotation marks (double quotes), not apostrophes (single quotes), to delimit strings, even if that string contains a quotation mark as a character.

正しい記述例:

"What's up, \"Big Boy\"?"

悪い記述例:

'What\'s up, "Big Boy"?'

Use \u, not \U, for unicode escape sequences.

Array literals

new Array() ではなく配列カッコを使いましょう。

正しい記述例:

[]

悪い記述例:

new Array()

And this:

[ 1, 2, 3 ]

悪い記述例:

new Array(1, 2, 3)

Array コンストラクタは要素数を特定して生成する時にだけ使うようにします。例:new Array(3) これは [ undefined, undefined, undefined ] という意味で、 [ 3 ] とは違うことに注意してください。

Object literals

new Object()ではなくオブジェクトカッコを使いましょう。

正しい記述例:

{}

悪い記述例:

new Object()

And this:

o = { a: 1, b: 2, c: 3 };

悪い記述例:

o = new Object();
o.a = 1;
o.b = 2;
o.c = 3;

Or this:

o = {};
o.a = 1;
o.b = 2;
o.c = 3;

Function リテラル

Avoid using function literals to define anonymous functions; use a class method or package function instead.

function 表記には返り値を宣言するようにし、function ブロックの最後はセミコロンで終わらせましょう。

正しい記述例:

function(i:int):void { doIt(i - 1); doIt(i + 1); }

悪い記述例:

function(i:int) { doIt(i - 1); doIt(i + 1) }

RegExp リテラル

String を使って RegExp インスタンスを生成するのではなく、リテラル表記を使いましょう。

正しい記述例:

var pattern:RegExp = /\d+/g;

悪い記述例:

var pattern:RegExp = new RegExp("\\d+", "g");

XML and XMLList literals

String から XML インスタンスを生成するのではなく、次のようにリテラル表記を使いましょう。

正しい記述例:

var node:XML = <name first="Jane" last="Doe"/>;

悪い記述例:

var node:XML = new XML("<name first=\"Jane\" last=\"Doe\"/>");

XML の属性値にはシングルクォートではなくダブルクォートを使いましょう:

正しい記述例:

var node:XML = <name first="Jane" last="Doe"/>;

悪い記述例:

var node:XML = <name first='Jane' last='Doe'/>;

Class リテラル

Use a fully-qualified class literal only if necessary to disambiguate between two imported classes with the same unqualified name.

正しい記述例:

import mx.controls.Button;
...
var b:Button = new Button();

悪い記述例:

import mx.controls.Button;
...
var b:Button = new mx.controls.Button();

But here a fully-qualified name is required and therefore qppropriate:

import mx.controls.Button;
import my.controls.Button;
...
var b:Button = new mx.controls.Button();

Expressions

Parentheses

+, -, *, /, &&, ||, <, <=, >, >=, ==, and != といった演算子を使う時には無駄にカッコを使わないようにしましょう。

正しい記述例:

var e:Number = a * b / (c + d);

悪い記述例:

var e:Number = (a * b) / (c + d);

And this:

var e:Boolean = a && b || c == d;

悪い記述例:

var e:Boolean = ((a && b) || (c == d));

The precedence rules for other operators are harder to remember,そういうときはカッコは役に立ちますね。

Coercion

Boolean値を truefalse と比較するのは無駄なのでやめましょう。どちらかの値にしかならないのですから。

正しい記述例:

if (flag)

悪い記述例:

if (flag == true)

正しい記述例:

var flag:Boolean = a && b;

悪い記述例:

var flag:Boolean = (a && b) != false;

int, uint, Number, String で比較する時は明示的に Boolean 比較するようにしましょう。

正しい記述例:

if (n != 0)

悪い記述例:

if (n)

And this:

if (s != null && s != "")

悪い記述例:

if (s)

オブジェクト参照の判定は黙示的に Boolean 比較するようにしましょう。

正しい記述例:

if (child)

悪い記述例:

if (child != null)

正しい記述例:

if (!child)

悪い記述例:

if (child == null)

Prefer the use of a cast to the use of the as operator. Use the as operator only if the coercion強制型変換 might fail and you want the expression to evaluate to null instead of throwing an exception.

正しい記述例:

IUIComponent(child).document

悪い記述例:

(child as IUIComponent).document

Comparison

自然に読めるような順番で比較文を書きましょう:

正しい記述例:

if (n == 3) // "もし n が 3 の時"

悪い記述例:

if (3 == n) // "もし 3 が n の時"

++ and -- operators

In cases where the postfix and prefix forms are equivalent, use the postfix form. Use the prefix form only when you need to use the value before it is incremented.

正しい記述例:

for (var i:int = 0; i < n; i++)

悪い記述例:

for (var i:int = 0; i < n; ++i)

三項演算子

単純な if/else 記述(特に null チェック)の時は、代わりに三項演算子を使いましょう:

正しい記述例:

return item ? item.label : null;

悪い記述例:

if (!item)
return null;
return item.label;

でも、入れ子になるような複雑な if/else ロジックの時は三項演算子は使わないようにしましょう:

正しい記述例:

if (a < b)
return -1;
else if (a > b)
return 1;
return 0;

悪い記述例:

return a < b ? -1 : (a > b ? 1 : 0);

new 演算子

コンストラクタに引数を渡さない場合でも class 宣言のうしろにはカッコを書きましょう。

正しい記述例:

var b:Button = new Button();

悪い記述例:

var b:Button = new Button;

Statements

命令文はセミコロンで終わらせましょう。パブリッシュ時にセミコロンを自動補完してくれる ActionScript 3 のオプション機能に頼らないようにしましょう。

正しい記述例:

a = 1;
b = 2;
c = 3;

悪い記述例:

a = 1
b = 2
c = 3

include 宣言

#include ではなく include と書きましょう。また、他の命令文と同様に最後にセミコロンを書きましょう。

正しい記述例:

include "../core/ComponentVersion.as";

悪い記述例:

#include "../core/ComponentVersion.as"

絶対パスではなく、相対パス指定しましょう。

import 宣言

クラスやインターフェースやパッケージレベルの関数をインポートする時は *(ワイルドカード指定)ではなく、きちんと指定してインポートしましょう。

正しい記述例:

import mx.controls.Button;
import flash.utils.getTimer;

悪い記述例:

import mx.core.*;

use namespace 宣言

use namespace の使用は避け、代わりに :: シンタックスを使いましょう。 on each reference to something in a non-open namespace.

正しい記述例:

import mx.core.mx_internal;

// Later, in some method...
mx_internal::doSomething();

悪い記述例:

import mx.core.mx_internal;
use namespace mx_internal;

// Later, in some method...
doSomething();

if

if/else 文内の命令が1つしかない場合はブロックで囲わないようにしましょう。

正しい記述例:

if (flag)
doThing1();

悪い記述例:

if (flag)
{
doThing1();
}

And this:

if (flag)
doThing1();
else
doThing2():

悪い記述例:

if (flag)
{
doThing1();
}
else
{
doThing2();
}

ただし、命令文が複数個ある要素が1つでもある場合は、全てをカッコで囲うようにします。

Do this:’

if (flag)
{
doThing1();
}
else
{
doThing2();
doThing3();
}

悪い記述例:

if (flag)
doThing1();
else
{
doThing2();
doThing3();
}

When doing multiple error checks, use sequential if statements that test for failure and return early. The successful execution flow is then down the page, with the succesful return at the end of the method. Do not use nested tests for success, which make the execution flow drift across the page.

正しい記述例:

if (!condition1)
return false;
...
if (!condition2)
return false;
...
if (!condition2)
return false;
...
return true;

悪い記述例:

if (condition1)
{
...
if (condition2)
{
...
if (condition3)
{
...
return true;
}
}
}
return false;

for

for ループ内の命令が1つしかなくても、常にカッコで囲うようにしましょう。

正しい記述例:

for (var i:int = 0; i < 3; i++)
{
doSomething(i);
}

悪い記述例:

for (var i:int = 0; i < 3; i++)
doSomething(i);

forループの上限値をローカル変数として事前に保持させておきましょう。これによってループが回るたびに変数の評価をやり直さないようにできます。(でももちろん比較評価は実行されますけどね。)

正しい記述例:

var n:int = a.length;
for (var i:int = 0; i < n; i++)
{
...
}

悪い記述例:

for (var i:int = 0; i < a.length; i++)
{
...
}

他の箇所で使うことがあるとしても for 文のカッコの中では var 宣言しましょう。

正しい記述例:

for (var i:int = 0; i < 3; i++)

悪い記述例:

var i:int;
for (i = 0; i < 3; i++)
{
...
}

while

while ループは、たとえ中身が1行だったとしてもブロックで囲うようにしましょう。

正しい記述例:

while (i < n)
{
doSomething(i);
}

悪い記述例:

while (i < n)
doSomething(i);

do

do ループは、たとえ中身が1行だったとしてもブロックで囲うようにしましょう。

正しい記述例:

do
{
doSomething(i);
}
while (i < n);

悪い記述例:

do
doSomething(i);
while (i < n);

switch

case clause と default clause は全てブロックで囲うようにします。さらに各ブロック内に break あるいは return ステートメントを記述するようにしましょう。statement within the block, not after it.リターンを使う時は return の後に break を置かないようにしましょう。. Treat the default clause similarly to the case clauses; break or return from it rather than falling through the bottom of the switch.

正しい記述例:

switch (n)
{
case 0:
{
foo();
break;
}

case 1:
{
bar();
return;
}

case 2:
{
baz();
return;
}

default:
{
blech();
break;
}
}

悪い記述例:

switch (n)
{
case 0:
foo();
break;

case 1:
{
bar();
}
break;

case 2:
baz();
return;
break;

default:
blech();
}

return ステートメント

return を使う場合は不必要にカッコで囲わないようにしてください。

正しい記述例:

return n + 1;

悪い記述例:

return (n + 1);

メソッドの途中でリターンするのは OK です。

Declarations

1行の命令文の中で複数の定数や変数を宣言しないようにしましょう。

正しい記述例:

var a:int = 1;
var b:int = 2;

悪い記述例:

var a:int = 1, b:int = 2;

The override キーワード

アクセス指定子の前に書くようにしましょう。

正しい記述例:

override protected method measure():void

悪い記述例:

protected override method measure():void

アクセス指定子

指定できる箇所では必ずアクセス指定子を記述するようにしましょう。何も記述しなかった時にはアクセス指定子 internal 扱いになりますが、この補完機能には頼らないようにしましょう。

API を publicprotected にする時は、本当にそうすべきなのかをよく考えましょう。Public and protected APIs must be documented. They must also be supported for several releases before being formally deprecated.

The static キーワード

アクセス指定子のうしろに書くようにしましょう。

正しい記述例:

public static const MOVE:String = &quot;move&quot;

悪い記述例:

static public const MOVE:String = &quot;move&quot;;

The final キーワード

アクセス指定子のうしろに書くようにしましょう。

正しい記述例:

public final class BoxDirection

悪い記述例:

final public class BoxDirection

Declare all “enum classes” to be final.

Also declare “base” properties and methods (those starting with $) to be final.

定数

定数は全て static にしましょう。インスタンス化したところでどうせ同じ値が入るのですから。

正しい記述例:

public static const ALL:String = "all";

悪い記述例:

public const ALL:String = "all";

変数

変数に初期値を持たせておきたい時は、コンストラクタ内ではなく、宣言時にやっておくようにしましょう。

正しい記述例:

private var counter:int = 1;

悪い記述例:

private var counter:int;
...
public function MyClass()
{
super();
...
counter = 1;
}

ローカル変数

ローカル変数は使う直前に宣言するようにしましょう。関数の冒頭でまとめて宣言しておくのはやめましょう。

正しい記述例:

private function f(i:int, j:int):int
{
var a:int = g(i - 1) + g(i + 1);
var b:int = g(a - 1) + g(a + 1);
var c:int  = g(b - 1) + g(b + 1);

return (a * b * c) / (a + b + c);
}

悪い記述例:

private function f(i:int, j:int):int
{
var a:int;
var b:int;
var c:int;

a = g(i - 1) + g(i + 1);
b = g(a - 1) + g(a + 1);
c = g(b - 1) + g(b + 1);

return (a * b * c) / (a + b + c);
}

同名のローカル変数の宣言は1関数内につき1個です。というのも ActionScript 3 ではブロック内のローカルスコープはないためです。

正しい記述例:

var a:int;
if (flag)
{
a = 1;
...
}
else
{
a = 2;
...
}

悪い記述例:

if (flag)
{
var a:int = 1;
...
}
else
{
var a:int = 2;
...
}

And this:

var i:int;
for (i = 0; i &lt; n; i++)
{
...
}

for (i = 0; i &lt; n; i++)
{
...
}

悪い記述例:

for (var i:int = 0; i &lt; n; i++)
{
...
}

for (var i:int = 0; i &lt; n; i++)
{
...
}

クラス

Object型を拡張させたクラスの場合は、extends Object の記述は省略できます。

The only “bare statements” in a class should be calls to static class initialization methods, such as loadResources().

コンストラクタ

クラスにインスタンスメンバーがある場合はIf a classes has instance members, write a constructor, and make it explicitly call super(), even if it does nothing else.

コンストラクタ関数に引数を渡してインスタンス変数を設定する場合は、インスタンス変数名と同名にしておきましょう。

正しい記述例:

public function MyClass(foo:int, bar:int)
{
this.foo = foo;
this.bar = bar;
}

悪い記述例:

public function MyClass(fooVal:int, barVal:int)
{
foo = fooVal;
bar = barVal;
}

コンストラクタ内でインスタンス変数の値を設定するのではなく、インスタンス変数の宣言時に済ませておくようにしましょう。例外として、継承されたインスタンス変数をリセットしたい時はコンストラクタ内で設定しても結構です。

Interfaces

TBD

Namespaces

TBD

Implementing properties

TBD

Metadata

TBD

Packages

One public API (usually a class, sometimes a namespace or function) inside the package statement.

Helper classes

bare statements

File Organization

This section presents the order in which a Flex framework file should be organized.

Copyright notice

フレームワークを作る時は .as ファイルの冒頭には必ずコピーライト表示を記入しておきましょう。2008 年用オープンソースコードのフォーマットは以下のような感じです。

////////////////////////////////////////////////////////////////////////////////
//
//  ADOBE SYSTEMS INCORPORATED
//  Copyright 2008 Adobe Systems Incorporated
//  All Rights Reserved.
//
//  NOTICE: Adobe permits you to use, modify, and distribute this file
//  in accordance with the terms of the license agreement accompanying it.
//
////////////////////////////////////////////////////////////////////////////////

幅は80文字分です。

package statement

TBD

import statements

TBD

use namespace statement

TBD

Class metadata

Organize the class metadata into sections, in the order Events, Styles, Effects, Excluded APIs, and Other Metadata.

各セクションの直前には小さめのセクションヘッダーを置くようにします。 小さめのセクションヘッダーは40 文字分の幅で、// とセクションの名前の間は半角スペース2つ分空けます。

Alphabetize the metadata by name="…" within each section. In the Other Metadata section, alphabetize them by metadata tag name.

//--------------------------------------
//  Events
//--------------------------------------
/
**
*  ASDoc comment.
*/
[Event

/**
*  ASDoc comment.
*/
[Event

//--------------------------------------
//  Styles
//--------------------------------------

/**
*  ASDoc comment.
*/
[Style

/**
*  ASDoc comment.
*/
[Style]

//--------------------------------------
//  Effects
//--------------------------------------

/**
*  ASDoc comment.
*/
[Effect

/**
*  ASDoc comment.
*/
[Effect]

//--------------------------------------
//  Excluded APIs
//--------------------------------------

[Exclude(name=&quot;horizontalAlign&quot;, kind=&quot;style&quot;)]
[Exclude(name=&quot;verticalAlign&quot;, kind=&quot;style&quot;)]

//--------------------------------------
//  Other metadata
//--------------------------------------

[DefaultBindingProperty(source=&quot;text&quot;, destination=&quot;text&quot;)]
[IconFile(&quot;Text.png&quot;)]

Class declaration

TBD

include statement for Version.as

Every class should include core/Version.as using a relative path. This file contains the declaration for static const VERSION:String.

include "../core/Version.as";

Implementation notes

TBD

Class initialization

TBD

Class constants

Put static const declarations here.

ActionScript 3 では定数(const)として ArrayObject型は使用できません。Declare such constants using static var rather than static const, but put them in this section because they are conceptually constants.

Class mix-ins

Declare any static variables of type Function that get mixed in rather than being declared as methods.

Class resources

TBD

Class variables

TBD

クラスプロパティ

Declare static getters and setters here. Order them alphabetically by property name. Use a minor separator with the property name for each one. getter を setter より先に定義するようにします。

クラスメソッド

Put static function declarations here.

Constructor

TBD

Variables

TBD

Overridden properties

Put overrides of non-static getters and setters here. Order them alphabetically by property name. Use a minor separator with the property name for each one. Put the getter before the setter.

Properties

Put new non-static getters and setters here. Order them alphabetically by property name. Use a minor separator with the property name for each one. Put the getter before the setter.

Overridden methods

Put overrides of non-static functions here.

Methods

Put new non-static functions here.

Overridden event handlers

Put overrides of event handlers here.

Event handlers

Put new event handlers here.

Out-of-package helper classes

TBD

Formatting

This section covers how a Flex framework class should be formatted.

1行あたりの幅

コードは80文字で折り返しましょう。これには以下のような利点があります:

  • モニタ解像度の低いデベロッパが読む時に水平スクロールしなくていい幅なのです。
  • 差分を比較するユーティリティーを使った時に横に並べることができる幅です。
  • The font size can be increased for projection before a group without requiring scrolling.
  • 表示が端で切れたり折り返したりすることなくソースコードをプリントできる幅なのです。

インデント

半角スペース4個分のインデントを使いましょう。 タブではなくて半角スペースを挿入するようにご自分のエディタを設定しておくとよいでしょう。 This allows another program that uses a different indentation setting, such as Notepad with its 8-character indents, to display the code without disfiguring it.崩れることなくコードを表示することができます。

セクション(段落)の区切り

クラスファイル内の大セクションの分割は次のようにします:

    //--------------------------------------------------------------------------
//
//  Overridden methods
//
//--------------------------------------------------------------------------

They extend from column 4 through column 80. The text is indented to column 8.

また、プロパティ間のようなクラスファイル内の小セクションの分割は次のようにします:

    //----------------------------------
//  visible
//----------------------------------

They extend from column 4 through column 40. The text is indented to column 8.

区切りの上下に1本ラインを引くようにしましょう。

Separation of declarations

Use a single blank line as a vertical separator between constant, variable, or function declarations.

/**
*  @private
*  Holds something.
*/
var a:Number;

/**
*  @private
*/
var b:Number

Metadata

TBD

正しい記述例:

Inspectable[a="1", b="2"]

悪い記述例:

Inspectable[a=1 b=2]

Array indexing

左(開き)カッコのうしろと、右(閉じ)カッコの前にスペースを入れてはいけません。

正しい記述例:

a[0]

悪い記述例:

a[ 0 ]

カンマ

Follow a comma with a single space. 引数のリストや配列の要素指定、オブジェクトの要素指定時に使います。

Array literals

左(開き)カッコのうしろと、右(閉じ)カッコの前にスペースを入れましょう。また、各カンマのうしろ(前には入れない!)にもスペースを入れておくようにします。

正しい記述例:

[ 1, 2, 3 ]

悪い記述例たち:

[1, 2, 3]

[1,2,3]

空の配列を指定するときは特例で次のように指定します。

正しい記述例:

[]

悪い記述例:

[ ]

配列定義が長くなる場合は複数行を使ってカッコで縦揃えするようにします:

static var numberNames:Array /* of String */ =
[
"zero",
"one",
"two",
"three",
"four",
"five",
"six",
"seven",
"eight",
"nine"
];

Object literals

左(開き)カッコのうしろと右(閉じ)カッコの前にスペースを入れましょう。また、name と value プロパティを区切るコロンのうしろにもスペースを入れるようにします。

正しい記述例:

{ a: 1, b: 2, c: 3 }

悪い記述例たち:

{a: 1, b: 2, c: 3}

{a:1, b:2, c:3}

{a:1,b:2,c:3}

空オブジェクトを指定するときは特例で次のように指定します。

正しい記述例:

{}

悪い記述例:

{ }

オブジェクト定義が長くなる場合は複数行を使ってカッコで縦揃えするようにします:

private static var TextStyleMap:Object =
{
color: true,
fontFamily: true,
fontSize: true,
fontStyle: true,
fontWeight: true,
leading: true,
marginLeft: true,
marginRight: true,
textAlign: true,
textDecoration: true,
textIndent: true
};

関数リテラル

TBD

var f:Function;

f = function():void
{
doSomething();
};

型宣言

変数・パラメータ・関数と、その型を区切っているコロンの前にも後ろにもスペースを入れてはいけません。

正しい記述例:

var n:Number;

悪い記述例たち:

var n : Number;

var n: Number;

And this:

function f(n:Number):void

悪い記述例たち:

function f(n : Number) : void

function f(n: Number): void

Operators and assignments

代入演算子の前後にはスペースを入れます。

正しい記述例:

a = 1;

悪い記述例:

a=1;

算術演算子の前後にはスペースを入れます。

正しい記述例:

a + b * c

悪い記述例:

a+b*c

比較(論理)演算子の前後にはスペースを入れます。

正しい記述例:

a == b

悪い記述例:

a==b

前置の演算子と演算対象の間にはスペースを入れてはいけません。

正しい記述例:

!o

悪い記述例:

! o

後置の演算子と演算対象の間にはスペースを入れてはいけません。

正しい記述例:

i++

悪い記述例:

i ++

ステートメント(命令文)

Start each statement on a new line, so that you can set a breakpoint on any statement.

正しい記述例:

a = 1;
b = 2;
c = 3;

悪い記述例:

a = 1; b = 2; c = 3;

対応するステートメントブロックは縦に揃うようにします。

正しい記述例:

function f():void
{
var n:int = numChildren;
for (var i:int = 0; i < n; i++)
{
if ()
{
x = horizontalGap * i;
y = verticalGap * i;
}
}
}

悪い記述例:

function f():void {
var n:int = numChildren;
for (var i:int = 0; i < n; i++) {
if () {
x = horizontalGap * i;
y = verticalGap * i;
}
}
}

Constant and variable declarations

TBD

Function declarations

TBD

正しい記述例:

f(a, b)

”悪い記述例たち:”

f(a,b)

f( a, b )

If the parameters have to wrap, indent the subsequent lines after the left parenthesis. Put multiple parameters per line if they fit. Otherwise, put one per line. If even one won’t fit, put the first one on the second line, indented past the beginning of the function name.

public function foo(parameter1:Number, parameter2:String,
parameter3:Boolean):void

public function foo(parameter1:Number,
parameter2:String,
parameter3:Boolean):void

public function aVeryLongFunctionName(
parameter1:Number, parameter2:String,
parameter3:Boolean):void

Function calls

TBD

正しい記述例:

f(a, b)

悪い記述例たち:

f(a,b)

f( a, b )

if statements

if キーワードと開きカッコの間にはスペースを入れましょう。開きカッコの後ろや閉じカッコの前にスペースを入れてはいけません。

正しい記述例:

if (a < b)

悪い記述例たち:

if(a < b)

if( a < b )

if ( a < b )

else if ?

multiline ?

for statements

for キーワードと開きカッコの間にはスペースを入れましょう。開きカッコの後ろや閉じカッコの前にスペースを入れてはいけません。

正しい記述例:

for (var i:int = 0; i < n; i++)

悪い記述例たち:

for(var i:int = 0; i < n; i++)

for( var i:int = 0; i < n; i++ )

for ( var i:int = 0; i < n; i++ )

for 文を折り返す必要がある時は、左(開き)カッコに揃うように各行にインデントを入れましょう。

for (var aLongLoopVariableName:int = aLongInitialExpression;
aLongLoopVariableName < aLongUpperLimit;
aLongLoopVariableName++)

switch statements

switch キーワードと開きカッコの間にはスペースを入れましょう。開きカッコの後ろや閉じカッコの前にスペースを入れてはいけません。

正しい記述例:

switch (n)

悪い記述例たち:

switch(n)

switch( n )

switch ( n )

switch キーワードと開きカッコの間にはスペースを入れましょう。開きカッコの後ろや閉じカッコの前にスペースを入れてはいけません。(※上の文と一緒だな)

正しい記述例:

switch (n)
{
case 1:
{
a = foo();
break;
}

case 2:
{   a = bar();
break;
}

default:
{
a = blech();
break;
}
}

悪い記述例たち:

switch(n)

switch( n )

switch ( n )

classinterface 宣言

braces are always balanced

no braces around single lines

1行あたり1命令文

ASDoc

プロパティのコメント

Only document the first function of a get/set function pair for a property. The idiom for defining and documenting a property is:

/**
*  @private
*  The backing variable for the property.
*/
private var _someProp:Foo;

/**
*  Place all comments for the property with the getter which is defined first.
*  Comments should cover both get and set behavior as appropriate.
*/
public function get someProp():Foo
{
...
}

/**
*  @private
*/
public function set someProp(value:Foo):void
{
...
}

Also, ASDoc comments are applied to metadata tags as well as other constructs within a class so take care that your comments apply to the proper target. If you tag a property as Bindable, your property comment must precede the get function, not the Bindable metadata tag.

正しい記述例:

[Bindable("somePropChanged")]

/**
*  Comments for someProp
*/
public function get someProp():Foo

悪い記述例:

/**
* Comments for someProp
*/
[Bindable("somePropChanged")]

public function get someProp():Foo
このエントリーをはてなブックマークに追加
はてなブックマーク - ActionScript 3.0 コーディング規約の日本語訳

Comments:12

ssk 08-03-14 (金) 14:44

すばらしい、ありがとうございます:)
そして、おつかれまです。

takumu 08-03-14 (金) 15:50

英語に弱い人間なので、参考に読ませていただこうと思います。
まだ頭口しか読んでませんが、「Coding Conventions – Flex SDK – Confluence」へのリンクが間違ってるのと、「略語」の説明で「auto は automatic を意味し、autoLayout のように使います。」が二回記述されているのを見つけました。報告までに。

imassi 08-03-15 (土) 10:59

ありがとうございます!!
参考にさせていただきます!!

Ko:ki 08-03-15 (土) 18:28

前回のてら子ではお世話になりました。あまりお話できなかったのが残念でしたが(^^;
って、言いたいのはそういうことではなく。エントリートップのリンクが間違っている模様です。wiki の間に s が入ってます。。><

yoshidam 08-03-17 (月) 18:22

すばらしい!
参考にさせていただきます。
ひとつ発見。
・auto は automatic を意味し、autoLayout のように使います。
がダブってました。

tera 08-03-17 (月) 19:06

>ssk様、takumu様、imassi様、Ko:ki様、yoshidam様
どうもありがとうございます。
まだ途中ですが励みになりますー。
訂正等、こまごまとアップデートかけてしまうと RSS リーダーの人に煙たがられるかもしれないので、ある程度ローカルで修正してからガツッとアップするつもりでおります。
今後ともよろしくお願いします。

なんだかMTが調子悪くてコメント投稿通知メールがきてませんでした。反映おくれてすいませんっ。

kenji 08-05-09 (金) 17:35

英語が駄目なのでありがたいです・・・
ありがとうございます

kounen 08-06-03 (火) 12:54

とてもありがたいです!
参考にさせていただきます。

1箇所、
XML の属性値にはダブルクォートではなくシングルクォートを使いましょう:

XML の属性値にはシングルクォートではなくダブルクォートを使いましょう:
ですかね。

tera 08-06-03 (火) 13:14

>kounen様
コメントありがとうございます。
なんとか完成させたいのですが、なかなか時間が確保できてません。すいません。
ご指摘の箇所ですが、本家ページをみてもダブルクォートを推奨しているように思えるのですがいかがでしょうか?
今後ともよろしくお願いいたします。

zaki 08-08-29 (金) 17:53

> ご指摘の箇所ですが、本家ページをみてもダブルクォートを推奨しているように思えるのですがいかがでしょうか?
今後ともよろしくお願いいたします。

訳文のほうではシングルクォート を推奨する文になってしまってます。

tera 08-08-29 (金) 18:30

>zaki様
サンプルコード部分ではなく、本文の記述に誤りがあったのですね!勘違いしておりました。どうもありがとうございます。
>kounen様
以上のとおり、こちらの勘違いでした。修正いたしました!意味不明な返事コメントしてすいませんでした!

RYUU 08-11-24 (月) 9:25

http://www.hotdocument.net/faq/man.html
知り合いの会社で使っている規約です。
良かったら参考にしていただけないでしょうか。
ドキュメント自動生成ツール【A HotDocument】のルールみたいです。
http://www.hotdocument.net/

Comment Form
Remember personal info

Trackbacks:5

Trackback URL for this entry
http://www.trick7.com/blog/2008/03/14-131809.php/trackback
Listed below are links to weblogs that reference
ActionScript 3.0 コーディング規約の日本語訳 from trick7
pingback from YAIMO BLOG » Blog Archiv » AS3.0 最適化 (1) コーディング規約 09-06-17 (水) 18:59

[…] inazumaさんの今さらながら Actionscript 3 コーディング規約 Trick7さんのActionScript 3.0 コーディング規約の日本語訳 […]

pingback from 【AS3】命名規則 « sumegelog 10-03-16 (火) 22:44

[…] http://www.trick7.com/blog/2008/03/14-131809.php […]

pingback from [AS3.0]命名規則 at web_studynote 10-05-11 (火) 23:20

[…] 参考サイト:ActionScript 3.0 コーディング規約の日本語訳 […]

pingback from AS3.0コーディング規約 | Standard 10-10-01 (金) 19:08

[…] リファレンス: trick7 http://www.trick7.com/blog/2008/03/14-131809.php […]

pingback from ActionScript学習 | Just another サイト ブログ統合 site 12-06-17 (日) 2:19

[…] ActionScript 3.0 コーディング規約の日本語訳 […]

Return to page top