キミのコードが汚い理由The Rational Edge(1/3 ページ)

ソフトウェア開発者がコードを書くに当たり、エレガンス、構造、そして効率について学ばなくてはならない理由を考察する。

» 2007年01月12日 11時00分 公開
[Gary Pollice(ワーチェスター工芸研究所実務学教授),@IT]

 筆者は今夏、ミネソタ州ミネアポリスで開催されたAgile 2006カンファレンスに参加し、これを大いに楽しんだ。そこで筆者がソフトウェア開発を教えるときのアプローチについてRon Jefferies氏と話をしていたところ、Agile ToolkitのBob Payne氏がこの話題をポッドキャストにしないかと聞いてきた[注1]。筆者が講義をするときのアプローチ[注2]については、1年前のこのコラムで説明しているため、ここでは詳しい説明は省略させていただく。その代わりに、ポッドキャストを録音しているときに遭遇した問題を中心に解説したい。プログラマー全員に共通する、クリーンで保守のしやすいコードを書く能力の欠如だ。

[注1]カンファレンスのポッドキャストはhttp://www.podcastdirectory.com/podcasts/2918参照。


 どうしてこのような話題が頭に浮かんだのだろうか? われわれがポッドキャストを録音する作業を聞いていた人の1人から、大学を出たばかりのいまの連中はなぜ優れたコード(つまり、信頼性が高く、きれいにフォーマットされ、エレガントなコード)を書くことができないのか、という簡単な質問が出た。彼は、「学生には、実世界ではうまくないコードを書くと不利益を受けることが分からないのか? 学生がコードやソリューションに対するエレガンスの必要性を理解できないのは、大学教授たちの指導のどこが間違っているのか?」と疑問を投げ掛けた。

 本稿では、これらの問題と粗悪なコードがもたらす結果をいくつか考察し、考えられるソリューションをいくつか提案する。

そもそも「クリーン」なコードとは何か?

 クリーンなコードとは、美しさのように、見る人によっていろいろな意味で異なる。経験豊かなプログラマーがプログラムのソースコードを見れば、それが読みやすいかどうか分かる。彼らはさらに、コードが効率的かどうか、十分に構造化されているかどうか、そして簡潔性の面でエレガントかどうかについても素早く意見を出せる。これらの特性はどれも定義が難しいが、クリーンかそうでないかは、ソフトウェア開発者にコードを見せれば大抵は一致した意見が得られる。

 クリーンなコードに寄与する要素は多い。そのいくつかは普遍的で、ソフトウェア開発時のあらゆるタイプのプログラミング言語や問題領域に当てはまる。また、クリーンなコードの特性の中には、特定のプログラミング言語に依存するものもある。

 ここで、同じ処理を行う2つの短いコードを見てみたい。これは、テニスのセットカウントを数えるコードだ[注3]。いずれにも、勝ったゲームの数を計算するメソッドと、そのスコアを知らせるメッセージを返すメソッドがある。どちらも入力はすべて正しいと仮定しており、不正入力に対するチェックは行っていない。これらは、設計と構築を同時に進める手法で書かれており、クラスの正しい使い方はクライアント次第となっている。これらはいずれも同じユニットテストに合格している。では、以下の2つのリストを見てみたい。リスト1とリスト2のどちらの方が「クリーン」だろうか?

[注3]テニスをされる方ならお分かりだろうが、このコードを開発しているうちに、われわれは一部のゲーム、セット、最終スコアにかなり複雑な条件があることに気付いた。簡単な解説はhttp://en.Wikipedia.org/Wiki/Tennis#Scoringを参照。


リスト1 リスト1 テニスのセット計算例1(クリックすると拡大)
リスト2 リスト2 テニスのセット計算例2(クリックすると拡大)

 リスト1は、同じ処理を繰り返すようなコードで初心者プログラマーがよく使う幼稚なスタイルで書かれている。必ずしも複雑ではないが、筆者には散らかっていて効率が悪く見える。リスト2の方が複雑な条件になっているが、Javaを理解していれば、かなり読みやすい。唯一疑問を抱くかもしれないとしたら、最後の「else if」の中にある条件の最初の部分だけだ。このクローズに来るということは、どちらかのプレーヤーが勝ったことを意味する。

 いずれのインプリメンテーションも間違ってはいない。実際、これらはどちらも非常に小さく、つまらない例にすぎないので、これらのリストでコードがいかにクリーンか論ずるのはあまり有益ではない。ただ、何をもってインプリメンテーションがクリーンなのかについて読者の興味を深めることはできるだろう。

 クリーンなコードについて扱った記事、Webサイト、書籍は多数存在する。何をもってコードをクリーンとするかについては、誰にでも一家言ある。講義や研究の目的でコードを見る機会が増えているが、筆者がこのうちのいくつかを見たところ、そこには原則があるように思える。それらについては、本稿の後半に示す。

       1|2|3 次のページへ

Copyright © ITmedia, Inc. All Rights Reserved.

注目のテーマ