『リーダブルコード』第3章 誤解されない名前 読書メモ

リーダブルコード ―より良いコードを書くためのシンプルで実践的なテクニック (Theory in practice)

鍵となる考え:名前が「他の意味と間違えられることはないだろうか?」と何度も自問自答する

results = Database.all_objects.filter("year <= 2011")

filter()だと、選択するのか除外するのか分からない。選択するならselect()、除外するならexclude()とした方が分かりやすい。

限界値を含めるときは min と max を使う

CART_TOO_BIG_LIMIT = 10
if shopping_cart.num_items() <= CART_TOO_BIG_LIMIT:
    Error(" カートにある商品数が多すぎます。")

このコードには、商品数が10の場合にもエラーとして処理してしまうというバグがある。
限界値を明確にするには、名前の前に max_ や min_ をつけたほうがよい。

MAX_ITEMS_IN_CART = 10
if shopping_cart.num_items() < MAX_ITEMS_IN_CART:
    Error(" カートにある商品数が多すぎます。")

範囲を指定するときは first と last を使う

print integer_range(start=2, stop=4)

これでは、[2, 3]が表示されるのか、[2, 3, 4]が表示されるのか分からない。
終端を範囲に含めるのであれば、lastを使ったほうが良い。

※この辺、英語のニュアンスの問題なので、非ネイティブには伝わりづらいような…。

包含/排他的範囲には begin と end を使う

10月16日に開催されたイベントを表示するなら、以下のようなコードになる。

PrintEventsInRange("OCT 16 12:00am", "OCT 17 12:00am")

ここで、PrintEventsInRange()の仮引数の名前のような、包含範囲を示すには、begin/endを使うのがよい。

真偽値の名前

以下の変数名は、パスワードをこれから読み取る必要があるのか、既に読み取り済みなのか分からない。

bool read_password = true;

真偽値の変数名の頭には、is・has・can・shouldなどをつけて分かりやすくする。また、否定形を使うと分かりづらくなることがあるので注意。

ユーザの期待に合わせる

多くのプログラマは、get で始まるメソッドはメンバの値を返すだけの「軽量アクセサ」であるという規約に慣れ親しんでいる。

らしい(自分はあまり実感が無いが…)。

その他、C++標準ライブラリのlist.size()等、データ量によっては処理に非常に時間がかかるメソッドに、一見すると軽そうな名前がつけられていると、軽い気持ちで使ってしまい、結果として処理がものすごく遅くなったりする。

まとめ

最善の名前とは、誤解されない名前である。

コメントをどうぞ

コメントを残す