これまでいろいろな命令をおぼえてきましたが、そのクライマックスになりそうなのが、これから出てくる「GOSUB」命令です。
ここまでおぼえれば初心者のプログラムはもう最後といっていいかもしれません。
GOSUB。
英語としてもわりとヘンなんですが、もともとの意味は「GO to SUB routine」といって、まあ「サブルーチンに行け」的なことだったみたいです。
サブルーチンといえば、前にもちょっとだけ出てきましたね。
「行って帰ってくる小さなプログラムのブロック」なんて説明もしましたが、おぼえてましたか?
この「行って帰ってくる」をカンタンにするのがGOSUB命令ですが、くわしくはインテリ君の説明にまかせましょう。
サブルーチンのハナシはもう終わったんじゃねェのか? ヨウするに「行って帰ってくる小さなプログラムのブロック」がサブルーチンなんだろ?
そこまでは合ってるよ。これからおぼえるGOSUB命令は、それをもっとラクにするための命令だね。
たしかサブルーチンは、こういうものだったよね。
- ’メインループ
- @MAIN
- PRINT”ここは メインループ です”
- GOTO @SUB
- @MAIN2
- GOTO @MAIN
- ’サブルーチン
- @SUB
- PRINT”ここは サブルーチン です”
- GOTO @MAIN2
これだとホントにサブルーチンにするイミのない、グルグル回るだけのプログラムだけど……。
うん、でもおさらいとしてはこれでいいんじゃないかな。4行目でサブルーチン@SUBに行って、11行目でメインループの中の@MAIN2に帰るんだね。
コレをカンタンにするのがGOSUB命令だってのか? スデにかなりカンタンな気もするが……
まあ見てみようよ。GOSUB命令を使うと、こういうプログラムになるね。
- ’メインループ
- @MAIN
- PRINT”ここは メインループ です”
- GOSUB @SUB
- GOTO @MAIN
- ’サブルーチン
- @SUB
- PRINT”ここは サブルーチン です”
- RETURN
4行目でGOSUB命令を使っているのがわかるね。
それだけじゃねェぞ、5行目にあったラベルが消えてんじゃねェか! これじゃサブルーチンから戻ってこれなく……アレ?
サブルーチンの最後が、GOTO命令じゃなくRETURNになっているね。
GOSUB命令は、RETURN命令とセットで使うんだ。
プログラムを見ればだいたい分かるかな? GOSUBのあとにRETURNがあると、GOSUBしたすぐアトまで自動で帰るんだね。
……リクツはワカッたぜ。あんがいカンタンなモンなんだな。
サブルーチンに行くたびにラベルを付けなくてよくなるのは、たしかにベンリかな。
しかしコレ……サブルーチンって、ホントにやらなきゃダメか? ワザワザGOTOやGOSUBで飛ばさなくても、メインループの中でやればいいコトじゃねェか?
いいトコロに気が付いたね。ジツはここまでで使ったサブルーチンは、たしかにサブルーチンの良さがちゃんと出てないんだな。
そこで、このプログラムを見てもらおうか。
- ’メインループ
- @MAIN
- A=1
- GOSUB @SUB
- A=2
- GOSUB @SUB
- GOTO @MAIN
- ’サブルーチン
- @SUB
- PRINT A;”かいめ の サブルーチン”
- RETURN
ドコがポイントか、わかるかな?
サブルーチンに行く前に、変数Aのナカミを変えているね。それにメインループの中から2回、同じサブルーチンに飛んでいるよ。
それからサブルーチンの中でも変数Aを使ってるぜ! つまり……サッパリわからねーな!
そ、そうなの?
まず同じサブルーチンでも、RETURNで帰る行がちがうというのが1つ目のポイントかな。
同じRETURNなのに、4行目から飛んできたときは4行目に帰ってきて、6行目から飛んできたときは6行目に帰るんだね。ちゃんとしてるなあ。
タシカにそれと同じコトをGOTOでやるのはメンドクセェな……。アチコチから飛ぶんならGOSUBを使えってコトか。
もう1つのポイントは、1コだけのサブルーチンでも、GOSUBする前の変数によってPRINTする字が変わるコトだね。
PRINTにかぎらず、変数によってやることを変えられるんだね。
そういうコトだね。いろいろなプログラムを見てみるとわかるけど、決まった動きを、変数のナカミによって変えながらできるのがサブルーチンの良さだね。
つまりサブルーチンってのは、プログラムのどこから、どんなジョウタイでも、「オイこれやっとけ」って言えば空気を読みながらひととおりのシゴトをこなすってワケだな。
どうしたのワンパク君、よくわかってるじゃないか!
いや、リソウのパシリってこんなカンジじゃねえかって考えたら……
……
……
- GOSUB @(ラベル)
- RETURN
表示モード : [ スマホ・3DS対応表示 | クラシック表示 ]
PukiWiki 1.4.7 Copyright © 2001-2006 PukiWiki Developers Team. License is GPL. Based on "PukiWiki" 1.3 by yu-ji
ページの処理時間 : 0.144 秒 | このページの最終更新 : 2022/09/20 (火) 12:48:51 (565d) | ログイン
Copyright(C) 2011-2014 プチコンまとめWiki ◆1sxkymI8ji30