以下のガイドラインは、サンプルおよびドキュメントの開発で Microsoft が使用しているものです。Visual Basic 言語仕様では、コーディング規則は定義されていません。
-
コーディング規則があると、コードの見た目が統一されるため、コードを読むときにレイアウトではなく内容に専念できます。
-
規則がある方が、コードをすばやく理解できます。以前の経験に基づいて予測がつくようになるからです。
-
規則がある方が、コードのコピー、変更、およびメンテナンスが簡単になります。
-
規則を見ると、Visual Basic の "ベスト プラクティス" がわかります。
説明
名前付け規則
-
名前付けのガイドラインについては、「クラス ライブラリ開発のデザイン ガイドライン」を参照してください。
-
Visual Studio デザイナ ツールで作成されるオブジェクトの名前は、ガイドラインに則るように変更する必要はありません。
-
Imports ステートメントを追加するのではなく、名前空間修飾を使用します。名前空間が既定でプロジェクトにインポートされた場合、コードを完全修飾する必要はありません。コピーおよび貼り付けされたときに、IntelliSense により修飾なしで実行されるからです。長い行のコードを改行して読みやすくするときには、修飾名は "." の後で改行できます。以下に例を示します。
Dim collection As System.Diagnostics. _
InstanceDataCollectionCollection
-
"My" または "my" を変数名の一部として使用しないようにします。My オブジェクトとの混同を招くからです。
レイアウト規則
コードの構造を強調する書式が使用され、コードが読みやすくなっているのが、優れたレイアウトです。
-
再フォーマット機能を使用して、既定の設定 (スマート インデント、4 文字インデント、タブを空白として保存) でコードを書式設定します。詳細については、「[VB 固有] ([オプション] ダイアログ ボックス - [テキスト エディタ] - [Basic])」を参照してください。
-
1 つの行には 1 つのステートメントのみを記述します。":" は使用しないようにします。
-
1 つの行には 1 つの宣言のみを記述します。
-
継続行はタブ 1 つ分インデントします。
-
メソッド定義とプロパティ定義の間に少なくとも 1 行の空白行を追加します。
コメント規則
-
コード行の末尾にコメントを記述しないようにします。コメントは別個の行に記述します。
-
英語でコメントを記述する場合、コメント テキストの始まりは英大文字を使用します。
-
コメント テキストの終わりは句点で終了します。
-
コメント デリミタ (') とコメント テキストの間に空白を 1 つ挿入します。
-
アスタリスク (*) を整形したブロックでコメントを囲まないようにします。
プログラムの構造
言語ガイドライン
文字列型 (String)
Unsigned データ型
配列
-
宣言行で配列を初期化するときには、次のような短い構文を使用します。
Dim letters() As String = {"a", "b", "c"}
次のような記述は避けます。
Dim letters() As String = New String() {"a", "b", "c"}
-
配列指定子は、次のように、型ではなく変数に指定します。
Dim letters() As String = {"a", "b", "c"}
次のような記述は避けます。
Dim letters As String() = {"a", "b", "c"}
-
基本データ型の配列の宣言と初期化では、次のような { } 構文を使用します。
Dim letters() As String = {"a", "b", "c"}
次のような記述は避けます。
Dim letters(2) As String
letters(0) = "a"
letters(1) = "b"
letters(2) = "c"
With キーワードの使用
1 つのオブジェクトに対する呼び出しが続く場合には、With キーワードの使用を検討します。
ループ変数は For または For Each ステートメント内で宣言
-
例 :
For count As Integer = 0 To 2
MsgBox(names(count))
Next
-
例 :
For Each name As String In names
MsgBox(name)
Next
Try...Catch の使用
Using ステートメントの使用
Try...Catch ステートメントを使用する場合で、Finally ブロックのコードが Dispose の呼び出しのみのときには、Using を代わりに使用します。
IsNot キーワード
Not ... Is Nothing よりは IsNot キーワードを使用します。
フォームの既定のインスタンス
My.Forms.Form1.ShowDialog ではなく Form1.ShowDialog を使用します。
New キーワード
イベント処理
-
AddHandler ではなく Handles を使用します。
Private Sub MenuItem1_Click(ByVal sender As System.Object, _
ByVal e As System.EventArgs) Handles MenuItem1.Click
-
AddressOf を使用し、デリゲートの明示的なインスタンス化は避けます。
Dim closeItem As New MenuItem("Close", AddressOf MenuItem1_Click)
Me.MainMenu1.MenuItems.Add(closeItem)
-
イベントを定義するときには、短い構文を使用し、デリゲートの定義はコンパイラに任せます。
Public Event WhatHappened(ByVal source As Object, _
ByVal e As WhatHappenedEventArgs)
共有メンバの使用
Shared メンバの呼び出しにはクラス名を使用し、インスタンス変数からは行わないようにします。
MsgBox 関数
MessageBox.Show または Console.WriteLine の代わりに MsgBox を使用します。
My 名前空間の使用
.NET Framework クラス ライブラリや Visual Basic ランタイム ライブラリよりも My の機能を使用します。
Visual Basic ランタイム ライブラリのメンバの使用
.NET Framework クラス ライブラリよりも Visual Basic ランタイム ライブラリを使用します。
サンプルのガイドライン
全般
-
クラス ライブラリ開発者向けのデザイン ガイドライン (http://msdn.microsoft.com/library/ja/default.asp?url=/library/ja/cpgenref/html/cpconnetframeworkdesignguidelines.asp) のデザイン ガイドラインに従います。
-
MsgBox 呼び出しではプロンプトとタイトルを指定します。
-
必要に応じてリソース ファイルを使用します。
-
各ファイルまたはプロジェクト設定で Option Strict On を指定します。
-
コンパイルではすべての警告をオンにします。
-
Class、Structure、または Interface は、1 つのファイル内で 1 つのみ定義します。
-
ファイルの保存には既定のエンコーディングを使用します。
ローカリゼーション
-
可能な場合は AutoSize プロパティを使用します。
-
コントロールを非表示にしたり重ねたりしないようにします。
-
複数のコントロールを整列して 1 つの文を作成するのは避けます。
-
ある文字列からいくつかの文字を取り去ることによって別の文字列を組み立てるのは避けます。
-
カルチャに依存しないグラフィックスを使用します。
-
フォントは Tahoma または MS Sans Serif のみを使用します。
ユーザー補助
-
カラー ピッカー ダイアログ ボックスの [システム] タブにある色を使用します。
-
すべてのメニュー、ラベル、ボタンなどにおいて、アクセラレータを使用します。
-
コントロールのプロパティを、次の表に示すように設定します。
|
プロパティ
|
設定値
|
| AccessibleDescription | コントロールの説明。 |
| AccessibleName | コントロールの名前。 |
| AccessibleRole | 既定値。または、コントロールに別の役割を割り当てる場合は、このプロパティを変更します。 |
| TabIndex | 論理的な順序に設定します。 |
| Text | クリック可能なコントロールすべてに対し、キーボード アクセス キー (ショートカット) を設定します。 |
| Font size | 既定値、または 10 ポイント以上に設定します。 |
| Forecolor | 既定値 |
| Backcolor | 既定値 |
| BackgroundImage | 既定値 |
セキュリティ
参照