鍵となる考え:名前が「他の意味と間違えられることはないだろうか?」と何度も自問自答する
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()等、データ量によっては処理に非常に時間がかかるメソッドに、一見すると軽そうな名前がつけられていると、軽い気持ちで使ってしまい、結果として処理がものすごく遅くなったりする。
まとめ
最善の名前とは、誤解されない名前である。