2007年08月21日
実はよく使用されている「GoTo文」

今日も朝からRSSリーダでブログのチェックを行っていたらPHP 6から goto文をサポート? : 地方で活動するweb制作者の日々を綴るblogの記事が気になりました。
プログラム界ではGoTo文の使用は御法度になっているため、存在すら知らない人が多いかもしれないとのことですが、身近に使用している言語ではごく当たり前に使用している場合があります。
その言語とは・・・
詳細は以下を参照ください。
GoTo文とは読んで字のごとくで
非常に単純で昔(N88-Basic)はよく使用していたのですが、条件分岐(IF)などを組み合わせてしまうと
「この場合はあっちへ行け!そうでない場合はこっちへ行け!」
と数が増えてきてしまうとプログラムが非常に読みにくくなり、最近では「GoToを使用しないで、関数化するなどしなさい」と言われています。
この最近は使用されることのないGoTo文ですが、実は非常に身近なプログラムではごく普通に使用されているのです。(身近と感じるのは私だけかな?)
その言語とはVB(A)です。
私はよくMicrosoft社のAccessを使用するのですが、Accessのフォーム作成時に「コントロールウィザード」をONにしてボタンを作成するとVBAにプログラムが自動で作られます。(最近は「コントロールウィザード」を使用していませんが)
例えばフォーム上に「フォームを閉じる」ボタンを作成すると下記のようなプログラムが自動で作成されます。
Accessのヘルプで「GoToステートメント」を見てみるとメモに
ヘルプ上では使用しないようなことを言っておいて、自動生成したときに使っているというのは・・・。
もっとも、「GoToは絶対ダメだよ」というわけではなく、使い方によっては非常に便利なものなので使い方を間違えなければ有効な命令文と私は解釈しています。
PHP 6から goto文をサポート? : 地方で活動するweb制作者の日々を綴るblog
GoTo △△△と書かれている場合は「△△△(と書かれているところ)へ行きなさい」という命令文です。
非常に単純で昔(N88-Basic)はよく使用していたのですが、条件分岐(IF)などを組み合わせてしまうと
「この場合はあっちへ行け!そうでない場合はこっちへ行け!」
と数が増えてきてしまうとプログラムが非常に読みにくくなり、最近では「GoToを使用しないで、関数化するなどしなさい」と言われています。
この最近は使用されることのないGoTo文ですが、実は非常に身近なプログラムではごく普通に使用されているのです。(身近と感じるのは私だけかな?)
その言語とはVB(A)です。
私はよくMicrosoft社のAccessを使用するのですが、Accessのフォーム作成時に「コントロールウィザード」をONにしてボタンを作成するとVBAにプログラムが自動で作られます。(最近は「コントロールウィザード」を使用していませんが)
例えばフォーム上に「フォームを閉じる」ボタンを作成すると下記のようなプログラムが自動で作成されます。
Private Sub 閉じる_Click()このプログラムを見てもわかる通り、エラー時のジャンプにGoTo文を使用しています。
On Error GoTo Err_閉じる_Click
DoCmd.Close
Exit_閉じる_Click:
Exit Sub
Err_閉じる_Click:
MsgBox Err.Description
Resume Exit_閉じる_Click
End Sub
Accessのヘルプで「GoToステートメント」を見てみるとメモに
GoTo ステートメントを多用するとプログラムは読みにくくなり、デバッグが困難になります。できる限り構造化された制御ステートメント (Do...Loop、For...Next、If...Then...Else、または Select Case) を使ってください。と明記してあります。
ヘルプ上では使用しないようなことを言っておいて、自動生成したときに使っているというのは・・・。
ゞ( ̄∇ ̄;)おいおい
もっとも、「GoToは絶対ダメだよ」というわけではなく、使い方によっては非常に便利なものなので使い方を間違えなければ有効な命令文と私は解釈しています。
PHP 6から goto文をサポート? : 地方で活動するweb制作者の日々を綴るblog
Category is 開発言語.
<%PingExcerpt%>
<%PingBlogName%> at <%PingDateTime%>
ま、On Error GoTo は、別コマンドといえますから。N80 の時代から(笑)
ありましたね。そういう命令。VB使っていた頃もあまり使った記憶無いですが...
でも実際は必要性高いでしょうから、まだまだGOTOは使われているって事ですね。
これも今風? の言語では
try catchですからね。
コメントありがとうございます。
> On Error GoTo は、別コマンドといえますから
そうなんだ。
まあ、これはこれでありですけどね。
ルーパス齊藤さん
コメントありがとうございます。
そう、あったんですよ。
あまりGoTo文という意識はありませんけどね。