perl のはなし

まぁあれだ。「R.P.Gはバンダイ登録商標です」のようなもので、一般に通用している用語を商標登録などしたら、一生ギャグのネタとしてだけなら言われ続けるぞ
ところでウィキペディアの「ロールプレイングゲーム」に大幅に加筆しといたけど、ウィキペディアに〜は〜の登録商標って書く時は登録番号をちゃんと書こうぜ

continue のはなし

たとえばどういう時に continue を使うかといえば
(以下擬似コード

for (item <- list) {
  if (...) {
    switch (...) {
      ...
      if (...) {
        continue;
      }
    }
  }

  print(item);
}

list の中の item の中から、条件に合うもののみ print する、というコードである
条件チェックが複雑なコードの中に埋もれるのであれば、上で示したようなコードにせざるをえない
(フラグ変数を導入するという手もあるが、コードは余計にややこしくなる)
もちろん、簡単に別の関数にくくりだせるのであれば

if (cond(item)) {
  print(item);
}

のようにしたほうがいいわけであるが、普通は簡単にくくりだせる場合ばかりではない
次回予告。なぜ構造化プログラミング=gotoなしプログラミングという信仰が生まれたか?
(continue を break にすると外側のループの break のつもりが内側の switch の break になる、という罠の例にもなっているなと後から気付いた。これは怖いんだよな)

なぜ構造化プログラミング=gotoなしプログラミングという信仰が生まれたか?

ひとつには "Go To Statement Considered Harmful" のタイトルが一人歩きしたことによるものだろう。現代であればともかく、1980 年代には原文に当たる手段は大学図書館ぐらいしかなく、雑誌などで紹介される際は下手をするとリファレンスさえなく(ちなみに CACM Vol. 11, No. 3)そしてレターが書かれた時代(1968年)からはそれなりに時代が経っており正確な理解が難しくなっていた、という三重苦だったわけだ
そしてもうひとつは、クラシックな BASIC であきらかに必要な GOTO が、構造化言語ではあからさまに必要なくなる、という実例があることが、「構造化プログラミング=gotoなしプログラミング」という神話の源流となったのではないだろうか
(本当に goto のない Java には(一応予約語にはなってるけど)、ループ文にラベルを付けることができて、そのラベルを指定した break や continue があり、例外が言語仕様にある。もし仮にこれらの飛び道具なしに goto 撤廃をしていたら反発されただろう)
さて、まず以下のような C のコードと、それに相当するクラシックな BASIC のコードを考えてみる

if (cond) {
	処理 A
} else {
	処理 B
}

これはクラシックな BASIC では

10 IF !cond THEN GOTO 40
20   処理 A
30 GOTO 50
40   処理 B
50 ...

ジャンプが入組んでややこしいが、こう書くほかない
(一応マルチステートメントを使って以下のようにすっきり書くこともできなくはないが邪道っぽい)

10 IF cond THEN GOTO 20 : 処理 B : GOTO 30
20   処理 A
30 ...

これが例えば構造化 BASIC(確か PC-E650/U6000 の構造化 BASIC がこんな言語仕様だったと思うのだが)であれば

10 IF cond THEN
20   処理 A
30 ELSE
40   処理 B
50 ENDIF

のように GOTO を使わずに書ける。このような、構造化により GOTO が必要なくなるというわかりやすい例があったがために、「構造化プログラミング=gotoなしプログラミング」という神話が生まれたのではないかと思う
はてなの構文ハイライトが ENDIF を認識せんなw)