Boolean型の変数に適した命名規則
背景
Boolean 型の変数に適した命名規則をあらためて考えてみた。
適切な命名規則に従うことで、コードの可読性が向上しメンテナンス性も良くなる。
プレフィクス
Boolean 型の変数には、 is
、has
、should
などのプレフィクスが一般的に利用される(このほかにもcan
、will
、did
、must
なども利用される)。これらのプレフィクスを利用することで、変数がBoolean型というのが明示的になり、コードの可読性が向上する。また、IDEの補完機能も効果的になる。
// isを使った例
const isExpired = true;
const isFinished = false;
// hasを使った例
const hasPermission = true;
const hasError = false;
// shouldを使った例
const shouldShowModal = true;
const shouldFetchData = false;
プレフィクスの重要性
プレフィクスを利用することで、その変数が真偽値であると明確になり、コードを読む際にその変数が何を意味しているのか直感的に理解できる。例えば、isExpired
という変数名は、その変数が有効期限切れかどうかを明示している(expired
という変数名だけでは、期限切れがどういう状態なのかが明確ではない)。
条件の明示
変数名には、その変数が何に対する条件であるかを明示する名前を付けると良い。
// 有効期限切れかどうか
const isExpired = true;
// 許可があるかどうか
const hasPermission = true;
否定形を避ける
Boolean型の変数では否定形を利用せず、肯定形で命名することを推奨する。否定形の変数は読み手に混乱を与える可能性がある。例えば、isNotExpired
とisValid
では、前者が混乱を招く可能性が高い。
// 🆖避ける例
const isNotExpired = false;
// 🆗推奨する例
const isExpired = true;
Boolean 型の変数を使う場合、否定系の単語を使うと、変数の意味が逆になってしまって、読みやすさが損なわれてしまう。たとえば、isNotExpired
は否定系の単語を使っているため、意味が逆転してしまい、読み手が混乱してしまうことがある。また、否定形を使うと条件式が複雑になって、読み手が理解するのに時間がかかることもある。そのため、できるだけ肯定系の単語を使うことを推奨する。たとえば、isExpired
ではなく、isValid
という単語を使うことができる。
同じ意味の単語を避ける
同じ意味を持つ異なる単語を利用すると、読み手に混乱を与える可能性がある。例えば、isAvailable
とisEnabled
は、どちらも機能が利用可能であるかどうかを示すが、単語が異なるために混乱を招く。
// 同じ意味を持つ単語を避ける例
const isAvailable = true;
const isEnabled = true;
const isAllowed = true;
// 避ける必要がない例
const hasPermission = true;
const canAccess = true;
同じ意味の単語を避ける理由は、開発者が同じ意味を持つ単語を違う方法で使うと、読み手が混乱してしまう場合もある。たとえば、isAvailable
とisEnabled
とisAllowed
は同じような意味を持っているが、使う単語が違うので、開発者がそれらを使い分ける必要があると読み手が理解するのに時間がかかる。したがって、似たような意味を持つ単語を避け、プロジェクトで共通の命名規則を使うことが重要である。これによって、コードが読みやすくなり、メンテナンスやデバッグがしやすくなる。
プロジェクトの命名規則やコーディング規約に従う
各プロジェクトには独自の命名規則やコーディング規約が存在する場合がある。それに従うことで、ほかの開発者もコードを理解しやすくなる。
// プロジェクトの命名規則に従った例
const isExpiredDate = true;
const hasEditPermission = true;
秩序を保つためにもプロジェクト全体で決めた書き方を守ること(一貫性・統一性)がまずは大切である。
プロジェクトで決めた命名規則やコーディング規約にしたがってコードを書くことで、ほかの開発者がコードを理解しやすくなり、コードの修正や保守もスムーズに行える。各プロジェクトによって規約は異なるため、プロジェクトの方針に合わせた規約へ従うことが大切である。
Linter で矯正する(ESLint)
もし、Webフロントエンド環境で ESLint を導入していて、@typescript-eslint
を利用して Boolean型変数の命名に接頭辞を強制できる(@typescript-eslint/naming-convention
ルールを適用する)。
// .eslintrc.js
module.exports = {
// ...
rules: {
'@typescript-eslint/naming-convention': [
'error',
{
selector: 'variable',
types: ['boolean'],
prefix: ['is', 'has', 'should'],
},
],
},
};
まとめ
Boolean型の変数に適した命名規則を採用することで、コードの可読性とメンテナンス性が向上する。プレフィクスを利用し、否定形を避け、同じ意味を持つ異なる単語を避けることで、理解しやすい変数に近付ける。