🐈
【リーダブルコード】リーダブルコード第2章を読んでみた
ご挨拶
昨日の続きでリーダブルコードの第2章を読んでみたのでアウトプットしていきます!
リーダブルコードについて
エンジニアの必読書と書かれていたため、最初の一冊として読んでみることにしました。
この本の目標は「理解しやすいコードを書くこと」です!
気になる方は是非読んでみてください!
この記事の対象者
- 名前の付け方に迷う人
- 理解しやすいコーディングを目指す人
第2章「名前に情報を詰め込む」
- 明確な単語を選ぶ
- tmpやretvalのような汎用的な名前は避ける
- 抽象的な名前よりも具体的な名前を使う
- 接尾辞や接頭辞を使って情報を追加する
- 名前の長さを決める
- 名前のフォーマットで情報を伝える
それぞれ詳しく見ていきましょう。
明確な単語を選ぶ
例えばGetPage(url)
の場合、以下のような問題が発生します。
- ページをローカルキャッシュからとってくるのか?
- ページをインターネットからとってくるのか?
- ページをデータベースからとってくるのか?
例えばインターネットからとってくる場合にはFetchPage(url)
やDownloadPage(url)
の方が明確でしょう。
他にもGet
やSet
は使いがちなので明確にするようにしましょう。
tmpやretvalのような汎用的な名前は避ける
-
retval
は戻り値だという情報以外なにも表していないのでオススメできない - ループイテレーターは
i,j,k
でもイテレーターであることがひと目でわかるので良いが、例えばclubs[i]
よりもclubs[club_i]
やclubs[ci]
のような名前の方が良い(インデックスの最初の文字と配列の名前の最初の文字が一致していればバグ確認しやすい。) -
tmp
は用いてもよいが、一時的なデータ保存という意味合いがない場合は使用をやめよう。
例えば以下のようなコードではtmp
が怠慢に使われている。
let tmp = user.name
tmp += user.phone_number
tmp += user.email
tmp += user.address
template.set("user_info", tmp)
この場合tmp
をuser_info
のような変数にするべきだろう。
値の単位
例えば、以下のようなコードがあったとする。
var start = (new.Date()).getTime()
console.log(`開始時間は${start}秒`)
一見正しく見えるかもしれない。しかし、getTime()
は「秒」ではなく「ミリ秒」をかえすためうまく動作しない。
このような場合はstart
ではなくstart_ms
のほうが良いだろう。
名前の長さを決めよう
- スコープが小さければ多くの情報を詰め込む必要はない
- 接頭辞や接尾語は初めて来たメンバーでもわかるかどうかで考える。(ex)
str
なら分かる - テキストエディタの「単語補完」という機能があるので使ってみると良い
- 名前のフォーマットを決めてメンバ変数とローカル変数の区別できるようにする
第2章のまとめ
- 明確な単語を選ぶ。GetではなくFetchやDownloadなど用途に合わせて名前を決める。
- tmpやretvalのような汎用的な名前は避ける。明確な理由がある場合を除く。
- 具体的な名前を使って詳細に説明する。
- 変数名に大切な情報を追加する。ミリ秒を表すときには_msなど単位をつける
- スコープの大きな変数は長い名前でもよいが、小さいものには短く命名する
- 大文字やアンダースコアに意味を持たせて、変数を見ただけでメンバ変数なのかローカル変数なのかを分かるようにする。
Discussion