関数っぽいことやってみるの巻


●前フリ
 関数といわれてもBASICやHSPしか使ったことがないという人はなんのこっちゃよーわからんと思いますが、まあ「(複数の)共通の役割を持つ変数を受け渡すことのできるサブルーチン」とでも言いましょうか。この辺を詳しく説明するとキリがないので省略しますので、詳しく知りたい人はC言語の本などで勉強しませう。
 さて、そんな関数ですがいったいどこが便利なのかというと、ふつう同じ名前の変数でも関数の中と外とでは別物扱いになるため「いくつかの変数を関数に渡して内部で一定の計算などをさせ、その結果を返す」などといった処理を作るのに非常に便利なのです。
 現在(β版を除く。てゆうか知らない(爆))のHSPは「行番号を取り除いたN88BASIC」のような位置づけで関数の概念はなく、「HSPにも関数の概念があればプログラミングの幅が広がるのに」というような声を時折聞きます。

●さて今のHSPで擬似的に関数を使えないか
 ということで、擬似的に関数を作りましょう(長い前フリ(^^;)。まだなんのこっちゃよーわからんと言う人も「ふーん」くらいでついてきてくださいな。
 詰まるところ、関数は「数値を共通の変数に渡す」ことさえできればよいわけでして、それをHSPで行うにはdupという命令を使います。dupは変数のクローンを作成する命令で、たとえばクローン変数の値が10から20に変化すると、もとの変数も10から20に変化するのです。
 これを使って変数を共通にしてサブルーチンで数値をいじくり、もとのルーチンに戻れば関数のいっちょあがりです。プログラム例としてHSPがなぜかサポートしていない、絶対値を求める処理を組んでみることにします。

a=8
b=-12
c=-5
d=7
e=-21
dup ab,a
gosub *abs
mes a
dup ab,b
gosub *abs
mes b
dup ab,c
gosub *abs
mes c
dup ab,d
gosub *abs
mes d
dup ab,e
gosub *abs
mes e
stop

*abs
if ab<0 : ab=-ab
return

 これを実行すると、値がマイナスになっているb,c,eの3つの変数の値がプラスになって表示されます。これが関数です。

●というか
 この程度の処理なら変数ごとにif文を列べた方がいい気もしますが、もっと長くて何度も使う処理に対してこの方法を使えばかなり有効じゃないでしょうか。でもなんかこの方法面倒だよ。うーん、自分でも結局なんのこっちゃよーわからんですな(爆)。
11/23追記:Ver 2.5にてモジュールという概念が取り入れられるため、この講座は無意味なものとなりました(笑)。


戻る