最善の変数名とは
誤解されない名前であること
鍵となる考え
変数名が「他の意味と間違えられることはないか?」 何度も自問自答する。
例: filter()
「選択する」メソッドなのか、それとも「除外する」のかわからない。
例: clip(text,length)
下記のように「textの最後を切り落として、 ...をつける」というメソッドの場合において
def clip(text, length):
・・・・
2通りの動作として解釈できる
- 最後からlength文字を削除する。(remove)
- 最大length文字まで切り詰める(truncate)
def Truncate(text, length):
lengthはmax_lengthにしたほうが明確になる。
しかし、max_lengthという変数名も誤解を招きやすい。
3種類の解釈ができる。
- バイト数
- 文字数
- 単語数
といった場合を想定できる(下記は文字列の場合の例)
max_chars
##限界値を含めるときはminとmaxを使う
X CART_TOO_BIG_LIMIT 限界値を含むかどうか曖昧
◯ MAX_ITEMS_IN_CART
範囲を指定するときはfirstとlastを使う
始端、終端を表す言葉は様々ある
start, begin , first
stop , last , end
範囲を表し、それぞれの言葉が始端、終端に含まれる場合にはfirst,lastが適している。
first
last
max , min (意味的に正しく聞こえるのであれば代替可能)
包含/排他的範囲にはbeginとendを使う
ブール値の名前
プール値の変数名には、頭に is, has , can , should などをつけてわかりやすくする。
ユーザーの期待に合わせる
getなどの、多くのメンバが慣れ親しんでいる言葉から始まるメソッドの変数名をつけるときは、特に注意する。
get*() 軽量アクセサとして広く認識されており、仮にgetを先頭にして処理の重いメソッドの関数名として定義した場合、呼び出し側の期待に沿わない使い方をされる場合がある。
そのようなメソッドに対して名前をつける場合は、具体的に処理内容がわかる変数名を定義し、期待に沿うようにする。
複数の名前を検討する
複数の名前を定義できる場合は、可能性のある名前を吟味し、客観的にその変数名が明確に何をするものなのかがわかりやすく、誤解が生じる可能性が低いものを選択し、定義する。
まとめ
冒頭でも述べたが、「誤解されない名前」が最善の名前である。
呼び出し側のメソッド名に対する一般的な認識に対しても注意する。
get(),size()など(基本的に軽量なメソッドの名前として認識されている)
- 上下の限界値を決めるときは、前方に
max_,min_
- 包括的範囲であれば
first_ , last_
- 包含、排他的範囲であれば
begin_ , end_
プール値に名前をつけるとき
is_ , has_
- 否定的な命名はできるだけ避ける。
X disable_ssl