【3章】「いいよ。」って賛成と反対のどっちの意味で使います?会話もコードも"誤解されない"ことが重要です。@リーダブルコード
『これ一緒にしない?』
「いいよ」
『どっちの"いいよ?"』
こんなやり取りを今まで何回繰り返してきたのでしょうか。日本語は曖昧ですね。
3章のテーマは「誤解されない名前をつける」です。コードを読む人に「どっちの意味?」と聞かれないように誤解されない名前をつけましょう。
◼️あいまいな英語を使わない
例えば下記のようなコードがあるとき、
resultに入っているのはどちらでしょうか。
さて、どちらだと思いますか。
本書には最善の名前とは"誤解されない名前である"というようにあります。
選択なら『select()』、除外なら『exclude()』、文字数に切り詰めるなら『truncate()』、文字数だけ削除するなら『remove()』というように、メソッドの処理内容に合わせた英語を使い分けましょう。
◼️特徴に合わせて英語を使い分ける
【限界値を含めるなら『max/min』】
ジェットコースターに乗ることのできる人の身長について条件をつけるとき、下記の変数名はどうでしょうか。
このとき、身長が120cmの人は乗れるのでしょうか。乗れないのでしょうか。とても曖昧です。
本書では限界値を明確にするには『max/min』をつけよう、というようにあります。今回の場合は限界値を含む『MIN_HIGHT_CAN_RIDE = 120;』とした方が分かりやすいですね。
それ以外にも特徴をもつ英語には下記があります。
【範囲指定には『first/last』】
終わりも含めたいならlastを使うべき。
【"含む~含まない"なら『begin/end』】
終わりは含めないならendを使うべき。
例えば、僕の誕生日である4/26に起こった出来事を表すとき
と書くよりも、
と書く方が簡単です。
このように、range(含む, 含まない)の範囲を表現したい場合は『begin/end』を使うべきです。
【真偽値には冒頭に『is/has/can/should...』】
よりも
というように、canをつけると条件式の中身は「できるorできない」であると想像できるので、初めてコードを見る人でも分かりやすいですね。
三章は「誤解されない名前をつける」でした。
命名するときには想像力を働かせて「この英語を見た人は一番最初にどのような処理を想像するだろうか?」を考えて命名することが重要だということが分かりました。また、真偽値が入る変数であれば『is/has/can/should』などを冒頭につけるということも学びました。これは知っていれば早速使えるルールですね。
会話もコードも誤解されないことが大事ですね。僕も日頃から気を付けようと思います。