名前の誤解を避ける方法
最近リーダブルコード(The Art of Readable Code)を読んでいます。この記事は、本の内容をしっかり頭に入れて、お浚いする為の読書ノートです。
今回は、第3章「Names That Can’t Be Misconstrued」について、まとめてみました。
1. 誤解されない名前の重要性
多くの英単語はプログラミングにおいて曖昧な意味を持ちます。例えば、filter、length、limit。
例: Filter():
results = Database.all_objects.filter("year <= 2011")
このresultsには何が含まれているでしょうか?
- Objects whose year is <= 2011 ?
- Objects whose year is not <= 2011 ?
問題は、英語のfilterがとても曖昧で、「取り出す」のか「取り除く」のかが不明確です。
「取り出す」の場合は、select()
がより適しています。
「取り除く」の場合は、exclude()
が適しています。
filterなどの名前は非常に誤解されやすいため、避けるのがベストです。
2. 上限値と下限値の名前付け
値の上限または下限を定義する場合、max_やmin_を使うと良いでしょう。
例えば、最大値を表す変数にはmax_value、最小値を表す変数にはmin_value。
// 上限・下限を示す場合
max_length = 100
min_price = 1000
3. 範囲を表す名前付け
範囲を表す際には、包含範囲にはfirstとlast、包含/排他的範囲にはbeginとendを使用するのが適しています。
// 包含範囲
first_index = 0
last_index = 10
// 包含/排他的範囲
begin_index = 0
end_index = 10 // 0から9までの要素を示す
4.ブール値の名前付け
ブール値の名前にはisやhasなどを使ってください。
// 良い例
is_valid = True
has_permission = False
また、否定形は理解しづらく、誤解の元になります。否定的な言葉(例:disable_ssl)は避けましょう。代わりに肯定的な表現を使用します。
// 良い例
use_ssl = True
// 悪い例
disable_ssl = False
5. 他の開発者の期待に注意
ややこしいですが、ある単語に対する期待にも注意すべきです。例えば、get()やsize()といったメソッドは軽量であることを期待されます。これらのメソッドが重い処理を伴う場合、誤解を招く可能性があります。
// 良い例
retrieve_user_data():
// データベースから大量のデータを取得する処理
// 悪い例(重い処理を行っている)
get_user_data():
// データベースから大量のデータを取得する処理
まとめ
これを参考にし、コードの可読性を高めるための名前付けを心がけましょう。他の開発者が意図した通りにコードを理解できるようになります。