コードの可読性を高めるための命名規則
お久しぶりです、システム開発グループの関谷です。
最近はコードレビューがメインで、コードを書く機会は減りました。コードレビューをしていると、読みやすいコードはコードレビューに掛かる時間が短くなり、不具合を見つけやすいと感じました。今回はコードレビューを通じて学んだ自分なりの考えをご紹介します。
プログラミングにおける名前の重要性
実装にあたって最初に考えることは、クラス名やメソッド名からではないでしょうか。おそらく調査するときもクラス名やメソッド名を見ることが多く、名前から情報が読み取れれば理解が早くなると思います。
例えばアカウント情報ならaccountInfo
ではなくaccount
にしても意味は伝わるのではないでしょうか。仮にInfo
をつけてしまうと大体は情報が含まれるため、冗長になってしまいます。
他にもCheck
は便利ですが具体的な処理を推測しにくいため、コードを確認しないと処理内容がわかりません。
そのためInfo
やCheck
などの汎用的な名前を使うと、コードの意図が不明確になり、他の人がコードを理解するのに時間がかかる可能性が高いと考えています。
名称 | 悪いパターン | 良いパターン |
---|---|---|
アカウント情報 | accountInfo | account |
アカウント情報の入力チェック | accountCheck | accountValidation |
アカウントの存在チェック | accountCheck | accountExist |
ログイン機能利用設定 | loginCheck | loginUse |
処理に合わせた名前をつける
エンジニアの仕事では、コードを書く時間よりも読む時間のほうが多いと言われています。もしコードが読みやすければ理解が早く効率アップに繋がります。アトラスは開発生産性の向上にも取り組み始めているので、コードの読みやすさはより重要になってきています。
どのようなコードが読みやすいのかというと、1つのメソッドは単純な処理のみで短くまとまっていて、名前から想像できる処理の内容と一致していることだと思います。
以下のサンプルコードは一見読みやすいように見えますが、メソッド単位で見ると改善の余地があります。
1 2 3 4 5 6 7 8 9 10 11 |
public static final void main(final String[] args) { final String name = "山田太郎"; if (validateName(name)) { System.out.println("10文字未満"); } else { System.out.println("10文字以上"); } } private static boolean validateName(final String name) { return name.length() < 10; } |
1点目はメソッド名がvalidateNameになっている点です。実際は長さをチェックしています。そのためメソッド名は処理に合わせてvalidateMaxLengthをつけると、直感的に名前から処理がわかるようになります。
2点目はメソッドの引数名が特定の処理に依存している点です。任意の文字列の長さをチェックするため、汎用的な名前をつけることで簡潔になります。
1 2 3 4 5 6 7 8 9 10 11 |
public static final void main(final String[] args) { final String name = "山田太郎"; if (validateMaxLength(name)) { System.out.println("10文字未満"); } else { System.out.println("10文字以上"); } } private static boolean validateMaxLength(final String value) { return value.length() < 10; } |
最後に
実装が終わったら単体試験や結合試験を実施し、見つけた不具合の修正をすることになります。そのときに読みやすいコードだと調査時間や修正のしやすさが格段に違ってくると思います。
人によって読みやすいコードが違うため、読みやすいのか読みにくいのか判断が難しいこともあると思います。そんなときは他の方と意見交換をしてみてください。意見交換することで全く違うコードを思いつくこともあります。色んな意見を参考にして落とし所を探してみてください。