AREA 021
Featuring AlphaScript

STEP 10 関数

 

変数や演算子をどんなに使いこなしても、コンピュータの内部で計算が行われるだけで、 見ているほうには何が起こっているのかさっぱりわかりません。  アニメーションやゲームを実現するには、「画面に描画する」という処理が必要不可欠になってきます。  世の中には音だけで楽しむゲームもありますが、それにしたって「音を鳴らす」という手段が必要です。

そういった、言語仕様にある機能ではできない処理を実現するのが「関数」(かんすう)です。  関数と聞くと数学を思い浮かべてしまうかもしれませんが、 プログラミングでは、難しい計算をしたり外部にデータを出力する、 といった特殊な処理ができる命令の単位を指します。

中には、関数を使わなくても自力で実現できる処理も多くあります。  しかし、その場合も関数を使ったほうがわかりやすかったり、 スクリプトによる処理よりも高速に動作することがあります。


関数の使い方

AlphaScript にはいくつもの関数が用意されており、 決められた関数の名前の後ろにカッコ( )をつけることによって、 その関数を呼び出すことができます。

ここでは、「数値の絶対値を教えてくれる」という機能をもつ、 abs関数 を使ってみます。 (「絶対値」はわかりますよね〜?)

abs( -5 );

これで abs関数 を呼び出すことができました。  (注:関数名も大文字・小文字を区別しますので、Abs とか書いてしまうとエラーになります)  ( ) の中に数値が入っていますが、これは引数(ひきすう)と呼ばれるものです。  abs関数 は「数値の絶対値」を知るためのものですから、その数値がわかっていなければどうしようもないです。  なので、 -5 という数値を引数として abs関数 に渡しています。  これによって、 abs関数 は、”5”という答えを出すことができるのです。

もちろん -5 以外のどんな式でも渡せます。  さらに、 a という変数を用意して、 abs( a ) と書けば a の絶対値を教えてくれます。

また、必要な引数の数は関数によって違います。  引数を複数受け取る関数では、1,2 のように「,」(カンマ)で区切って記述します。 (カンマとピリオドを間違えないように! ピリオドだと「1.2」という数値になり、意味が大きく変わってしまいます)  逆に、中には引数が1つもいらないものもあります。  その場合はカッコの中には何も記述せず、func() のように書きます。  これだと「 ( ) 自体省略してしまうえばよいのでは?」と思ってしまいそうですが、 実行しようとしているのが関数であることを明示するために必ず付けます。 (普通はないですが、もし同じ名前の変数が宣言されていたら、どっちなのかわからなくなってしまいますし。。)

しかし! このように単体で abs関数 を呼び出しても、実は何の役にも立ちません。  abs 関数は引数をもとに答えを出してくれますが、それだけで終わってしまい、結果を知る方法がないからです。  実際に動かすスクリプトでは、以下のようにして使います。

a = abs( -5 );

こうすれば、変数 a に abs( -5 ) の結果を代入できるので、後でその数を利用することが出来ます。  このような書き方ができるのは、関数が「数値を返す」とい機能も持っているからです。  a = abs( -5 ) と書いた場合、結果的に a = 5 として処理される、と考えていただければよいかと思います。 これを関数の戻り値(もどりち)と呼びます。 (返り値(かえりち)という呼び方もあるのですが、「返り血」を連想させるので、勝手に戻り値で統一させていただきます。  でも、「値を戻します」とはあんまり言わないんですよね。 不思議^^;)

普通のプログラミング言語には、戻り値を持たない関数も存在しますが、 AlphaScript の場合はどの関数も必ず何らかの数値を返すようになっています。  ですから、計算式で使った数値や変数と同じように、関数を書くことができる、ということです。 (関数の性質上、必ず 0 しか返さない関数も多いですが)

x = -7;

y = 10 + abs( x );  // 10 に x の絶対値を足した数を、y に代入する

z = abs( -30 + abs( -y ) );  // こんなこともできます

当たり前ですが、次のようなことはできません。

abs( -1 ) = 1000;  // 戻り値を書き換えることはできないので、エラーになる

ここでは abs 関数しか紹介しませんでしたが、他にもたくさんの関数(70種類以上!)があります。  関数リストで全ての関数が解説されています。


配列の引数について

関数によっては、引数として渡された変数を関数内で直接書き換えるものがあります。  この場合、その引数は変数を直接指定しなければ、エラーにはなります。

配列として扱う引数もあります。  配列を引数として渡す場合は、引数の区切りのカンマと間違えないように、配列を必ず ( ) で囲んでください。  また、このように ( ) で囲ったり連結したりした配列はその場で新たに生成されるため、 中身に変数が使用されていても、それがその関数内で書き換えられることはありません。

以下に、渡し方の例を示します。(あ、SomeFuncという関数は存在しないですよ。 念のため)

// 変数 var を渡す(関数によっては、実行後 var の中身が変わる)
SomeFunc( var );

// 変数 var を書き換え不可として渡す
SomeFunc( ( var ) );

// 変数 var に10を足した値を渡す(もちろん、書き換え不可)
SomeFunc( var + 10 );

// 変数 ary の先頭から10個の要素を渡す
SomeFunc( ary.10 );

// 変数 ary の先頭から10個の要素を、書き換え不可として渡す
SomeFunc( ( ary.10 ) );

// var 1 2 の3個の要素を渡す
SomeFunc( ( var, 1, 2 ) );


関数名の法則?

AlphaScript では、関数はあくまではじめから用意されているものであり、自分で作ることはできませんが、 これも人間が作ったものであることに違いはないです。

なので、変数名のように関数名もそれなりの工夫をしてあります。  まあ、単語の区切りを大文字小文字で表している、ということぐらいですが。(^^;  どんなプログラミング言語でも、関数の命名には気を遣うようです。

 

ページ一覧に戻る  次のステップへ!

Copyright (c) Rabit 2005-2012 all rights reserved.