プチコンまとめArchive

プチコン3号&BIG 非公式初心者講座 : 第4章 ラベルとGOTOのはなし

パンくずリスト

このページの最終更新 : 2022/09/20 (火) 12:49:29

プログラマーからひとこと

あなたがここを読んでいるということは、サンプルプログラム1をやりとげたということでしょう。
読み流しただけという人も、まあ、それはそれでいいです。

ずいぶんおぼえる事がたくさんあって、大変だったかもしれません。
なにごとも最初が一番おぼえることがあって大変なものです。
ここからはだいぶラクになると言えなくもないです。

そうは言ってもまだいくつか大事なことが残っているので、つまみ食いしながらおぼえていきましょう。
サンプルプログラム1よりはだいぶ少ないはずですよ。

ラベルとGOTO命令

  1. PRINT”AAA”
  2. PRINT”BBB”
インテリくん

こんなプログラムなら、もうセツメイしなくてもいいよね。

ワンパクくん

オレたちをバカにしてんのか? ラクショーすぎてワラっちまうぜ!

神崎

AAAと表示して、次の行でBBBと表示するだけのプログラムだね。

  1. AAA
  2. BBB
  3. OK
インテリくん

それでは、これをもとに「ラベル」についておぼえようか。

  1. @A
  2. PRINT”AAA”
  3. @B
  4. PRINT”BBB”
インテリくん

この「」で始まる行が「ラベル」だよ。

ワンパクくん

サッパリなんだかワカらねーが、こういう時はムヤミにRUNするぜ!

  1. AAA
  2. BBB
  3. OK
ワンパクくん

ん? さっきと変わんねェぞ! ……ハハーン、ラベルって言い方といい、こいつは……

神崎

コメントに使う「」と同じ、プログラムにイミのない記号なのかな?

インテリくん

おしい! というより、今はまだコメントと同じイミしかないと言うべきかな。

ワンパクくん

その何でもワカったような言い方、ハナにつくぜ! 違いを見せてみやがれ!

インテリくん

1行目に、こう足してみるとどうかな?

  1. GOTO @B
  2. @A
  3. PRINT”AAA”
  4. @B
  5. PRINT”BBB”
神崎

「GOTO」……?

ワンパクくん

GOTO……ゴ・ト……テメエ、全国のゴトーさんにナニかモンクがあんのか?

インテリくん

そういうイミじゃないんだけど。とりあえずRUNしてみようか。

  1. BBB
  2. OK
神崎

あれ? 「AAA」が表示されなくなったよ?

ワンパクくん

なんてこった……ゴトーもバカにできねえな……

インテリくん

ええと、これはGO TO (ゴー トゥー) と読むんだよ。「~に行け」という意味だね。

神崎

1行目のGOTO @Bは、そのまま読めば「『ラベル@B』に行け」ってこと……?

ワンパクくん

そうか! それならツジツマが合うぜ! 1行目のGOTO命令で、イキナリ「@B」と書いてある4行目までジャンプしたわけだ。
ジャンプしたから3行目のPRINT”AAA”は飛ばされる……つまり、「AAA」が表示されることもないってワケだ!

インテリくん

ここまではカンペキに分かったようだね。
それじゃあ応用問題を出してみようか。「BBB」「AAA」の順に表示したい時は、どうすればいいかな?

ワンパクくん

考えるまでもねェぜ! 「BBB」と表示したアトで、@Aに飛ばせばイイんだろ?

  1. GOTO @B
  2. @A
  3. PRINT”AAA”
  4. @B
  5. PRINT”BBB”
  6. GOTO @A

最後の行にGOTO @Aを書きたせばバッチリだゼ!

神崎

……あれ? これだと……

ワンパクくん

これがどうしたってんだ? RUNするぜ!

exec_loop.jpg
ワンパクくん

ウ、ウォオ……!?

神崎

やっぱり! 2行目まで飛んでから、また6行目で2行目に飛ぶから、いつまでたっても止まらないよ!

インテリくん

そう、GOTOをくり返すプログラムを組んじゃうと、無限にくり返し続けるね。こういうのを「無限ループ」というんだ。

ワンパクくん

やっちまった……こりゃリセットか……なんともノーフューチャーだぜ。

インテリくん

おっと待った。こういう時はあせらず3DSのSTARTボタンを押そう。

exec_break.jpg
神崎

あれ、けっこうカンタンに止まるんだね。

インテリくん

おぼえておこうね。プログラムを途中で止める時はSTARTボタン。

STARTボタン

ハカセ

ワシじゃワシじゃ、プチコンではブイブイいわせとるハカセじゃ。
インテリ君、STARTボタンとはイキナリひとつ飛ばしで教えるではないか。そこらも合わせて、3DSのボタンのセツメイじゃぞい。

途中停止
もともとプログラムを止めるのは専用のSTOPボタンを使うものだったのじゃ。それはプチコンの画面にも key_stop.png コレがあるのじゃが、その代わりになるのが3DSのSTARTボタンなんじゃな。ポチッと押すだけでプログラムが止まるぞい。
ワシもふだんはSTARTを使うタイプじゃな。なんかラクなんじゃよ。
簡易実行
ジツはRUN命令を使わなくても、3DSのSTARTボタンを押すとプログラムの実行になるのじゃ。EDITモードからボタン1つでイキナリじゃから、こりゃラクじゃな。つまり、実行も停止もSTARTボタンひとつでオッケーというわけじゃ。
インテリくん

さて、無限ループをしないように、PRINT”AAA”の後に1行ふやしてみようか。

  1. GOTO @B
  2. @A
  3. PRINT”AAA”
  4. END
  5. @B
  6. PRINT”BBB”
  7. GOTO @A
神崎

あっ、前におぼえたプログラムを終わらせるEND命令だね。こういうトキにEND命令にイミが出てくるんだね。

  1. BBB
  2. AAA
  3. OK
ワンパクくん

フムム……しかしコレ、こうして見るとGOTO使わなくてもフツーにこう書けばすむんじゃねェか?

  1. PRINT”BBB”
  2. PRINT”AAA”
インテリくん

その通り。あっちに行ったりこっちに行ったりするプログラムは、見る方もこんがらがるから「スパゲッティプログラム」と呼ばれて、良くないものとされているね。
じゃあ何のためにラベルとGOTO命令があるのか? それは次のサンプルで確かめていこう!

ワンパクくん

ケッキョクまたそのパターンかよ!

今回のまとめ

ラベル
先頭の後に英数字で、ラベルになります。
GOTO命令
GOTO @(ラベル名)
指定したラベルまでジャンプします。
STARTボタン
STARTボタンでプログラム実行(RUN)され、実行中のときは停止します。