命名規則を知ろう
パスカル記法、キャメル記法などの命名規則がある。
7種類の要素に関するヒント
C# では、自分で名前を付けられるのは以下の7種類です
- 名前空間
- インターフェイス
- クラス
- メソッド
- 列挙型
- 引数 変数
つまり、命名に7種類のルールを用いれば、直感的にコードの要素を判別する事が出来ると言う事です。
実際のルールの用い方
以下は自分なりの命名規則です。
また、単語をつなげる毎に頭文字を大文字にします。
クラス
ソースコードに役割をもたせたまとまりがクラスです。
つまり、名詞の名前を付ければクラス名だと直感的に判別できます。
ちなみに変数も名詞になりますが、クラス名は最初の文字を大文字にすることで変数と差別化を図ることができます。
クラス名を Pascal 形式で記述するのは、「実践で役立つ C# プログラミングのイディオム/定石&パターン」で推奨されています。
他にも上記本では命名規則について色々と書かれていますので、一読をお勧めします。
メソッド
ソースコードの処理に意味をもたせたまとまりがメソッドになります。
つまり、動詞の名前を付ければメソッド名だと直感的に判別できます。
これも上記した本で推奨されています。
引数
引数かフィールド、ローカル変数のどれかを知りたい事があります。
ちなみに、this.フィールド変数名 はフィールドの変数を指すのですが、ちゃんとした指導者がいなかったり、ある程度技術書を読んだりしていない人は「フィールドってなんだっけ?」となります。すると結局分かりにくくなってしまいます。
ですので、引数に apply を付けた変数名を付けると言う手があります
変数
最近ではローカル変数やフィールドの頭文字を小文字にするようです。
(Camel記法、これも同上)
クラス名やメソッド名の頭文字を大文字にするため、それだけで直感的に分かるからです。
メンバ変数とローカル変数では役割が違い、名前自体を差別化できることも多いです。
インターフェイス
自分流のハンガリアン記法の衝突を避けるためインターフェイスの頭文字に "i" を使ったり、通常使われる大文字の "I" を使ったりもしています。
名前空間
最後に名前空間です。名前空間は、自分は少し英語が苦手な感もあって、良く分かっていないのですが、最後に s を付けたりしています。また、抽象的な短い名詞が自分は多いです。
厳密には s がいらない単語もあると思われます。
列挙型
自分は名前の頭に e を付けたりしています。但し、これもハンガリアン記法に通じる部分があります。
実際にソースコードで見てみる
namespace Impressions // まとまりなので、s を付ける
{
public enum eAuthor // 列挙型の頭文字に小文字の e を付ける。
{
jito,
Anyone
}
public class NamingRuleReporter // クラス名は頭文字が大文字の名詞
: iReporter
{
// 2番目以降の単語の頭文字も大文字にする。
public eAuthor reporterName { get; private set };
// 引数とフィールドが同じになってしまう時には引数に apply を付ける。
public NamingRuleReporter(eAuthor applyReporterName)
{
reporterName = applyReporterName;
}
public void Report() // メソッド名は頭文字が大文字の動詞
{
string reportMessage = "の命名規則の例の紹介"; // 変数は頭文字が小文字
Console.Write(reporterName.ToString() + reportMessage);
}
}
public interface iReporter // インターフェイスの名前も名詞で頭文字に i を付ける。
{
void Report();
}
}
最後に
全てのコードで厳格にこれを守っている訳ではありませんがここに紹介した一例で、もしこれは使えそうだ、と思った物があれば、趣味や勉強の際に試して貰えればと思います。
他にも readonly に r を付けたり、const に c を付けたりと言う事もしていますが…
自分のやり方では r, cなどがハンガリアン記法の名残で残ってしまうのが悔やまれます。
追記、引数には 'apply' を付けるとハンガリアン記法にならずにフィールドと引数の区別が出来、若干スマート?になる事を発見しました。
但し、忌避されていてもインターフェイスの I のハンガリアン記法だけはトッププロでも使っています。
もしかしたら後述する editorconfig を使うことでこれも自動化出来るかも知れません。
分かりやすさ、読みやすさが大事だと思っています。
変数やメソッド、クラス名などに接頭字を付けて可読性を増す記法をハンガリアン記法と言い、自分以外には読みづらい記法であることを理解した上でご利用下さい。
自分は過度なハンガリアン記法でなければ、一歩目にハンガリアン記法などを使っても段階を踏んで自分なりに少しずつ分かりやすいコードを目指す事も悪いことではないと思っています。
また、フィールドに"_"を付ける方もいらっしゃると思います。
juner さんが指摘して下さった通り、editorconfig を利用すれば、VisualStudio では自動で変数の先頭に付ける事が出来るそうです。
自動化出来るのであれば大文字と小文字で区別するよりその方が効果的かも知れません。
命名規則と言うちょっと面白味に欠けるテーマかも知れませんが、命名に時間を掛けると可読性が上がると自分は思っているので、もし良かったらこれを読んでる方で考えた事が無かった方は一度考えてみると今後のプログラミングライフが少し快適になるかも知れません。
命名規則については以下の参考文献で勉強しました。
[実践で役立つ C# プログラミングのイディオム/定石&パターン(著:出井秀行)]
[リーダブルコード(著:Dutin Boswell/ Trevor Foucher)(訳:角 征典)]