🐈

リーダブルコード第2章を読んでみた

2024/04/17に公開

ご挨拶

昨日の続きでリーダブルコードの第2章を読んでみたのでアウトプットしていきます!

リーダブルコードについて

エンジニアの必読書と書かれていたため、最初の一冊として読んでみることにしました。
この本の目標は「理解しやすいコードを書くこと」です!
気になる方は是非読んでみてください!
https://amzn.to/3VWXZbp
https://a.r10.to/hPU6pe

この記事の対象者

  • 名前の付け方に迷う人
  • 理解しやすいコーディングを目指す人

第2章「名前に情報を詰め込む」

  • 明確な単語を選ぶ
  • tmpやretvalのような汎用的な名前は避ける
  • 抽象的な名前よりも具体的な名前を使う
  • 接尾辞や接頭辞を使って情報を追加する
  • 名前の長さを決める
  • 名前のフォーマットで情報を伝える

それぞれ詳しく見ていきましょう。

明確な単語を選ぶ

例えばGetPage(url)の場合、以下のような問題が発生します。

  • ページをローカルキャッシュからとってくるのか?
  • ページをインターネットからとってくるのか?
  • ページをデータベースからとってくるのか?

例えばインターネットからとってくる場合にはFetchPage(url)DownloadPage(url)の方が明確でしょう。

他にもGetSetは使いがちなので明確にするようにしましょう。

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)

この場合tmpuser_infoのような変数にするべきだろう。

値の単位

例えば、以下のようなコードがあったとする。

var start = (new.Date()).getTime()
console.log(`開始時間は${start}`)

一見正しく見えるかもしれない。しかし、getTime()は「秒」ではなく「ミリ秒」をかえすためうまく動作しない。
このような場合はstartではなくstart_msのほうが良いだろう。

名前の長さを決めよう

  • スコープが小さければ多くの情報を詰め込む必要はない
  • 接頭辞や接尾語は初めて来たメンバーでもわかるかどうかで考える。(ex)strなら分かる
  • テキストエディタの「単語補完」という機能があるので使ってみると良い
  • 名前のフォーマットを決めてメンバ変数とローカル変数の区別できるようにする

第2章のまとめ

  • 明確な単語を選ぶ。GetではなくFetchやDownloadなど用途に合わせて名前を決める。
  • tmpやretvalのような汎用的な名前は避ける。明確な理由がある場合を除く。
  • 具体的な名前を使って詳細に説明する。
  • 変数名に大切な情報を追加する。ミリ秒を表すときには_msなど単位をつける
  • スコープの大きな変数は長い名前でもよいが、小さいものには短く命名する
  • 大文字やアンダースコアに意味を持たせて、変数を見ただけでメンバ変数なのかローカル変数なのかを分かるようにする。

Discussion