2006年12月03日(日)

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 人に勧めたくなる本


AD
いいね!した人  |  コメント(2)  |  リブログ(0)

argvさんの読者になろう

ブログの更新情報が受け取れて、アクセスが簡単になります

コメント

[コメントをする]

2 ■RE: 無題

t さん、こんにちは。
本来、「躾」がきちんとできていれば、「法」は不要なんですよね。

1 ■無題

同意です。
コーディング規約はルールではなくマナーにして欲しいですね。

コメント投稿

AD

Ameba人気のブログ

Amebaトピックス

      ランキング

      • 総合
      • 新登場
      • 急上昇
      • トレンド

      ブログをはじめる

      たくさんの芸能人・有名人が
      書いているAmebaブログを
      無料で簡単にはじめることができます。

      公式トップブロガーへ応募

      多くの方にご紹介したいブログを
      執筆する方を「公式トップブロガー」
      として認定しております。

      芸能人・有名人ブログを開設

      Amebaブログでは、芸能人・有名人ブログを
      ご希望される著名人の方/事務所様を
      随時募集しております。