曖昧な変数・メソッド名のサンプル
block
2つの意味で使っていた
ディスク上の物理ブロック番号(ディスク上の物理的な位置を表す識別子)
ファイルの論理ブロック番号(論理的な構造に基づいて割り当てられた識別子)
物理ブロック番号が必要なコンテキストで、論理ブロック番号を使っていたバグが発生
原因を特定するまでに半年ほど費やした
block が物理ブロック番号として使われてみると、反射的に「block は物理ブロック番号を保持している」と判断してしまった
回避策: fileBlock と diskBlock のように、別々の変数名を付ける
count
code:java
/**
* Returns the total number of indexlets this object is managing.
*/
int IndexletManager::getCount() {...}
回避策: getActiveIndexlets や numIndexlets のような、より正確な名前を付ける
x, y
位置や座標を表すときによく見かけるradish-miyazaki.icon
blinkStatus
code:java
// Blink state: true when cursor visible
private boolean blinkStatus = true;
status という名前が boolean にしては曖昧
一般的に、ブール値は常に述語であるべき
blink も何が blink(点滅)しているのかを示していないので曖昧
回避策: cursorVisible という名前のほうがベター
code:java
// Controls cursor blinking: true means the cursor is visible,
// false means the cursor is not displayed.
private boolean cursorVisible = true;
true が何を意味するのか推測しやすい
blink という単語が含まれていないので、cursor が常に表示されていない理由を知りたい場合はコメントを読む必要があるが、この情報はさほど重要ではない
この情報が重要でないかどうかは、 他の実装を見るまで定かではないと思う radish-miyazaki.icon
ただこちらのほうが汎用的である radish-miyazaki.icon VOTED_FOR_SENTINEL_VALUE
code:java
// Value representing that the server has not vote (yet) for
// anyone for the current election term
private static final String VOTED_FOR_SENTINEL_VALUE = "null";
名前はこの値は特別である(センチネル値: SENTINEL_VALUE)であることを示しているが、具体的に何が特別なのか示していないので曖昧である 回避策: NOT_YET_VOTED のような具体的な名前を付ける
result
メソッドの戻り値であることを想起させる
どのような値かイメージできない
ただし、実際に戻り値ならばOK
どのような値かはメソッド名からイメージできるので