『リーダブルコード』――君からはコードのにおいがしないが、君のコードはにおう
リーダブルコード ―より良いコードを書くためのシンプルで実践的なテクニック Dustin Boswell (著)、Trevor Foucher (著)、角征典 (翻訳) オライリージャパン 2012年6月 ISBN-10: 4873115655 ISBN-13: 978-4873115658 2520 円(税込) |
■このコード、なんだかにおうよ
「コードのにおい(code smell)」という言葉がある。なんとなくこのコードは良くないぞ、バグを含んでいるか、あるいは将来にバグを引き起こしそうだぞ、という兆候のことだ。
未熟、怠慢、無知などの理由によって生まれた駄目コードからは、往々にしてこの「コードのにおい」が漂ってくる。多くの責務を抱え込んだクラス、巨大で分岐の多い関数、繰り返し現れる同じ処理(それぞれちょっとだけ違ったりすると最悪)。しかし、書いた本人はたいてい「自分のコードが臭い」などとは、夢にも思わずに書いている。何が臭くて、その結果どのような良くないことが起きるかを学ぶ機会がなかったからだ。
一方、良いコードはびっくりするほどシンプルなことが多い。変数やメソッドには分かりやすい名前がつき、処理の流れは見通しよく整理されていて、重複部分はすっきりと分割して再利用されている。
同じ「コード」だというのに、この違いは何だろう? プログラマに「コードのにおいを嗅ぎ取る能力」があるかどうかだ。よいプログラマであろうとするならば「自分の書いたコードが臭い」なんてことには耐えられないはずだ。しかし、「何が臭いのか」を知らなければ、臭くないコードを書くこともできないだろう。
■においの見張り番
本書「リーダブルコード」は、そんな「におうコード」のサンプルをたくさん収録している。
コードのにおいを嗅ぎ取る能力があるプログラマにとっては、思わず鼻をつまみたくなるようなサンプルコードを載せ、それがなぜいけないか、そのコードのどこがにおうかを丁寧に解説し、そして「におわないコード」になるようにリファクタリングするまでの流れを、においの種類別に何度も見せてくれる。
簡単な例を引用してみよう。
if/else 文のブロックは、並び順を自由に変えることができる。例えば、以下のように書くのと、
if (a == b) { // 第1のケース } else { // 第2のケース }
以下のように書くのは同じことだ。
if (a != b) { // 第2のケース } else { // 第1のケース }
これまであまり深く考えなかったかもしれないけど、この並び順には優劣がある。
p.86 7.2「if/else ブロックの並び順」より
「えっ、何か違うの??」
そう思った人は、ぜひ本書を手に取って「なぜ優劣があるか」を学んでほしい。
ちなみにこのページには、このコードがどう「におう」のかをユーモラスにあらわしたイラストがついている。このイラストは、普段から「におわない」コードを書いているプログラマにとっては、本文を読む前にニヤッと笑えることだろう。そうでないあなたも、ぜひ本文を読んでこのサンプルコードの「におい」を嗅ぎ取れるようになり、そしてこのイラストで笑えるようになってほしい。
■においがつかない無臭コードだ!
本書の帯には「周囲の皆が喜んで使ってくれるような、リーダブルなコードを書く方法を楽しく解説!」とある。
現実のあれこれと同様、「臭い」コードを「みんなが喜んで使ってくれる」とはとても思えない。チームで開発していたり、コードを公開したりしているプログラマの皆さんは、ぜひ本書を読んで、「臭くない」コードを書く技術を身に付けてほしい。
そしてすでに「臭くない」コードを書けるプログラマのみなさんも、やっぱり本書を読んで「うんうんあるある」とうなづくだけの簡単なお仕事をしてみてほしい。
もしかしたら、意外と知らなかったり忘れてたりしたことを発見するかもしれないし、そうでなくても、たくさんのユーモラスなイラストを眺めるだけでも楽しい時間が過ごせる。先ほど引用したp.86では「自分のペット紹介」で笑えるし、p.16「超硬い金属のクギを打ちつける棒状のもの」、p.174「あれでいいかもね」などが特に気に入っている。
■においは元から絶て
世の中から臭いコードを減らすことは、回り回って皆さんの、そして私の仕事を楽しく快適にすることに直結する。本書がきっかけで「臭いコード撲滅運動」が盛り上がり、どんどん「臭いコード」と「臭いコードを書くプログラマ」を駆逐していくのが、今から楽しみである。
(『Wife Hacks ~仕事と家族とコミュニティと~』
コラムニスト kwappa)