私にとって、何かの良い名前を見つけることは、常にその存在を正当化する必要があるオブジェクトと考えることに戻ります。自問してみてください:
- クラス/メソッド/変数は何をしますか、すなわち、そのより広い目的は何で、何のためですか?
- その目的について具体的に何を伝える必要がありますか。つまり、名前がその中に持つ必要がある重要な部分は何ですか?
ほとんどの開発者は、ネーミングに関しては可読性が常に最重要であることを認めるでしょう。コードを書いている間に意味を理解するためだけにコードを書くのではなく、将来のある時点で初めてコードを見る人があまり考えずにあなたの意図を理解できるようにそれを書いてください。コードは1回だけ記述しますが、その存続期間中に何度も編集し、さらに読む必要があります。
コードは自己文書化する必要があります、つまり、あなたの命名は何かが何をするかを明らかにするべきです。コメントでコードの行が何をするかを説明する必要があり、名前を変更しても十分に改善されない場合は、適切な説明的な名前で新しい行にリファクタリングすることを真剣に検討する必要があります。新しいメソッド呼び出しは、何が起こっているかを説明します。長い名前を持つことを恐れないでください。もちろん、クラス/メソッド/変数名で小説を書くべきではありませんが、短すぎるよりも長すぎて説明的な名前を持ちたいので、フードの下を見て、それが何をするのかを理解する必要があります。x / y座標や一般的に使用される頭字語などの明らかな例外を除き、単一文字の名前と略語は避けてください。「backButton」の代わりに「bkBtn」を呼び出す
あなたの言語が許す限り、コードを英語の文章のように読んでください。オブジェクトは名詞を使用し、メソッドは動詞を使用します。通常、ブールメソッドは「is」で始まりますが、「can」、「should」、「does」など、ユースケースに応じて意味をさらに伝える多くのオプションがあります。もちろん、すべての言語がSmalltalkほど優れているわけではありませんが、一部の記号は一般的に文の一部であると理解されています。個人的に可能な限り他の言語に取り入れたい2つのSmalltalk規約は、ループパラメーターの名前の前に「each」を、メソッドパラメーターの前に記事「a」(またはコレクションの「an」または「some」)を付けることです。 。これはJavaの一般的な標準ではない可能性があり、誰でもこのビットを無視してかまいませんが、しかし、これによりコードの可読性が大幅に向上することがわかります。たとえば(Javaの例):
public boolean shouldConsiderAbbreviating(List<String> someNames) {
for (String eachName : someNames) {
if (isTooLong(eachName)) {
return true;
}
}
return false;
}
これは、Javaの知識が少しでもある人には、次のように読めるはずです。
いくつかの名前(文字列)のリストを短縮することを検討する必要があるかどうかを判断するには、いくつかの名前を反復処理し、名前ごとに長すぎるかどうかを判断します。もしそうなら、リターンtrue
; 長すぎるものがない場合は、を返しfalse
ます。
特により複雑なメソッドでは、引数strings
とループ変数の名前だけで上記のコードと比較してくださいstring
。名前を一目見ただけで使用法が明らかになるのではなく、違いを注意深く見る必要があります。