2017.04.07
Ted Holt 著

GOTO の正当化された使用を排除する、第二弾

IBMがフリーフォーム RPG(FF RPG)では GOTO命令 と TAG命令 をサポートしないことにしたのにはちょっと困りました。これらの命令コードを使用することは滅多にないのですが、これらを使うしか他にどうしようない時のみに限定して使用してきました。プログラム初心者みたいに扱われたくなかったのです。 しかし今となっては、それは取るに足らない問題です。というのは、ついに IBM がこの GOTOの正当化された使用の代替手段を提供したからです。

約5年の間、私はときどき出くわす状況について書いてきました。それはつまり、RPG サブプロシージャーを終了する前に、クリーンアップ・ルーチンを実行する必要があるという状況のことです。サブプロシージャーが複数の出口点を持つことを禁止するものは何もないため、サブプロシージャー内で 1 つ以上の RETURN 命令が見られることはよくあります。問題は、RETURN 命令は即座にサブプロシージャーを出てしまうので、クリーンアップ・コードを実行しないままになることです。

今までなら、こういった場合、私はRETURN を GOTO に置き換えて、クリーンアップ・ルーチンに分岐させるようにしていました。

しかしIBM は最近、サブプロシージャーからの終了時に実行する必要があるコードを指定できる機能を追加しました。そして、GOTO は私の RPG コードからなくなりました。

では、GOTO のあるコード部分 (左側) と GOTO のない新しいコード (右側) を比較してみましょう。

技術情報code01

私にとってこれはかなりの進歩なのですが、ささいなことに大騒ぎしすぎなのかもしれません。

Edsger Dijkstra がコンピュータの世界に GOTO の本質的な有害性を警告してから、およそ 50 年が経ちました。今日でも、「迷ったら GOTO」がモットーというようなプログラマーは、これらの命令を使いプログラムコードをあちこちに振り回すことで給料をもらっているのです。

私がなぜそんなに GOTO を嫌うのかですって? それは、GOTO を使用するプログラムを理解できるほど私の頭が良くないことへの負け惜しみみたいなものです。

ページトップ

ボタン