┏弟3号━━━━━━━━━━━━━━━━━━━━━━━━━━┓ ┃         .NETプログラミング研究         ┃ ┗━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┛ 〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜メニュー ■注意事項 ■ピンポイントリンク ・.NETの命名規則 〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜 ─────────────────────────────── ■注意事項 ─────────────────────────────── 一行の文字数に制限があるため、長いURLには途中に改行が入っている ことがあります。実際には改行は入りませんのでご注意ください。 ─────────────────────────────── ■ピンポイントリンク ─────────────────────────────── ●.NETの命名規則 「変数などの識別子にどのような名前をつけるか」という問題は、入 門書等にあまり載ってないにもかかわらず、コーディングでは避けて は通ることのできない問題です。どのような名前をつけるべきかとい う「命名規則」を会社から指定されているなどといった場合以外は、 それは最低限のルールさえ守れば個人の自由のはずであり、どのよう な名前をつけようが作成するアプリケーションの動作に直接影響を与 えるものではないのでどうでもいいという考え方もあるでしょう。し かし一般的な命名規則があるのならそれを覚えておけば、他の人が見 たときに分かりやすいコードを書くことができますし、また見やすい コードは自分自身のためにもなります。 .NETの命名規則に関してヘルプでは「クラスライブラリ開発者向けの デザインガイドライン」内の「名前付けのガイドライン」の項目に詳 しく書かれています。 ・名前付けのガイドライン http://www.microsoft.com/japan/msdn/library/ja/cpgenref/html /cpconnamingguidelines.asp ms-help://MS.VSCC/MS.MSDNVS.1041/cpgenref/html /cpconnamingguidelines.htm さらに、「コーディング技法」や「Visual Basic の名前付け規則」の ページも参考になります。 ・コーディング技法 http://www.microsoft.com/japan/msdn/library/ja/vsent7/html /vxconcodingtechniques.asp ms-help://MS.VSCC/MS.MSDNVS.1041/vsent7/html /vxconcodingtechniques.htm ・Visual Basic の名前付け規則 http://www.microsoft.com/japan/msdn/library/ja/vbcn7/html /vaconVBNamingRules.asp ms-help://MS.VSCC/MS.MSDNVS.1041/vbcn7/html/vaconVBNamingRules. htm またオフィシャルではありませんが、中西庸文さんが「VB.NET コーデ ィング標準」を、河端善博さんが「C#コーディング標準」を公開され ています。両者は平鍋健児さんの「Javaコーディング標準(オブジェク ト倶楽部バージョン)」を参考にして作られたものとのことですが、前 に紹介したヘルプの内容をまとめ且つ補充されたような内容になって おり、かなり参考になります。「eXtreme Programming FAQ」(http: //objectclub.esm.co.jp/eXtremeProgramming/)から入手できます。 ・VB.NET コーディング標準 http://objectclub.esm.co.jp/eXtremeProgramming/CodingStdVB.pdf ・C#コーディング標準 http://www.kawabata.com/dotnet/CodingStdCS.pdf これらをすべて読んでいただければ.NETの命名規則について分かって いただけると思いますが、それはかなり苦痛かもしれません(個人的 には命令口調のところに抵抗があります)。そこで結局のところこれ らが何を言っているのか、私なりにこれ以上はないという程簡単にま とめさせていただきます。 まず大雑把に言って、クラス、メソッド、プロパティ、フィールド等 の要素には、「単語で構成された、誰でも分かるような名前をつける」 ということが基本となります。 さらに、Public以外の変数(パラメータを含む)にはCamel形式(識別 子の最初の文字は小文字にし、後に続いて連結されている各単語の最 初の文字を大文字にした形式。例:backColor)、それ以外はすべて Pascal形式(識別子の最初の文字と、後に続いて連結されている各単 語の最初の文字を大文字にした形式。例:BackColor)と覚えておけば とりあえずは大丈夫でしょう。 さて、ここまで読んで.NETの命名規則に釈然としないものを感じてい る方も多いのではないかと思います。Windowsプログラミングではおな じみの、プリフィックス(接頭語、プレフィックス)を使った命名規 則はどこへ行ったのでしょうか? 例えばVisual Basicでは今まで変数名にプリフィックスを付ける方法 が推奨されていました。Integer型には"int"、String型には"str"、テ キストボックスコントロールには"txt"、フォームには"frm"を名前の 頭につける、さらにはモジュールレベル変数には"m"も付ける、という 具合です。 ・Visual Basic Coding Conventions http://msdn.microsoft.com/library/en-us/vbcon98/html /vbconcodingconventionsoverview.asp このように識別子にプリフィックスを付ける方法は「ハンガリアン記 法」(または「ハンガリアン命名規約」、「ハンガリアン表記法」、 「ハンガリー型表記法」など)と呼ばれています。(これは Microsoftの技術者Charles Simonyi氏が考えた方法であり、この命名 法で付けられた変数名が英語らしくなく、彼がハンガリー人だったこ とからこのように呼ばれています)。この方法はVBだけでなく、 Microsoftがさまざまな場面で長年使ってきた方法であり、特に Windowsプログラマーには広く広まっています。(ここでは拡張された ハンガリアン記法も含めてハンガリアン記法とさせていただきます。) ・Hungarian Notation http://msdn.microsoft.com/library/en-us/dnvsgen/html /HungaNotat.asp ところが.NETでは一転してこのハンガリアン記法は使うべきではない とされています(ヘルプでは唯一「静的フィールド名には、ハンガリー 表記法を使用したプリフィックスを付けます。」と書いてありますが)。 この突然の方針転換は多くの反響を呼び、方々でハンガリアン記法肯 定派と否定派が活発に(時には感情的とも思えるほど)議論を戦わせ ているようです。例えばMicrosoftのC#のニュースグループにはこのこ とに関する実に多くの意見が書き込まれています。 ・Google Search: Hungarian Notation group:microsoft.public. dotnet.languages.csharp http://groups.google.com/groups?hl=en&lr=&ie=UTF-8&oe=UTF-8&q =Hungarian+Notation&btnG=Google+Search&meta=group%3Dmicrosoft. public.dotnet.languages.csharp いろいろな意見があるようですが、始めに述べたように、最終的にど んな命名規則でコーディングをするか、その決定権は私たち一人一人 にあります。Microsoftが嫌いという感情的な理由だけでハンガリアン 記法を否定しても、またはその逆でも、結局はMicrosoftに振り回され ているという事実には変わりありません。これらの命名規則の特徴を 的確に捉え、気に入ったものを選択して使用するというのが賢いやり かたではないでしょうか。 最後に余談となりますが、ヘルプの「クラスライブラリ開発者向けの デザインガイドライン」は読めば読むほど疑問が増えていきます。 前に「ヘルプでは唯一「静的フィールド名には、ハンガリー表記法を 使用したプリフィックスを付けます。」と書いてあります」と書きま したが、ヘルプの「クラスメンバの使用方法のガイドライン」内の「フ ィールドの使用方法のガイドライン」では「フィールド名または静的 フィールド名にプリフィックスは適用しません。」と明記されており、 両者は矛盾しています。もしプリフィックスを付けるということであ ればどのようなプリフィックスを付けるのか当然明記すべきですので、 前者の「静的フィールド名には、ハンガリー表記法を使用したプリフ ィックスを付けます。」という記述は間違いなのではないかと推測で きます。 ・フィールドの使用方法のガイドライン http://www.microsoft.com/japan/msdn/library/ja/cpgenref/html /cpconfieldusageguidelines.asp さらに、「プライベートなフィールドにアクセスするためのプロパテ ィにはどのような名前をつけるべきなのか?」と思って調べてみたと ころ、いくつかの不可解なサンプルコードを見つけました。まず「フ ィールドの使用方法のガイドライン」には次のようなコードがありま す。 [Visual Basic] Public Class Control Inherits Component Private handle As Integer Protected ReadOnly Property Handle() As Integer Get Return handle End Get End Property End Class また「プロパティの使用方法のガイドライン」には次のようなコード があります(一部省略しています)。 [Visual Basic] Public Class TextBox Private dataSource As String Private dataField As String Private active As Boolean Public Property DataSource() As String Get Return dataSource End Get Set '(省略) End Set End Property Public Property DataField() As String Get Return dataField End Get Set '(省略) End Set End Property '(省略) End Class 上記の例には先頭の文字が小文字か大文字かという違いだけのフィー ルド名とプロパティ名が宣言されています。これでは大文字と小文字 を区別しないVBではエラーが発生すると思うのですが、どうなのでし ょうか?C#ではエラーは発生しないでしょうが、ヘルプの「大文字と 小文字の区別」には「大文字と小文字を区別する必要がある名前を使 用することは避けてください。」とあります。果たしてこれらのコー ドは適切な例となりえているのでしょうか? ・フィールドの使用方法のガイドライン http://www.microsoft.com/japan/msdn/library/ja/cpgenref/html /cpconfieldusageguidelines.asp ・プロパティの使用方法のガイドライン http://www.microsoft.com/japan/msdn/library/ja/cpgenref/html /cpconpropertyusageguidelines.asp ・大文字と小文字の区別 http://www.microsoft.com/japan/msdn/library/ja/cpgenref/html /cpconcasesensitivity.asp 結局のところ「プライベートなフィールドにアクセスするためのプロ パティにはどのような名前をつけるべきか?」という疑問にははっき りとした答えがまだないようです。ヘルプの「フィールドの使用方法 のガイドライン」にはプロパティ名を小文字にして後ろに"Value"を付 けてフィールド名にする例がありますが、一般的は方法ではないよう です。むしろ"m_"といったプリフィックスを付けてフィールド名にす るといった人のほうが圧倒的に多いようです。この問題が解決されな い限り、ハンガリアン記法は不滅かもしれません。 =============================== ■このマガジンの購読、購読中止、バックナンバー、説明に関しては  次のページをご覧ください。  http://www.mag2.com/m/0000104516.htm ■発行人・編集人:どぼん!  http://dobon.net  dobon@bigfoot.com ■ご質問等はメールではなく、掲示板へお願いいたします。  http://dobon.net/bbs ■上記メールアドレスへのメールは確実に読まれる保障はありません  (スパム、ウィルス対策です)。メールは下記URLのフォームメール  から送信してください。  http://dobon.net/mail.html Copyright (c) 2003 DOBON! All rights reserved. ===============================