リーダブルコードを読んだので、印象に残ったポイントをまとめていきます。
リーダブルコードって?
本書は「リーダブルコード―より良いコードを書くためのシンプルで実践的なテクニック」とタイトルにもあるように、コーディングをするうえで意識しておきたいポイントを学ぶ教科書のようなものです。
コーディングに関して学び始めたばかりのタイミングで一度目を通しておくべきとの記事を見かけたので、手に取ってみました。
「理解しやすい」って?
コードを書くにあたって「理解しやすい」コードとはどのようなものを指すのでしょうか。
本書では、読みやすさについて以下のように定義しています。
鍵となる考え
コードは他の人が最短時間で理解できるように書かなければならない。
言われてみれば当たり前ではありますが、他の人が理解できるように書くには自分の思考を他者へ伝える努力が必要となり、初学者の場合はその表現に迷います。
そんな表現方法について、どういったことを意識したら良いのかが詳しく載っていました。
印象に残ったポイント
コーディングの改善方法について、以下のポイントを抑えて取り組みたいと思いました。
印象に残ったポイント
- 短いコードを書くよりも理解しやすいコードを書く
- 誤解されない命名法
- コーディングの意図をコメントで残す
それぞれ詳しく説明します。
短いコードを書くよりも理解しやすいコードを書く
問題を解決するにあたって、コードの解読に必要な文量は短い方が望ましいです。
1行で完結したコードと50行読まなければ処理の理解ができないコードでは、
まず1行で完結したコードの方が取り掛かる労力・理解するまでの時間共に少なく済みます。
しかしながら、必ずしも短い方が良いという訳でもありません。
同じ処理を扱うとしても、理解するまでの時間に差が生まれるようなコーディングの場合は、短いコードよりも理解しやすいコードの方が望ましいです。
誤解されない命名法
名付けについて、以下のように記述されています。
最善の名前とは、誤解されない名前である。
つまり、君のコードを読んでいる人が、君の意図を正しく理解できるということだ。
多くのアドバイスがありましたが、個人的な抑えておきたいポイントは以下2点です。(もちろん他の項目も大切です。)
【個人的な抑えたいポイント】
1. 汎用的な名前は避ける
2. 名前に情報を追加する
内容について触れていきます。
汎用的な名前は避ける
tmp
やretval
などの汎用的な名前は避け、エンティティの値や目的を表した名前を使いましょうというお話です。
自分がよく使う名前だとresult
ですかね。これだけだと何の結果なのかわかりません。
tmp
は「一時的な保管」という意味で使われることが多く、何度も書き換えられてしまうような変数に用いることは望ましくありません。
また、retval
は「戻り値」を指しますが、それ以上の情報がありません。
変数の値を表すような名前を使うべきです。
汎用的な名前を使うこと自体が悪いわけではなく、使用する方が良いケースももちろんあります。
名付けの際には目的に沿った命名をすることが必要とされています。
名前に情報を追加する
let start = (new.Date()).getTime();
console.log(`開始時間は${start}秒`);
このコードは開始時間を読み上げてくれる変数start
が用意されています。
しかしながら、getTime()
で返す値はミリ秒であるため、開始時間は秒を返すはずだというこのコードは間違っていることになります。
このように単位で誤解を生みかねない変数に対しては、あらかじめ情報を追加しておくことが望ましいとされています。
おまけ
かの名高きゲームクリエイター 桜井 政博氏(桜井 政博 / Masahiro Sakurai)も名付けに関して触れています。
「初めて見た人が、一目でわかるように」名前を決定することは、その後の保守を行う上でも大切なことだと分かりますね。
コーディングの意図をコメントで残す
コメントの目的は、以下のように記述されています。
鍵となる考え
コメントの目的は、書き手の意図を読み手に知らせることである。
ただ各コードの動作を説明するのではなく、読み手に理解してもらうために必要な情報を残したいという話です。
コードを書いていた時に「考えていたこと」を記録し、読み手へ伝えることが優れたコメントの残し方とされています。
まとめ
リーダブルコードを読み、個人的に印象に残ったポイントを整理しました。
まだまだ経験が少なく共感できるような項目は少なかったですが、
経験を積んだうえで再度本書を読んでみたいと思います。
(全然呑み込めていない項目もありますので…)