« 2.2 変数と定数 | メイン | 2.4 データ型 »

2.3 フレームアクションの関数定義とメソッド定義

■フレームアクションでのfunction
functionを使ってフレームアクションで関数やメソッドを定義できます。基本的な考え方はクラス定義で使うfunctionと違いませんが、フレームアクションではfunctionに対してpublicやprivateといった属性を指定できません。
メインのタイムラインのフレームアクションで定義したfunctionはメインのタイムラインでのみ有効となり、同様にムービークリップのフレームアクションで定義したfunctionはそのムービークリップのタイムラインでのみ有効な関数およびメソッドになります。

[:note:] ActionScript 3.0からは、functionを定義してあるキーフレームを再生していなくても利用できます。

■関数定義
関数は次のようにfunctionで定義し、returnで値を戻します。値はfunctionを呼び出した位置に戻ります。データ型の指定は省略可能ですが、データ型を指定することでコンパイル時にデータ型の妥当性がチェックされるだけでなく、引数の初期値が決まります。

書式:
function 関数名(引数:データ型, 引数:データ型, ...):データ型{
	//実行するステートメント
	return 戻し値;
}

たとえば、greeting()は次のように定義します。+はストリングを連結する演算子です。

例:
function greeting(myname:String):String {
	var msg:String = myname + "です。よろしくお願いします。";
	return msg;
}

このgreeting()を使うには次のように引数を与えます。

例:
var theName:String="大重";
var theMsg:String = greeting(theName);
var greetingMsg:String = "はじめまして、"+theMsg;
trace(greetingMsg);
//出力:はじめまして、大重です。よろしくお願いします。

greeting()を次のように定義すると、引数myNameに値がなかった場合に「よろしくお願いします。」とだけ返すようになります。なお、myNameはデータ型をStringに指定してあるので、値がない場合の初期値はnullになります。

[:sample:] function-1.fla

例:
function greeting(myname:String):String {
	var msg:String = "";
	if (myname != null) {
		msg = myname + "です。";
	}
	msg += "よろしくお願いします。";
	return msg;
}

■メソッド定義
関数とメソッドの違いは、returnで値を返すか返さないかだけです。メソッドは呼ばれた位置に値を返さず、functionのデータ型の指定はvoidにします。なお、ActionScript 3.0では小文字のvoidになったので注意してください。

書式:
function メソッド名(引数:データ型, 引数:データ型, ...):void{
	//実行するステートメント
}

次のarrangeXY()は、配列で指定した複数のムービークリップインスタンスをステージの対角線に均等配置するメソッドです。

[:sample:] function-2.fla

例:
var mcs:Array = [box1, box2, box3, box4];
arrangeXY(mcs);

//ステージの対角線に均等配置する
function arrangeXY(mclist:Array):void {
	var cnt:uint = mclist.length;
	var dx:int = stage.stageWidth / (cnt+1);
	var dy:int = stage.stageHeight / (cnt+1);
	var _mc:MovieClip;
	var i:int = 0;
	for (i; i

fig02-03-01 4個のインスタンスをステージの対角線上に均等配置します。

■引数の指定
関数(メソッド)に引数を渡す際にデータ型が一致していないとコンパイルエラーになりますが、ActionScript3.0からは引数の個数も一致していなければなりません。たとえば、次のように2個の引数を指定しているtest()に対して1個の引数しか渡さないとコンパイルエラーになります。

例:
function test(a:int, b:int){
	return a+b;
}

test(3);//引数が不足しているのでコンパイルエラーになる

引数の個数が決まっていないとき、次のsum()ように...restを使うことで引数の個数を固定しないこともできます。sum()では、第1引数は変数unitに入り、第2引数以降は配列restに入ります。なお、...restのrestの部分は、argsやnumlistなどのように好きな変数名を使うことができます。

[:sample:] rest-1.fla
例:
function sum(unit:String, ...rest):String {
	var sumv:int = 0;
	var cnt:uint = rest.length;
	var i:int=0;
	for (i; i

[:note:] ActionScript 3.0ではargumentsクラスに代わって、...restキーワードが推奨されています。

About

2007年5月 7日 09:38に投稿されたエントリーのページです。

ひとつ前の投稿は「2.2 変数と定数」です。

次の投稿は「2.4 データ型」です。

他にも多くのエントリーがあります。メインページアーカイブページも見てください。