「goto禁止」を謳うコーディング規約は少なくありません。理由を尋ねると、おおむね返ってくる答えは同じで「gotoを使うとスパゲッティプログラムになるから」ということのようです。私は最近でも「goto」を使ったプログラムはよく見かけますし、私自身も「goto」を使いますが、長い間スパゲッティプログラムは見たことがありません。

「あるべき論」を語るなら、使ってはならないのは「goto」ではなく、「gotoを使いこなせないようなプログラマ」のほうです。「goto」は適切に使えば便利な言語機能であり、コードをシンプルで可読性の高いものにできる可能性を持っています。濫用すると問題を生じるというのであれば、プリミティブな言語機能のほとんどが該当してしまいます。C言語で「ポインタ」を濫用すると危険だからといって「ポインタを使用禁止」にしないように、「goto」だけを使用禁止にするのはおかしな話です。

さて、「あるべき論」はそうであっても、現実には「gotoを使いこなせないプログラマ」が多数存在することも事実です。そうした連中と付き合わなければならない以上、「goto禁止」というのも必要悪なのかもしれません。

「作戦は凡兵を前提として立案せよ」という言葉があります。ソフトウェアの開発においても確かに同じことがいえます。ある程度規模の大きい開発であれば、一騎当千の強者に依存するより、平均的な力量のメンバに合わせるほうが現実的でしょう。

しかし、ここで改めて考えてほしいのです。「goto」というのは、プログラム言語の機能としては、最も基本的かつ単純なもののひとつです。これを使いこなせないようなプログラマは平均的といえるのでしょうか? 仮に(統計上)それが平均だとすると、ちょっと怖くなります。

こんな基本的かつ単純な言語機能は、ほぼすべてのプログラマが使いこなせてほしいところです。けれども、それもまた「あるべき論」の域を出ないのでしょうね。