C#の命名規則

C#でプログラムを作ってみるにあたり、変数とかの名前の付け方ががあるのかどうか調べてみました。今までほとんどBASICだったこともありハンガリアン記法が多かったんですが、最近はあまり使われないようですので。

記法

記法はいくつかあります。

ハンガリアン記法
型を表す接頭辞を付ける方法です。例えば、文字列型のNameという変数であればstrNameという感じです。
Pascal形式
各単語の頭文字を大文字にして、単語をつなげて表記する形式です。例えば、NameCardという感じです。
Camel形式
最初の単語の頭文字は小文字、その後につなげる単語の頭文字を大文字にする形式です。例えば、nameCardStockerという感じです。
Snake形式
単語をつなげるときにアンダーバーを使う方法です。例えば、name_card_stockerという感じです。

どの形式を使うのか

C#については、マイクロソフトから名前に関するガイドラインというものが出されています。このサイトによれば、

複数の単語で構成されるパブリック メンバー、型、および名前空間の名前には、常に Pascal 形式を使用してください。
パラメーター名には Camel 形式を使用してください。

となっていますので、パラメータはCamel形式、それ以外は全部Pascal形式と考えれば良いようです。

省略形はどうするか

HTML (Hyper Text Markup Language)のような、各単語の頭文字をとって省略形にした単語は一般的には全て大文字で表しますが、ガイドラインではちょっと違います。

Camel 形式の識別子の先頭の単語を除き、2 文字から成る頭字語の文字は共に大文字にしてください。
Camel 形式の識別子の先頭の単語を除き、3 文字以上の文字から成る頭字語では、先頭の文字のみを大文字にしてください。
Camel 形式では、識別子の先頭にある頭字語の文字は、その文字数とは関係なく、一切大文字にはしないでください。

つまり、下表のようになります。

Pascal形式 Camel形式
IOChannel ioChannel 最初の単語が2文字の場合
XmlWriter xmlWriter 最初の単語が3文字以上の場合

複合語はどうするか

複合語の場合は、一つの単語とみなすようです。例えばハッシュテーブルは、Pascal形式ではHashtableです。複合語かどうかは辞書を引けとのこと。

名前に使う単語の選び方

名前の長さを短くするよりも、わかりやすい名前にすることを優先します。これは慣れるしかないのかもしれません。例えば、名前にコントロール名を含める場合でも、コントロール名を省略しないようにします。OnBtnClickではなくてOnButtonClickにします。

名前空間の名付け

名前空間の名付けについては、企業名、製品名、技術名をドットでつなげるようにします。例えば、Microsoft.WindowsMobile.DirexcXです。ガイドラインに下記のように書いてあります。

名前空間名には、プリフィックスとして企業名を付け、各企業の名前空間の名前とプリフィックスが重複しないようにしてください。
名前空間の第 2 レベルには、バージョンに依存しない、安定した製品名を使用してください。
企業内のグループ名は変更されることが多いため、名前空間の階層構造での命名基準として組織の階層構造を使用することは避けてください。
Microsoft.Office.PowerPoint のように Pascal 形式を使用し、名前空間の構成要素をピリオドで区切ってください。 ブランド名で通常とは異なる形で大文字と小文字を混在させている場合は、ブランド名の形式に従い、標準の名前空間の形式から外れてもかまいません。

わかりやすくするようにしつつ、重複が起きないようにするという配慮なのですが、個人の場合は企業名どうしてるんでしょうか。

メソッドの名前

メソッド名には、動詞または動詞句を割り当ててください。

何をするものかをわかりやすくするために、動詞を付けるわけですね。

プロパティの名前

プロパティの名前には、名詞、名詞句、または形容詞を使用してください。
ブール型のプロパティの名前には、肯定的なフレーズ (CantSeek ではなく CanSeek など) を使用してください。 ブール型のプロパティには、Is、Can、Has などのプリフィックスを付けることもできますが、これは有益な場合に限定してください。

フィールドの名前

フィールド名には Pascal 形式を使用してください。
フィールドの名前には、名詞や名詞句を使用してください。
フィールド名にはプリフィックスを使用しないでください。 たとえば、静的フィールドと非静的フィールドを区別するために、g_ や s_ を使用しないでください。

パラメータの名前

パラメーター名には Camel 形式を使用します。
パラメーター名には説明的な名前を使用します。
パラメーターの型に基づいた名前ではなく、パラメーターの意味に基づいた名前を使用してください。

もう、名前を見ただけで何に使われるものかわかるようにしろということですね。

まとめ

簡単に言うと、「パラメータだけCamel形式、他は全部Pascal形式、短縮するよりわかりやすさを優先する」です。もうハンガリアン記法は使わないのですね。型と表記を分離するという思想であれば、定数についても全部大文字ではなくてPascal形式にするのが正しそうです。誰かと協業するわけでもなく個人のツール作成に使うものなので、どうでも良いといえばどうでも良いのですが、合わせていこうと思います。

スポンサーリンク

シェアする

  • このエントリーをはてなブックマークに追加

フォローする

スポンサーリンク