プチコン3号&BIGまとめWiki

Beginner/Chapter12 の変更点

パンくずリスト


#title(プチコン3号&BIG 非公式初心者講座 : 第12章 サブルーチン)

#blockdiv(margin-bottom:2em)
CENTER:[ [[← 第11章へ>../Chapter11]]
|
[[もくじに戻る>../#beginner-contents]]
|
[[第13章へ →>../Chapter13]] ]
#blockdiv(end)

#blockdiv(class:block-info,width:60%,margin:auto,padding-left:2em,padding-right:2em,padding-bottom:2em)
* プログラマーからひとこと [#fcbdaf0d]

これまでいろいろな命令をおぼえてきましたが、そのクライマックスになりそうなのが、これから出てくる「GOSUB」命令です。~
ここまでおぼえれば初心者のプログラムはもう最後といっていいかもしれません。

GOSUB。~
英語としてもわりとヘンなんですが、もともとの意味は「GO to SUB routine」といって、まあ「サブルーチンに行け」的なことだったみたいです。

サブルーチンといえば、前にもちょっとだけ出てきましたね。~
「行って帰ってくる小さなプログラムのブロック」なんて説明もしましたが、おぼえてましたか?~
この「行って帰ってくる」をカンタンにするのがGOSUB命令ですが、くわしくはインテリ君の説明にまかせましょう。
#blockdiv(end)

* GOSUB命令 [#e76fd749]

#fukidashi(w,サブルーチンのハナシはもう終わったんじゃねェのか? ヨウするに「行って帰ってくる小さなプログラムのブロック」がサブルーチンなんだろ?)
#fukidashi(i,そこまでは合ってるよ。これからおぼえる&basic{GOSUB};命令は、それをもっとラクにするための命令だね。)
#fukidashi(k,start)
たしかサブルーチンは、こういうものだったよね。
#basic(black){{
’メインループ
@MAIN
PRINT”ここは メインループ です”
GOTO @SUB
@MAIN2
GOTO @MAIN

’サブルーチン
@SUB
PRINT”ここは サブルーチン です”
GOTO @MAIN2
}}
これだとホントにサブルーチンにするイミのない、グルグル回るだけのプログラムだけど……。
#fukidashi(end)

#fukidashi(i,うん、でもおさらいとしてはこれでいいんじゃないかな。4行目でサブルーチン&basic{@SUB};に行って、11行目でメインループの中の&basic{@MAIN2};に帰るんだね。)
#fukidashi(w,コレをカンタンにするのが&basic{GOSUB};命令だってのか? スデにかなりカンタンな気もするが……)
#fukidashi(i,start)
まあ見てみようよ。&basic{GOSUB};命令を使うと、こういうプログラムになるね。
#basic(black){{
’メインループ
@MAIN
PRINT”ここは メインループ です”
GOSUB @SUB

GOTO @MAIN

’サブルーチン
@SUB
PRINT”ここは サブルーチン です”
RETURN
}}
4行目で&basic{GOSUB};命令を使っているのがわかるね。
#fukidashi(end)

#fukidashi(w,それだけじゃねェぞ、5行目にあったラベルが消えてんじゃねェか! これじゃサブルーチンから戻ってこれなく……アレ?)
#fukidashi(k,サブルーチンの最後が、&basic{GOTO};命令じゃなく&basic{RETURN};になっているね。)
#fukidashi(i){{
&basic{GOSUB};命令は、&basic{RETURN};命令とセットで使うんだ。
プログラムを見ればだいたい分かるかな? &basic{GOSUB};のあとに&basic{RETURN};があると、&basic{GOSUB};したすぐアトまで自動で帰るんだね。
}}
#fukidashi(w,……リクツはワカッたぜ。あんがいカンタンなモンなんだな。)
#fukidashi(k,サブルーチンに行くたびにラベルを付けなくてよくなるのは、たしかにベンリかな。)
#fukidashi(w,しかしコレ……サブルーチンって、ホントにやらなきゃダメか? ワザワザ&basic{GOTO};や&basic{GOSUB};で飛ばさなくても、メインループの中でやればいいコトじゃねェか?)

#fukidashi(i,start)
いいトコロに気が付いたね。ジツはここまでで使ったサブルーチンは、たしかにサブルーチンの良さがちゃんと出てないんだな。~
そこで、このプログラムを見てもらおうか。
#basic(black){{
’メインループ
@MAIN
A=1
GOSUB @SUB
A=2
GOSUB @SUB
GOTO @MAIN

’サブルーチン
@SUB
PRINT A;”かいめ の サブルーチン”
RETURN
}}
ドコがポイントか、わかるかな?
#fukidashi(end)

#fukidashi(k,サブルーチンに行く前に、変数&basic{A};のナカミを変えているね。それにメインループの中から2回、同じサブルーチンに飛んでいるよ。)
#fukidashi(w,それからサブルーチンの中でも変数&basic{A};を使ってるぜ! つまり……サッパリわからねーな!)
#fukidashi(i){{
そ、そうなの?
まず同じサブルーチンでも、&basic{RETURN};で帰る行がちがうというのが1つ目のポイントかな。
}}
#fukidashi(k,同じ&basic{RETURN};なのに、4行目から飛んできたときは4行目に帰ってきて、6行目から飛んできたときは6行目に帰るんだね。ちゃんとしてるなあ。)
#fukidashi(w,タシカにそれと同じコトを&basic{GOTO};でやるのはメンドクセェな……。アチコチから飛ぶんなら&basic{GOSUB};を使えってコトか。)
#fukidashi(i,もう1つのポイントは、1コだけのサブルーチンでも、&basic{GOSUB};する前の変数によって&basic{PRINT};する字が変わるコトだね。)
#fukidashi(k,&basic{PRINT};にかぎらず、変数によってやることを変えられるんだね。)
#fukidashi(i,そういうコトだね。いろいろなプログラムを見てみるとわかるけど、決まった動きを、変数のナカミによって変えながらできるのがサブルーチンの良さだね。)
#fukidashi(w,つまりサブルーチンってのは、プログラムのどこから、どんなジョウタイでも、「オイこれやっとけ」って言えば空気を読みながらひととおりのシゴトをこなすってワケだな。)
#fukidashi(i,どうしたのワンパク君、よくわかってるじゃないか!)
#fukidashi(w,いや、リソウのパシリってこんなカンジじゃねえかって考えたら……)
#fukidashi(i,……)
#fukidashi(k,……)

#blockdiv(class:block-info,width:60%,margin:auto,padding-left:2em,padding-right:2em,padding-bottom:2em,margin-bottom:1em)

* 今回のまとめ [#skip]

: GOSUB〜RETURN命令 |
#basic(noline,GOSUB @(ラベル))
#basic(noline,RETURN)
GOSUBで指定したラベルまでジャンプします。その後にRETURNと書いてあれば、GOSUBの直後まで戻ります。

#blockdiv(end)

#blockdiv(background-color:#ff8020, border-color:red, border-width:2px, margin-bottom:1em, padding:1em, color:white)
CENTER:次のページはまだ書きかけです。しばらくおまちください。
#blockdiv(end)

CENTER:&size(24){''[[次のページへ>../Chapter13]]''};

表示モード : [ スマホ・3DS対応表示 | クラシック表示 ]
PukiWiki 1.4.7 Copyright © 2001-2006 PukiWiki Developers Team. License is GPL. Based on "PukiWiki" 1.3 by yu-ji
ページの処理時間 : 0.010 秒 | ログイン
Copyright(C) 2011-2014 プチコンまとめWiki ◆1sxkymI8ji30