おさとの雑記帳

日々の学習のアウトプットに使っていきます!

【リーダブルコード】第二章 名前に情報を詰め込む の要約

初めに

変数名や関数名には情報を詰め込むべきです。
例えば、 datatmp などは情報があまり含まれていないといえます(経験としてdataを使った際にレビューをいただいたことが)。
情報を詰め込んだ名前とはどのようなものでしょうか。
命名するポイントの中で特に重要だと感じたのは

  • 明確な単語かどうか
  • 汎用的な名前ではない
  • 抽象的より具体的な名前

の三つです。

明確な単語かどうか

get と言う単語には 「受け取る」「手に入れる」「身につける」などの意味があります。
get関数があるとき、いかにして上記いずれかの意味と知ることができるでしょうか。
仮に receive と言う関数名であれば 何かしらを「受け取る」関数であることを推測できそうです。
fetchであれば何かしらを取ってくる関数であるように感じます。

このように明確な単語を変数や関数名につけてあげることで、より読みやすいコードになります。
コツとして類語辞典をひく、と言うのも挙げられていました。

汎用的な名前ではない

# A
data = {
  first_name: "Rails",
  last_name: "太郎",
  age: 20
}

Aの変数名では中身を見るまでどんなデータが入っているかわかりません。

# B
user_info = {
  first_name: "Rails",
  last_name: "太郎",
  age: 20
}

Bはどうでしょうか?
中身を見るまでもなく、「userに関する情報なんだな」とわかりますね💪

抽象的な名前より具体的な名前

「昨日ラケットでボールを打つスポーツをして筋肉痛なんだよね〜」
...ラケットでボールを打つスポーツ?卓球かな?テニスかな?スカッシュかな?
抽象的すぎる表現を使うとわかりにくいお話になってしまいます。

例えば send_message_to(contact) のようなメソッドがあるとします。このメソッドが「問い合わせに対して何らかのメッセージを送る」のは想像に難くないですね。
ただし、send はいささか抽象的ではないでしょうか?送られてきたものに対して送信はしてるのですが、新規送信のない、返信のみである今回の例の場合 reply_to(conntact) のようにしてあげると、
問い合わせに対して返信していることが明確になりそうです 💪