ラベルとGOTOのはなし
プログラマーからひとこと
あなたがここを読んでいるということは、サンプルプログラム1をやりとげたということでしょう。読み流しただけという人も、まあ、それはそれでいいです。
ずいぶんおぼえる事がたくさんあって、大変だったかもしれません。
なにごとも最初が一番おぼえることがあって大変なものです。
ここからはだいぶラクになると言えなくもないです。
そうは言ってもまだいくつか大事なことが残っているので、つまみ食いしながらおぼえていきましょう。
サンプルプログラム1よりはだいぶ少ないはずですよ。
ラベルとGOTO命令
0001#. PRINT”AAA”
0002#. PRINT”BBB”
0002#. PRINT”BBB”
インテリ「こんなプログラムなら、もうセツメイしなくてもいいよね。」
ワンパク「オレたちをバカにしてんのか? ラクショーすぎてワラっちまうぜ!」
神崎「AAAと表示して、次の行でBBBと表示するだけのプログラムだね。」
AAA
BBB
OK
BBB
OK
インテリ「それでは、これをもとに「ラベル」についておぼえようか。」
0001#. @A
0002#. PRINT”AAA”
0003#. @B
0004#. PRINT”BBB”
0002#. PRINT”AAA”
0003#. @B
0004#. PRINT”BBB”
インテリ「この「@」で始まる行が「ラベル」だよ。」
ワンパク「サッパリなんだかワカらねーが、こういう時はムヤミにRUNするぜ!」
AAA
BBB
OK
BBB
OK
ワンパク「ん? さっきと変わんねェぞ! ……ハハーン、ラベルって言い方といい、こいつは……」
神崎「コメントに使う「’」と同じ、プログラムにイミのない記号なのかな?」
インテリ「おしい! というより、今はまだコメントと同じイミしかないと言うべきかな。」
ワンパク「その何でもワカったような言い方、ハナにつくぜ! 違いを見せてみやがれ!」
インテリ「1行目に、こう足してみるとどうかな?」
0001#. GOTO @B
0002#. @A
0003#. PRINT”AAA”
0004#. @B
0005#. PRINT”BBB”
0002#. @A
0003#. PRINT”AAA”
0004#. @B
0005#. PRINT”BBB”
神崎「「GOTO」……?」
ワンパク「GOTO……ゴ・ト……テメエ、全国のゴトーさんにナニかモンクがあんのか?」
インテリ「そういうイミじゃないんだけど。とりあえずRUNしてみようか。」
BBB
OK
OK
神崎「あれ? 「AAA」が表示されなくなったよ?」
ワンパク「なんてこった……ゴトーもバカにできねえな……」
インテリ「ええと、これはGO TO と読むんだよ。「~に行け」という意味だね。」
神崎「1行目のGOTO @Bは、そのまま読めば「『ラベル@B』に行け」ってこと……?」
ワンパク「そうか! それならツジツマが合うぜ! 1行目のGOTO命令で、イキナリ「@B」と書いてある4行目までジャンプしたわけだ。ジャンプしたから3行目のPRINT”AAA”は飛ばされる……つまり、「AAA」が表示されることもないってワケだ!」
インテリ「ここまではカンペキに分かったようだね。
それじゃあ応用問題を出してみようか。「BBB」「AAA」の順に表示したい時は、どうすればいいかな?」
それじゃあ応用問題を出してみようか。「BBB」「AAA」の順に表示したい時は、どうすればいいかな?」
ワンパク「考えるまでもねェぜ! 「BBB」と表示したアトで、@Aに飛ばせばイイんだろ?
」
0001#. GOTO @B
0002#. @A
0003#. PRINT”AAA”
0004#. @B
0005#. PRINT”BBB”
0006#. GOTO @A
最後の行にGOTO @Aを書きたせばバッチリだゼ!0002#. @A
0003#. PRINT”AAA”
0004#. @B
0005#. PRINT”BBB”
0006#. GOTO @A
」
神崎「……あれ? これだと……」
ワンパク「これがどうしたってんだ? RUNするぜ!」
ワンパク「ウ、ウォオ……!?」
神崎「やっぱり! 2行目まで飛んでから、また6行目で2行目に飛ぶから、いつまでたっても止まらないよ!」
インテリ「そう、GOTOをくり返すプログラムを組んじゃうと、無限にくり返し続けるね。こういうのを「無限ループ」というんだ。」
ワンパク「やっちまった……こりゃリセットか……なんともノーフューチャーだぜ。」
インテリ「おっと待った。こういう時はあせらずSELECTボタンを押そう。」
神崎「あれ、けっこうカンタンに止まるんだね。」
インテリ「おぼえておこうね。プログラムを途中で止める時はSELECTボタン。」
SELECTボタンとSTARTボタン
ワシじゃワシじゃ、プチコンではブイブイいわせとるハカセじゃ。インテリ君、SELECTボタンとはイキナリひとつ飛ばしで教えるではないか。そこらも合わせて、DSiの2つのボタンのセツメイじゃぞい。
- 途中停止
- もともとプログラムを止めるのは「エスケープキー」を使うものだったのじゃ。その代わりになるのがDSiのSELECTボタンなんじゃな。そうそう、この停止ボタンでもよいぞ。
もっとも、ワシもふだんはSELECTを使うタイプじゃな。なんかラクなんじゃよ。 - 簡易実行
- ジツはRUN命令を使わなくても、DSiのSTARTボタンを押すとプログラムの実行になるのじゃ。編集モードからボタン1つでイキナリじゃから、こりゃラクじゃな。
インテリ「さて、無限ループをしないように、PRINT”AAA”の後に1行ふやしてみようか。
0001#. GOTO @B
0002#. @A
0003#. PRINT”AAA”
0004#. END
0005#. @B
0006#. PRINT”BBB”
0007#. GOTO @A
」0002#. @A
0003#. PRINT”AAA”
0004#. END
0005#. @B
0006#. PRINT”BBB”
0007#. GOTO @A
神崎「あっ、前におぼえたプログラムを終わらせるEND命令だね。こういうトキにEND命令にイミが出てくるんだね。」
BBB
AAA
OK
AAA
OK
ワンパク「フムム……しかしコレ、こうして見るとGOTO使わなくてもフツーにこう書けばすむんじゃねェか?
0001#. PRINT”BBB”
0002#. PRINT”AAA”
」0002#. PRINT”AAA”
インテリ「その通り。あっちに行ったりこっちに行ったりするプログラムは、見る方もこんがらがるから「スパゲッティプログラム」と呼ばれて、良くないものとされているね。
じゃあ何のためにラベルとGOTO命令があるのか? それは次のサンプルで確かめていこう!」
じゃあ何のためにラベルとGOTO命令があるのか? それは次のサンプルで確かめていこう!」
ワンパク「ケッキョクまたそのパターンかよ!」
- ラベル
- 先頭@の後に英数字で、ラベルになります。
- GOTO命令
- GOTO @(ラベル名)
指定したラベルまでジャンプします。 - SELECTボタンとSTARTボタン
- SELECTボタンでプログラム停止、STARTボタンでプログラム実行(RUN)です。