以下のガイドラインは、サンプルおよびドキュメントの開発で 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 つ挿入します。
' Here is a comment.
アスタリスク (*) を整形したブロックでコメントを囲まないようにします。
Main メソッドを使用するときには、新しいコンソール アプリケーションの既定の構造を使用し、コマンド ライン引数には My を使用します。
Sub Main() For Each argument As String In My.Application.CommandLineArgs ' Add code here to use the string variable. Next End Sub
文字列の連結には & を使用します。
MsgBox("hello" & vbCrLf & "goodbye")
ループ内での文字列の追加には StringBuilder オブジェクトを使用します。
Dim longString As New System.Text.StringBuilder For count As Integer = 1 To 1000 longString.Append(count) Next
メモリに余裕がない場合を除いては、unsigned 型ではなく Integer を使用します。
宣言行で配列を初期化するときには、次のような短い構文を使用します。
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(2) As String letters(0) = "a" letters(1) = "b" letters(2) = "c"
1 つのオブジェクトに対する呼び出しが続く場合には、With キーワードの使用を検討します。
例 :
For count As Integer = 0 To 2 MsgBox(names(count)) Next
For Each name As String In names MsgBox(name) Next
Dispose メソッドを実装するオブジェクトでは、常に Try...Catch を使用します。
On Error Goto は使用しないようにします。
Try...Catch ステートメントを使用する場合で、Finally ブロックのコードが Dispose の呼び出しのみのときには、Using を代わりに使用します。
Not ... Is Nothing よりは IsNot キーワードを使用します。
My.Forms.Form1.ShowDialog ではなく Form1.ShowDialog を使用します。
短い形式のインスタンス化を使用します。
Dim employees As New Collection()
Dim employees As Collection = New Collection()
パラメータなしのコンストラクタを使用してから、With を使用してプロパティを設定します。
Dim orderLog As New EventLog() With orderLog .Log = "Application" .Source = "Application Name" .MachineName = "Machine Name" End With
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 メンバの呼び出しにはクラス名を使用し、インスタンス変数からは行わないようにします。
MessageBox.Show または Console.WriteLine の代わりに MsgBox を使用します。
.NET Framework クラス ライブラリや Visual Basic ランタイム ライブラリよりも My の機能を使用します。
.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
「安全なコーディングのガイドライン」のガイドラインに従います。
> Dispose メソッドを実装するオブジェクトでは、常に Try...Catch を使用します。
DisposeとなるとTry...Finallyではないかと思います。http://blogs.wankuma.com/jeanne/archive/2007/03/22/68326.aspx