GOTOを使ってもいいんですか? | 悪態のプログラマ

悪態のプログラマ

とある職業プログラマの悪態を綴る。
入門書が書かないプログラミングのための知識、会社の研修が教えないシステム開発業界の裏話は、新人プログラマや、これからプログラマを目指す人たちへのメッセージでもある。

ある新人プログラマに質問を受けた。処理の流れをどう書いたらいいのか分からないという。

「GOTO を使ったらいいんじゃないの?」
「GOTO を使ってもいいんですか?」

なるほど、彼は GOTO を使ったらクビになるとでも思っているらしい。しかし、このケースでは、GOTO を使わなければ、既存の処理の流れを大きく書き直すか、かなり不自然な書き方をしなければ、目的を実現できなさそうだ。また、GOTO を使っても、コードがそれほど読みにくくなるようなこともないようだった。

「なるほど、どこかで GOTO を使ってはいけないと聞いたんだね。じゃぁ、なんで使ってはいけないと思う?」
「処理が追いかけにくくなるからです」

大きく違っているともいえないが、本質をついた答えではない。

確かに、GOTO を使えば、何処にでもジャンプできるので、読みにくいコードが書けてしまう。しかし、それは GOTO を使うこと自体が原因なのではなく、その使い方が原因なのだ。簡単に言えば、「道具ではなく人間が悪い」のである。

こうした「戒め」の背後には、必ず目的がある。ここでは、「コードを綺麗に書く」ということである。それなのに、戒めを守ることを優先して、本来の目的を逸脱していたのでは意味がない。GOTO を使わないことで汚いコードを書くぐらいなら、GOTO を使って綺麗なコードを書くべきだろう。


もちろん、私も、このような戒めが不要だとは思わない。なぜなら、ある程度プログラミングの経験を積まなければ、どんなコードが綺麗でどんなコードが汚いのか、分からないからだ(もっとも、経験しても分からない人もいるのだが・・・)。

例えば、子供を育てるときは「嘘をついてはいけない」と教えるだろう。しかし、大人同士の世界では「嘘も方便」などと言うし、「いい嘘」というのもある。だからといって、ものの善し悪しが分からない子供に対して、「場合によっては、嘘をついてもいいこともあるのだ」などと教えても、その子はただの嘘つきになってしまうだろう。だから、まずは「嘘をついてはいけない」と教えるのである(※)。

「GOTO を使うな」というのは、それと同じことだ。ソースコードの良し悪しが分からないプログラマに、GOTO を自由に使わせれば、劣悪なコードができてしまう。だから、とりあえず「GOTO を使うな」と言うのだ。つまり、「GOTO の扱いは難しいから、お前にはまだ早い」と言われているようなものだ。


冒頭の新人プログラマは、「GOTO を使うな」という戒めを知っていた。しかし、それに盲従してヘンテコな書き方をするようなこともなかった。どう書くのがよいのか、彼なりに悩んだのだろう。ちょうど、「嘘をついてはいけない」という戒めと「嘘が必要な時もある」という現実との狭間に悩む子供のように。

そして、どうしたらいいのか分からなくなって、私のところに質問してきたのである。これは、コードの「良し悪し」が理解できてきている、という証拠だろう。

戒め(ルール)は必要だが、それに頼りきって、自分で判断するということができなければ、一人前とはいえない。「お前にはまだ早い」と言われ続けて終わるのが嫌なら、ルールの裏にある本来の目的を理解し、自分で「悩む」ということも必要なのだろう。





※昔の子供は「嘘をつくと閻魔様に舌を抜かれる」などと脅かされたものだが、今はどうなのだろう? 子供を下手に大人扱いして、世の中に嘘つきを増産してはいないだろうか?



■関連記事
ポインタという考え方
グローバル変数が嫌われる理由
プログラムに操られた男



新・C言語入門 シニア編
林 晴比古
ソフトバンククリエイティブ
売り上げランキング: 74189
おすすめ度の平均: 5.0
5 ふとしたときの辞書代わりに
5 シニアとあるが、入門書、新人研修のテキスト
5 C言語の教育書としては最高と思う


Code Complete第2版〈上〉―完全なプログラミングを目指して
スティーブ マコネル Steve McConnell クイープ
日経BPソフトプレス
売り上げランキング: 4985
おすすめ度の平均: 5.0
5 これは理解できないとヤバイです。
5 我流プログラミングから抜け出す意思のあるひとへ
5 人に勧めたくなる本