なんとなくつっこんでみるねすと

C言語でgotoを使うべきかっつう話です。元ネタはこちら
http://d.hatena.ne.jp/tanakh/20041002
http://d.hatena.ne.jp/SaitoAtsushi/20050110/p1
そういえば、Linuxカーネルにもgotoが多いってんで批判している人がいたような・・・
僕の考えでは、C言語やそれに似た言語で、深いネストから脱出する方法としては、ラベルをつけたり、フラグを導入したり、終了条件を書き換えたりするような小技を使うよりは、gotoで抜ける方が圧倒的に意図の分かりやすいソースになると思う。だって、ネストを抜けた後にどこに移動するかが一目瞭然じゃない?
gotoを使うことよりも最悪に凶悪なのは、適切に関数に分割していないプログラムの方だ。関数名と処理の内容が違っていたり、概念的には一続きの処理が不自然に分割されていたり、逆に統合されていたりすると、可読性が著しく低下して、まさにスパゲッティ状態。深いネストについて言えば、それほどまでに凶悪ではないにしても、辛抱強く読み解く必要があることは間違いない。
関数呼出のオーバーヘッドやスタックの問題、グローバルシンボルの不要な増加などの問題のために、関数の節約や深いネストが存在しているのだとしたら、それは言語仕様上の問題じゃないのか?
それにしても、こういうもの(↓)を見ると、言語は選ぶ必要があると思う。それは、Perlを使っていても思うことだ。

all (all (/=0)) mat

ところで、Perlでも、C言語のように書くと、深いネストが簡単に出来てしまいますから、split, join, grep, mapなどを使えるようにしておきたいものです。