Goto文とラベル

Goto ラベル名
行き先で
ラベル名: ←コロンを打つ
よくGoto文を使うと見にくくなる、構造化言語なんだから使うな、ということを言われます。
しかし、それは言語仕様として十分な仕組みが用意されているのが前提です。
VBAのレベルで“構造化言語”として十分かと言えば、「Goto文は使うな」と言い切れるレベルではないと考えます。

もちろん、全体のループの組み方やデータ構造でループの複雑化を避けるというは基本的な考え方です。
例えば無限ループを組む時(抜ける条件はその中の分岐条件で行う)はGotoではなくてDo〜Loopを使うのが当然です。
抜けるのもExit Do文でできます。
使うにしても最小限にすることは重要でしょう。
しかし、それでは足りずにフラグを使ったり、Ifで分岐制御をしたりすれば却って読みにくくなります。

Goto文とセットで語られる“スパゲッティ”とはgotoによる動線が交差するような場合を言います。
使わないより使った方がすっきりと読みやすくなるのであれば使うべきです。

いわゆる“例外処理”や“異常時処理”などはGoto文が本質的に正しい記述と言えるでしょう。

もう一つの深刻な問題は「ループから抜ける」文は用意されていますが、「ループでの以降の処理は飛ばして頭に戻す」文はありません。
これは酷い手抜き仕様であり、Gotoを使わないと処理できない事例が発生します。
GoSub 〜 Return構文もあります。
こんな感じというだけ書いておきます。
Exit Subを書かないと実行時にエラーになります。
はっきり言って見にくい(醜い)ので使うべきではないでしょう。
Sub proc()
GoSub sub1
・・・・
Exit Sub
sub1:
・・・・
Return
End Sub
comments (2)

コメント

http://kennethvadner.hatenablog.com/ | 2017/07/31 04:21 PM
What's up it's me, I am also visiting this web page on a regular basis, this web page
is actually pleasant and the visitors are genuinely sharing fastidious thoughts.
What do you do for a strained Achilles tendon? | 2017/07/29 06:03 AM
Good site you have got here.. It's hard to find high-quality writing like yours these days.
I seriously appreciate individuals like you! Take care!!

Comment Form