C#の命名規約について

今後に向けて、ある程度統一しといたほうが身のためかと思い、C#のコーディング規約について勉強している。その中で、いろいろな規約が提案されているわけだけど、C#で書くなら、Microsoftさんの言いなりになろうかと思ってるわけだ。

近くに転がってたC#コーディング規約について言及した本を拾い読みしてみるものの、どうもしっくりこない。というより、.NETの標準に従ってないところが多かった。例えば、定数は全部大文字で、単語はアンダーバー(_)で区切るなど。

転がってた本(=本)
コーディングし疲れて深夜に帰る直前に偶然見つけた書。どうやら出版社が倒産して、絶版になっているらしい。全頁がカラーで大変読みやすいし、内容もわかりやすい構成だが、準拠している規約が公式ガイドラインじゃないので、今回の場合だと参考にならない面もある。

クラス ライブラリ開発者向けのデザイン ガイドライン(=公式ガイドライン)
公式に従うのが一番ベストな選択だろうと思い、ここを指針としている。ところが、不親切なところや、整備されてない所なども多く、非常に読みづらく、理解しづらい。

方針としては、原則Microsoftさんに従いながら、一部本を参考にするっていう形にした。これを元に資料作って、身内でコーディングルールとして統一できたら、いろいろと素敵だなと思う。

その勉強している中で、どうしても腑に落ちない部分があったのが、やっと解決したから記しておく。

private methodはCamel方式に従う

これを知らなかった。……というより、公式ガイドラインに明記していない。

これを知らないことで、以下のことに疑問を持っていた。

  1. privateフィールド変数はCamel方式に従うため、VisualStudioでGUIを作る時のボタン名はsampleButtonとした
  2. sampleButtonのClickイベントを追加すると、自動で「private void sampleButton_Click(object sender, EventArgs e)」という空のメソッドが生成される
  3. メソッドはPascal方式に従うという原則に反する

公式ガイドラインからは、メソッドはすべてPascal方式に従うという風に読めてしまう。だから以上のような誤解をしてたわけだ。同じような疑問を持っている人も、きっと少なくないに違いない。

Camel方式

private int sampleCount;
private void sampleMethod();

先頭の単語が小文字で、後に続く単語は、頭を大文字にして連結する。

  1. アンダースコア(_)は使用しない
  2. 先頭を大文字にしない
  3. 先頭以外の単語は頭を大文字にする
  4. privateなフィールドやメソッドは基本、これに従う

Pascal方式

public static string SampleFilename = "sample.txt";
public void SampleMethod();

すべての単語は頭を大文字にし、それぞれ連結する。

  1. アンダースコア(_)は使用しない
  2. すべての単語の頭は大文字
  3. publicなフィールド(静的なもの)やメソッドは基本、これに従う

ここで、外部に提供したいpublicなフィールドはどうするのか。これには、プロパティという機構が用意されている。

int sampleCount;
public int SampleCount{
	get
	{
		return this.sampleCount;
	}
	set
	{
		if (value < 0)
		{
			throw new ArgumentOutOfRangeException("許容外の数値が渡されました。");
		}
		this.sampleCount = value;
	}
}

参考ページ

C#の命名規約について」への1件のフィードバック

  1. ピンバック: C#コーディング規約の個人的なまとめ – jikkenjo.net

コメントを残す

メールアドレスが公開されることはありません。