サブルーチンとはの巻
初心者に立ちはだかる壁の一つ、サブルーチンについて説明しましょう。
サブルーチンというのは、どこかから呼び出され、用が済んだらもとの位置に戻ってくる処理の事を言います。あまりピンとこないかもしれませんので、一つ例を挙げましょう。
mes "1" mes "2" mes "3" mes "4" stop |
上のような簡単なスクリプトを作成し、実行します。画面には縦に1〜4の数字が表示されるはずです。当然だって? ではなぜ当然なのでしょうか。そーです。命令を実行したときに、現在プログラムのどこを実行しているのかを記憶しているからです。そうでなければ、途中でどこへ戻ればいいかわからず、メモリの中をさまようことでしょう(これを一般に暴走という)。同じように、サブルーチンも呼び出された位置を記憶し、再度そこへ戻ることができます。
だからといって、命令=サブルーチンであると言っているわけではありません。似て否なるものです。まあ、これはほんのイメージということで。
ではサブルーチンの使い方に行きます。
●サブルーチンを作る
当然のことですが、サブルーチンを作らないことには意味がありません。以下がその行程です(この通りの順でなくてもよいが)。
1.ラベルをつける
ラベルとは飛び先を指定するためのポイントのことです。なるべくわかりやすい名前をつけましょう。
2.処理を書く
別に特別なことはしなくてかまいません。普通に。
3.returnで処理を戻す
前述の通り、サブルーチンはジャンプした元の位置を記憶していますのでもう一度そこへ戻さなければなりません。
●サブルーチンへ飛ばす
注意しなければならないのは、gotoを使って飛ばすのではなくgosubで飛ばさなくてはならないという点です。それについては、あとで説明します。
以上がサブルーチンの準備と使い方です。下がサブルーチンを使ったスクリプトの一例です。
mes "サブルーチンへ飛びます" gosub *SUB1 ・・・(1) mes "飛びました" stop *SUB1 ・・・(2) mes "サブルーチンです" return ・・・(3) |
(1)サブルーチンヘ飛びます。ここでは飛び先をラベル*SUB1とします。
(2)これがラベルです。念のため。
(3)サブルーチンなのでgosubで飛んできたところへ戻らなくてはなりませんので、returnで元へ戻ります。
ものすごく簡単なスクリプトですが、一応サブルーチンの使い方が理解できたことと思います。
サブルーチンを使用するときに注意することがあります。
とにかく、gosubとreturnはセットで使うということを覚えておいてください。
ダメな例・1 mes "サブルーチンへ飛びます" goto *SUB1 ←gotoで飛んでいる mes "飛びました" stop *SUB1 mes "サブルーチンです" return |
ダメな例・2 mes "サブルーチンへ飛びます" gosub *SUB1 *MAIN mes "飛びました" stop *SUB1 mes "サブルーチンです" goto *MAIN ←returnで戻っていない |
ダメな例・3 mes "サブルーチンへ飛びます" gosub *SUB1 mes "飛びました" return ←gosubを使っていないのにreturnしている *SUB1 mes "サブルーチンです" return |
では、これはどんな用途で使えばよいのでしょうか。
*MAIN gosub *自機の移動 gosub *敵の移動 gosub *当たり判定 goto *MAIN *自機の移動 (省略) return *敵の移動 (省略) return *当たり判定 (省略) return ※このスクリプトを実行しても何も起こりません。 |
サブルーチンは上手く使えばプログラムの見やすさを向上させたり、色々便利ですが、多重構造には十分注意しましょう。
昔BASICをやっていたころは、「サブルーチンを使うと処理速度が低下するので、なるべく使わないほうがいい」といわれていましたが、CPUが速くなった最近ではどうなんでしょう。やはり気にならないのでしょうか。