随所にあるまとめ記事
中でも簡潔にまとまった良記事があります。
Java言語の命名指針
https://qiita.com/rkonno/items/1b30daf83854fecbb814
私はここに書かれていることには賛成で、そうあるべきだと思います。ただ、いい名前が思い浮かばなかったら、どうしたらいいでしょうか?
基本ルール
プロジェクトでのコーディング規約に従うのは前提として、以下が望ましいと思います。
- 名詞、もしくは名詞句
- 動詞や動詞句はメソッドに使う
- 省略しない
- 読みやすく、誤解がないようにする
- プロジェクト内で確実に通じる略語はOK
- スペルミスに気をつける
- 有名どころで言うと→ REGIST という英語は無い
具体例
FileOutputStream
たとえば、何らかの処理結果を出力するために使用する FileOutputStream
を格納する変数の名前を考えてみます。
-
fos
--- フォス……?? なんだかサッパリわかりません。(懺悔すると大昔私はこれを使っていました) -
fileOutputStream
--- 型はわかりますが。長さの割に情報量としては少ないと思います。 -
output
--- 間違いではありませんが、漠然としています。
とここまでで。賢明なる読者の方はお気づきになったと思いますが、 型を変数名に入れるというのはあまり意味がない のです。最近はIDEで変数の型が何であるかはすぐわかりますし、私のようにIDEを使わない人でも、 宣言場所が簡単に見通せるほどシンプルなクラスやメソッド にしていれば問題ありません。メソッドの引数は当然ながら APIドキュメント に説明があるので型の名前を引数の名前に入れることは不要です。
ではどういう名前がよりよい名前でしょうか。上記記事にもありますが、 名前を見るとデータの中身が想像できる 名称がよいと考えます。私なりに言い換えると、 それが何者かを表す名前をつける のです。
たとえば、
-
resultCsv
--- ああ、結果が記録されたCSVファイルなんだな -
saleInThisYear
--- ああ、今年の売上なんだな -
commandOutput
--- ああ、コマンド実行結果なんだな
のような感じです。
XxxxService
-
XxxxController
に1対1で対応するXxxxService
であれば、単にservice
としても差し支えないでしょう。
public class XxxxController {
/**
* Xxxxの実務を担うサービス。
* コンストラクタインジェクションで代入する実装方針なのでここで {@code @Autowired} はつけない。
*/
private final XxxxService service;
いい名前をつけた自慢が聞きたい
どういうクラスのどういうフィールド、どういうメソッドのどういうローカル変数に、こんないい名前をつけた(あるいはついていてすごいと思った)ものをコメントで紹介していただけると嬉しいです。