見出し画像

【3章】「いいよ。」って賛成と反対のどっちの意味で使います?会話もコードも"誤解されない"ことが重要です。@リーダブルコード

『これ一緒にしない?』
「いいよ」
『どっちの"いいよ?"』

こんなやり取りを今まで何回繰り返してきたのでしょうか。日本語は曖昧ですね。

3章のテーマは「誤解されない名前をつける」です。コードを読む人に「どっちの意味?」と聞かれないように誤解されない名前をつけましょう。


◼️あいまいな英語を使わない

画像1

英語の単語は、filter/length/limitのように、プログラミングに使うにはあいまいなものが多い。
引用:p39 3.9まとめより

例えば下記のようなコードがあるとき、
resultに入っているのはどちらでしょうか。

1.
words = ['orange', 'banana', 'strawberry'];
result = words.filter("length > 7");

・ 7文字以上である => ['strawberry'];
・ 7文字以上ではない => ['orange', 'banana'];

2.
\\textからlengthだけ切り落とすclipメソッド
clip(text, length){...};

str = "あいうえお";
result = clip(str, 3);

・lengthの文字数になった 『あいう』
・最後からlengthの文字数だけ削除した『あい』

さて、どちらだと思いますか。
本書には最善の名前とは"誤解されない名前である"というようにあります。

選択なら『select()』、除外なら『exclude()』、文字数に切り詰めるなら『truncate()』、文字数だけ削除するなら『remove()』というように、メソッドの処理内容に合わせた英語を使い分けましょう。

◼️特徴に合わせて英語を使い分ける

画像2

限界値を含めるなら『max/min』
ジェットコースターに乗ることのできる人の身長について条件をつけるとき、下記の変数名はどうでしょうか。

CAN_RIDE_SMALL_LIMIT = 120;

このとき、身長が120cmの人は乗れるのでしょうか。乗れないのでしょうか。とても曖昧です。

本書では限界値を明確にするには『max/min』をつけよう、というようにあります。今回の場合は限界値を含む『MIN_HIGHT_CAN_RIDE = 120;』とした方が分かりやすいですね。

それ以外にも特徴をもつ英語には下記があります。

【範囲指定には『first/last』】
終わりも含めたいならlastを使うべき。

悪い例: "あいうえ"と"あいうえお"どっち?
print str_range(start="あ" stop="お");

○改善後
print str_range(first="あ" last="お")

【"含む~含まない"なら『begin/end』】
終わりは含めないならendを使うべき。

例えば、僕の誕生日である4/26に起こった出来事を表すとき

print events_range("1994-04-26 12:00am", "1994-04-27 11:59:59.9999pm")

と書くよりも、

print events_range("1994-04-26 12:00am", "1994-04-27 12:00am")

と書く方が簡単です。
このように、range(含む, 含まない)の範囲を表現したい場合は『begin/end』を使うべきです。

【真偽値には冒頭に『is/has/can/should...』】

if(UploadStatus){...}

よりも

if(canUpload){...}

というように、canをつけると条件式の中身は「できるorできない」であると想像できるので、初めてコードを見る人でも分かりやすいですね。

画像3

三章は「誤解されない名前をつける」でした。
命名するときには想像力を働かせて「この英語を見た人は一番最初にどのような処理を想像するだろうか?」を考えて命名することが重要だということが分かりました。また、真偽値が入る変数であれば『is/has/can/should』などを冒頭につけるということも学びました。これは知っていれば早速使えるルールですね。

会話もコードも誤解されないことが大事ですね。僕も日頃から気を付けようと思います。


読んでくださりありがとうございます。 これからもnoteで発信していくのでよろしくお願いします!