今後に向けて、ある程度統一しといたほうが身のためかと思い、C#のコーディング規約について勉強している。その中で、いろいろな規約が提案されているわけだけど、C#で書くなら、Microsoftさんの言いなりになろうかと思ってるわけだ。
近くに転がってたC#コーディング規約について言及した本を拾い読みしてみるものの、どうもしっくりこない。というより、.NETの標準に従ってないところが多かった。例えば、定数は全部大文字で、単語はアンダーバー(_)で区切るなど。
転がってた本(=本)
コーディングし疲れて深夜に帰る直前に偶然見つけた書。どうやら出版社が倒産して、絶版になっているらしい。全頁がカラーで大変読みやすいし、内容もわかりやすい構成だが、準拠している規約が公式ガイドラインじゃないので、今回の場合だと参考にならない面もある。
クラス ライブラリ開発者向けのデザイン ガイドライン(=公式ガイドライン)
公式に従うのが一番ベストな選択だろうと思い、ここを指針としている。ところが、不親切なところや、整備されてない所なども多く、非常に読みづらく、理解しづらい。
方針としては、原則Microsoftさんに従いながら、一部本を参考にするっていう形にした。これを元に資料作って、身内でコーディングルールとして統一できたら、いろいろと素敵だなと思う。
その勉強している中で、どうしても腑に落ちない部分があったのが、やっと解決したから記しておく。
private methodはCamel方式に従う
これを知らなかった。……というより、公式ガイドラインに明記していない。
これを知らないことで、以下のことに疑問を持っていた。
- privateフィールド変数はCamel方式に従うため、VisualStudioでGUIを作る時のボタン名はsampleButtonとした
- sampleButtonのClickイベントを追加すると、自動で「private void sampleButton_Click(object sender, EventArgs e)」という空のメソッドが生成される
- メソッドはPascal方式に従うという原則に反する
公式ガイドラインからは、メソッドはすべてPascal方式に従うという風に読めてしまう。だから以上のような誤解をしてたわけだ。同じような疑問を持っている人も、きっと少なくないに違いない。
Camel方式
private int sampleCount; private void sampleMethod();
先頭の単語が小文字で、後に続く単語は、頭を大文字にして連結する。
- アンダースコア(_)は使用しない
- 先頭を大文字にしない
- 先頭以外の単語は頭を大文字にする
- privateなフィールドやメソッドは基本、これに従う
Pascal方式
public static string SampleFilename = "sample.txt"; public void SampleMethod();
すべての単語は頭を大文字にし、それぞれ連結する。
- アンダースコア(_)は使用しない
- すべての単語の頭は大文字
- publicなフィールド(静的なもの)やメソッドは基本、これに従う
ここで、外部に提供したいpublicなフィールドはどうするのか。これには、プロパティという機構が用意されている。
int sampleCount; public int SampleCount{ get { return this.sampleCount; } set { if (value < 0) { throw new ArgumentOutOfRangeException("許容外の数値が渡されました。"); } this.sampleCount = value; } }
ピンバック: C#コーディング規約の個人的なまとめ – jikkenjo.net