社員みんなの写真

読みやすいコードを書くために


マックシステム (2014.04.22 09:00) | メンバーの戯言|

こんにちは。
ITソリューション部の恩田です。

突然ですが、みなさんは、昔書いた自分のコードを見て、途方に暮れたことはないでしょうか?

まあ、自分が書いたものだったらそこまではないと思うでしょう。
ですが、それが他の人の書いたものだったらどうでしょうか?

あまりの衝撃にぶつぶつ言いたくなったことが、1度や2度はあるのではないかと思います。

なので、せめて自分の書いたコードを見て、
他の人ができるだけそうならないようにしたいなあと常々思っています。
(思ってはいますが、たまに変なのを書いてしまって失敗したなあと思うこともあります)

そこで今回は、読みやすいコードを書くためにはどうしたらよいかということで、
今まで読んだ本でとても良かった「リーダブルコード」という本について、ご紹介したいと思います。

201404150131

この本は、コードは他の人が最短時間で理解できるように書かなければならない
ということを前提に、読みやすい(=理解しやすい)コードを書くには、どうすればよいか、
どのような点に気をつければよいか、ということを実際の例を用いて教えてくれます。

いくつかなるほどと思ったことがありましたので、抜粋して3つご紹介したいと思います。

1.名前はユーザーの期待に合わせてつける

本書では名前を付ける場合には、誤解されないように気をつける必要があるとしています。

名前が「他の意味と間違えられることはないだろうか?」と何度も自問自答する。

よく何かのデータを取得する際に、get~というメソッド名をつけてしまいがちではないでしょうか?
(私だけでしょうか?)

Javaとかだと、アクセサメソッドとして使うことが多いので、
そのメソッドを利用するユーザは、軽い処理のメソッドと勘違いして使ってしまう可能性があります。

もしそれが時間のかかる処理だった場合、使い方によっては大変なことになるでしょう。

そのため、重い処理の場合は、compute~のように
なにか内部で処理するんだな、ということがわかるような名前にする必要があります。

コードに限ったことではありませんが、名前は誤解されないようよく考えてつけなければなりません。

2.コメントには監督のコメンタリーを入れる

本書ではコメントを書く目的は以下のように定義されています。

コメントの目的は、書き手の意図を読み手に知らせることである。

コメントはコードが何をしている処理なのかを説明することだと思っていました。
(広義の意味では意図に含まれるかもしれませんが……)

そうではなく、コードからは見えない意図を伝えることがコメントであるということです。
本書では以下のような例が挙げられています。

// このデータだとハッシュテーブルよりもバイナリツリーのほうが40%速かった。
// 左右の比較よりもハッシュの計算コストのほうが高いようだ。

上記のようなコメントが書いてあれば、他の人が、別の方法を試そうとして
無駄な時間を過ごすことがなくなるということが明らかです。

これからは、今までより一歩進んだ意義のあるコメントがかけるような気がしませんか?


3.if/elseブロックの並び順は注意をひく条件を先に書く

本書では、条件やループなどの制御フローの書き方についても考察されています。

条件やループなどの制御フローはできるだけ「自然」にする。
コードの読み手が立ち止まったり読み返したりしないように書く。

・条件は基本的に否定形よりも肯定計を使う。
・単純な条件を先に書く。
・否定形でも関心を引く条件や目立つ条件の場合は先に書く。

正直、if/elseの並び順などあまり考えたこともありませんでしたが、
本書では、こんなに細かいこともいろいろと考察されているので驚きでした。


◆まとめ
1.名前はユーザーの期待に合わせてつける
2.コメントには監督のコメンタリーを入れる
3.if/elseブロックの並び順は注意をひく条件を先に書く

3つほどあげてみましたが、これ以外にも多くのテクニックが載っています。
また、様々な観点からのアドバイスが詰まっていて、すぐに使えるテクニックばかりです。

この本は、まえがきに「やさしい先輩がアドバイスするように」訳したというだけあって、
本の内容もとても読みやすく書かれています。(挿絵は微妙なのですが……)
ソフトカバーで200Pほどなので、持ち運びもしやすいです。

読みやすいコードがかけてないなあと思っている方、
自分の書いているコードは本当に読みやすいのかなと思っている方は、
是非読んでみてはいかがでしょうか?