優れたコードを書きたいなら、リーダブルコードはもう読んだだろうか?

f:id:utr066:20180427115426j:plain

「この本いいよー」、「おすすめだよー」 先輩や知人に話を聞くと必ず上がってくるだろう本がリーダブルコードだ。この人すごいなーと自分を思わせたエンジニアは、「読まなければ最悪死に至る」とまで言っていた。何かを聞くととても論理的に教えてくれたのを覚えています。あとタイピング速度が異次元の速さだった。年もほとんど変わらないだろうし、今でも活躍しているのでしょう。

まあ、そんなわけで今日はリーダブルコードを上げていこうと思う。

良いコードとは

良いコード、綺麗なコードを書こう、書きたいとは聞くけど、それは一体どんなコードなのだろう?実行速度の速いコードなのか?短いコードなのか?わかりやすいコードなのか?何を指しているのだろう。

他人が最速で理解できるコードが良いコード?

本書には「コードは他の人が最短時間で理解できるように書かなければいけない。」という考えが記されている。理解するというのは、変更を加えたりバグを見つけたりすることができるという意味。 確かにそんな意図で全てのコードが書かれたプロダクトがあったら見てみたい。変数名も関数名もコメントも見れば、何をやっているかすぐに分かってしまうコードなのかもしれない。それは素敵すぎる。

良いコードを書くために

名前は短いコメントだ

変数でも関数でもクラスでもその命名は短いコメントだという意識を持つことが大事っぽい。確かに自分の書いたコードを他の人が見たときに、理解して欲しいならそれはコメントと言えるのかもしれない。思いやりのある表現だ。

適切な単語を追求する

関数名や変数名をつけるときに実装の速さを重視して、「まあ、こんなもんだろう」とつけた名前もたぶん色々あったなあ・・・でも、それは優れたコードとは言えなくて、もっと適切な単語を追求できたはず。類語辞典を使ったりしてもっと良い命名ができるんじゃないか?んん??と考えることができたら素晴らしい。

自分は何も浮かばないような時は、とりあえずcodicにいろいろ突っ込んでみてたっけなあ。

codic.jp

明確な単語を選ぶ

本書では、以下の例が出てくる。

def GetPage(url) ・・・

まあ、ページを取得してくるんじゃない?自分もこんな感じの書きそうだわ!

けど、ページをどこから取ってくるのかを考えると、どこからとってくるんだろう、うーーんってなる。GetPageを見ただけでは確かにわからん。

  • ローカルから取ってくる
  • インターネットから取ってくる

みたいに「どこから?」を考えると答えはいくつか出てくる。インターネットから取ってくるのであれば、DownlodPageの方が適切だとか。

自分はなんと浅はかな頭でこのメソッドを見ていたのだろう。なるほどなあ、確かにその通りだよなあ。直感的にurl渡してページ取ってくるのね!OK!名前完璧!じゃないんだよな。

命名したものを見つめ直したときに何を思うか

「この変数名はこれでいこう!」「とりあえず変数名はこれにしてあとで直そう!」とかそんなことを思って実装してきた気がする。でも、見返すとやっぱりなんかコレジャナイ感があるんだよなあ。かといって、すぐに代案が浮かぶわけでもない。

メソッド名を見ただけで、そのメソッドが行う動作を連想させるような命名をしたいものだ。

リーダブルコード ―より良いコードを書くためのシンプルで実践的なテクニック (Theory in practice)

リーダブルコード ―より良いコードを書くためのシンプルで実践的なテクニック (Theory in practice)