「GOTO を使ったらいいんじゃないの?」
「GOTO を使ってもいいんですか?」
なるほど、彼は GOTO を使ったらクビになるとでも思っているらしい。しかし、このケースでは、GOTO を使わなければ、既存の処理の流れを大きく書き直すか、かなり不自然な書き方をしなければ、目的を実現できなさそうだ。また、GOTO を使っても、コードがそれほど読みにくくなるようなこともないようだった。
「なるほど、どこかで GOTO を使ってはいけないと聞いたんだね。じゃぁ、なんで使ってはいけないと思う?」
「処理が追いかけにくくなるからです」
大きく違っているともいえないが、本質をついた答えではない。
確かに、GOTO を使えば、何処にでもジャンプできるので、読みにくいコードが書けてしまう。しかし、それは GOTO を使うこと自体が原因なのではなく、その使い方が原因なのだ。簡単に言えば、「道具ではなく人間が悪い」のである。
こうした「戒め」の背後には、必ず目的がある。ここでは、「コードを綺麗に書く」ということである。それなのに、戒めを守ることを優先して、本来の目的を逸脱していたのでは意味がない。GOTO を使わないことで汚いコードを書くぐらいなら、GOTO を使って綺麗なコードを書くべきだろう。
★
もちろん、私も、このような戒めが不要だとは思わない。なぜなら、ある程度プログラミングの経験を積まなければ、どんなコードが綺麗でどんなコードが汚いのか、分からないからだ(もっとも、経験しても分からない人もいるのだが・・・)。
例えば、子供を育てるときは「嘘をついてはいけない」と教えるだろう。しかし、大人同士の世界では「嘘も方便」などと言うし、「いい嘘」というのもある。だからといって、ものの善し悪しが分からない子供に対して、「場合によっては、嘘をついてもいいこともあるのだ」などと教えても、その子はただの嘘つきになってしまうだろう。だから、まずは「嘘をついてはいけない」と教えるのである(※)。
「GOTO を使うな」というのは、それと同じことだ。ソースコードの良し悪しが分からないプログラマに、GOTO を自由に使わせれば、劣悪なコードができてしまう。だから、とりあえず「GOTO を使うな」と言うのだ。つまり、「GOTO の扱いは難しいから、お前にはまだ早い」と言われているようなものだ。
★
冒頭の新人プログラマは、「GOTO を使うな」という戒めを知っていた。しかし、それに盲従してヘンテコな書き方をするようなこともなかった。どう書くのがよいのか、彼なりに悩んだのだろう。ちょうど、「嘘をついてはいけない」という戒めと「嘘が必要な時もある」という現実との狭間に悩む子供のように。
そして、どうしたらいいのか分からなくなって、私のところに質問してきたのである。これは、コードの「良し悪し」が理解できてきている、という証拠だろう。
戒め(ルール)は必要だが、それに頼りきって、自分で判断するということができなければ、一人前とはいえない。「お前にはまだ早い」と言われ続けて終わるのが嫌なら、ルールの裏にある本来の目的を理解し、自分で「悩む」ということも必要なのだろう。
※昔の子供は「嘘をつくと閻魔様に舌を抜かれる」などと脅かされたものだが、今はどうなのだろう? 子供を下手に大人扱いして、世の中に嘘つきを増産してはいないだろうか?
■関連記事
・ポインタという考え方
・グローバル変数が嫌われる理由
・プログラムに操られた男
新・C言語入門 シニア編
posted with amazlet on 06.12.03
林 晴比古
ソフトバンククリエイティブ
売り上げランキング: 74189
ソフトバンククリエイティブ
売り上げランキング: 74189
おすすめ度の平均: ![5.0](https://img-proxy.blog-video.jp/images?url=http%3A%2F%2Fimages-jp.amazon.com%2Fimages%2FG%2F09%2Fx-locale%2Fcommon%2Fcustomer-reviews%2Fstars-5-0.gif)
![5.0](https://img-proxy.blog-video.jp/images?url=http%3A%2F%2Fimages-jp.amazon.com%2Fimages%2FG%2F09%2Fx-locale%2Fcommon%2Fcustomer-reviews%2Fstars-5-0.gif)
![5](https://img-proxy.blog-video.jp/images?url=http%3A%2F%2Fimages-jp.amazon.com%2Fimages%2FG%2F09%2Fx-locale%2Fcommon%2Fcustomer-reviews%2Fstars-5-0.gif)
![5](https://img-proxy.blog-video.jp/images?url=http%3A%2F%2Fimages-jp.amazon.com%2Fimages%2FG%2F09%2Fx-locale%2Fcommon%2Fcustomer-reviews%2Fstars-5-0.gif)
![5](https://img-proxy.blog-video.jp/images?url=http%3A%2F%2Fimages-jp.amazon.com%2Fimages%2FG%2F09%2Fx-locale%2Fcommon%2Fcustomer-reviews%2Fstars-5-0.gif)
Code Complete第2版〈上〉
―完全なプログラミングを目指して
―完全なプログラミングを目指して
posted with amazlet on 06.12.03
スティーブ マコネル Steve McConnell クイープ
日経BPソフトプレス
売り上げランキング: 4985
日経BPソフトプレス
売り上げランキング: 4985
おすすめ度の平均: ![5.0](https://img-proxy.blog-video.jp/images?url=http%3A%2F%2Fimages-jp.amazon.com%2Fimages%2FG%2F09%2Fx-locale%2Fcommon%2Fcustomer-reviews%2Fstars-5-0.gif)
![5.0](https://img-proxy.blog-video.jp/images?url=http%3A%2F%2Fimages-jp.amazon.com%2Fimages%2FG%2F09%2Fx-locale%2Fcommon%2Fcustomer-reviews%2Fstars-5-0.gif)
![5](https://img-proxy.blog-video.jp/images?url=http%3A%2F%2Fimages-jp.amazon.com%2Fimages%2FG%2F09%2Fx-locale%2Fcommon%2Fcustomer-reviews%2Fstars-5-0.gif)
![5](https://img-proxy.blog-video.jp/images?url=http%3A%2F%2Fimages-jp.amazon.com%2Fimages%2FG%2F09%2Fx-locale%2Fcommon%2Fcustomer-reviews%2Fstars-5-0.gif)
![5](https://img-proxy.blog-video.jp/images?url=http%3A%2F%2Fimages-jp.amazon.com%2Fimages%2FG%2F09%2Fx-locale%2Fcommon%2Fcustomer-reviews%2Fstars-5-0.gif)