関数は今まで何度も使用していますが、自分で関数を定義して使用することができます。関数は何度も使うような定型処理をまとめたもので、関数を使って機能ごとにまとめてやればスクリプトが見やすくなります。今までの関数はFlashが機能を提供しているものでしたが、ここでは関数をどのように定義して使用するかを説明します。
関数を使用するためにはまず、どのような関数となるか定義が必要になります。関数を定義するには、function を使い以下のような構文で定義します。
function 関数名( 引数 )
{
関数内の処理
}
関数内の処理には今までと同じように文を書いていきます。引数とは関数に何らかの値を渡したいときに定義し、普通の変数と同じように扱えます。下の例は、引数として str1,str2 を受け取るtrace2()関数を定義しました。
| function trace2( str1, str2 ) { trace( str1 + str2 ); } |
使用するには下のように記述します。これを実行すると、trace2の引数 str1 に "test"、str2 に "test2" が設定されて、関数内の処理が行われます。関数は、最後の } まで処理し、関数が呼び出された位置に戻ります。
| trace2( "test", "test2" ); |
--実行結果
testtest2
次の例は、2つの数字を比較して結果を表示するActionScriptです。
|
var a = 1; if( a > b ) a = 7; if( a > b ) |
--実行結果
4>1
7>3
比較を2度行っていて、同じ処理を2度も書いています。これでは行数の無駄なので、これを関数に置き換えます。
| hikaku( 1, 4 ); hikaku( 7, 3 ); function hikaku( a, b ) { if( a > b ) trace( a + ">" + b ); else trace( b + ">" + a); } |
--実行結果
4>1
7>3
すっきりとして見やすくなりました。このようにして、関数ではまとめられる処理をまとめて、その都度変わるような値は変数で変更できるようにします。引数が必要ない場合には、関数を定義するときに()内に何も書かないようにします。下の例は、space() 関数 で空行を表示するスクリプトです。
|
trace( "hello" ); function space() |
--実行結果
hello
bye
関数は処理をまとめるだけではなく、まとめて行った処理の結果を関数の呼び出し元に返すことができます。結果を返すには return を使います。returnは関数内のどこでも使うことができ、return以降の行は実行せずに呼び出したところに戻ります。戻った値を受け取るには変数を関数の左側に設定します。
|
var num5 = addValue( 5 ); function addValue( num ) |
--実行結果
15
また、引数を返さない場合でもreturnを使えば、途中で処理を終了して関数の呼び出し元に戻ることができます。
|
valueN( 0 ); function valueN( num ) var answer = 1; for( var i = 2; i <= num; i++ ) |
--実行結果
範囲外
120
関数内でvarを使って変数を定義した変数を、呼び出し元で使用してもundefinedになります。これは、関数内で定義された変数はその関数内でのみ使用でき、関数の処理が終了するとその変数は無効になるためです。これをローカル変数と呼び、このような変数の有効範囲をスコープと呼びます。
|
function myValue() myValue(); |
--実行結果
10
undefined
varを使って変数を定義せずにそのまま使用すると、関数の外で定義された変数のvalueが使用できます。このときのvalueをグローバル変数と呼びます。
|
value = 10; myValue(); |
--実行結果
10
5
10
undefined