嫌いな命令

なんか世の中では「GOTO文有害説有害説」という話が盛り上がっているようだ。いまだにあんなネタで盛り上がれる「若さ」がうらやましい。

私の記憶では「GOTO文有害説有害説」のルーツはクヌースで、「GOTO文あっても構造化は出来るぜ」な論文を書いていた… と思うのだけど、嘘かも知れない。ただ言えるのは、そんなものをクヌースが言っても何の説得力もないってこと。クヌースならGOTO文どころか機械語直接コーディングでも、バグなしで綺麗に書けるだろうよ。ああいったものは「凡人にとってどうか」が重要であって、クヌースのような「天才」が何を言っても意味がない。

とは言え、私もCのgoto命令は好きではない。同じように、いきなり現れるreturn命令も好きではない。今時の言語によくある「例外」もあまり好きではない。確かにこいつら、用心して使えば便利なのだけど、その「便利さ」そのものが有害だと思うのだ。

こいつらに共通する問題として、「面倒臭くなったら途中で投げ出す」ということに使えるということがある。後先考えることが強制されない。この性質を正しく使えば、「考えるのが面倒臭くなったことを、後からちゃんと考える」ことに使えるのだが、「面倒臭いからやりっぱなし」にも使える。

人間なんてのは弱いもので、強制されないと楽な方に流れてしまう。「やらなくていい」ものは「やらない」ものになりがちだ。書いてる時は「わかってやっている」つもりでも、後になると「考慮漏れ」なんてことも少なくない。実際、自分のプログラムのバグがどこにあるかを見てみると、たいていそんなところにある。

オーソドックスに「復帰コード見てifで判定」というプログラムだと、嫌でも考慮すべきものが突きつけられる。(void)で逃げる手もないわけじゃないが、なんとなく気持ち悪いから判別する。1つ1つ判定して1つ1つ対処を書くことになる。面倒臭いが「考慮漏れ」は起きにくい。

とか思うと「GOTO文(の類)がなくてもちゃんとしたプログラムが書ける」という主張は、「そう思っているだけじゃねーの?」と言いたくなる。まぁよほどストイックな人なら出来ないこともないだろうが、それは「GOTO文使いたい」という場面とはあまり一致しないように思う。