Microsoft では、このトピックのガイドラインに従ったサンプルとドキュメントを開発しています。 同じコーディング規則に従うと、次の利点が得られる場合があります。
コードの外観は一貫しているため、閲覧者はレイアウトではなくコンテンツに集中できます。
読者は、以前の経験に基づいて前提を立てることができるため、コードをより迅速に理解できます。
コードをより簡単にコピー、変更、保守できます。
コードが Visual Basic の "ベスト プラクティス" を確実に示すのに役立ちます。
命名規則
名前付けガイドラインの詳細については、「 名前付けガイドライン」トピックを 参照してください。
変数名の一部として "My" または "my" を使用しないでください。 この方法では、
My
オブジェクトとの混乱が生じます。自動生成されたコード内のオブジェクトの名前を変更して、ガイドラインに合わせる必要はありません。
レイアウト規則
タブをスペースとして挿入し、4 つのスペースインデントでスマートインデントを使用します。
コード エディターで コードを再フォーマットするには、コードのプリティ リスト (再フォーマット) を使用します。 詳細については、「オプション、 テキスト エディター、基本 (Visual Basic)」を参照してください。
1 行に 1 つのステートメントのみを使用します。 Visual Basic の行区切り文字 (
:
) は使用しないでください。明示的な行連結文字 "
_
" は使用しないでください。言語で許可されている場合は、暗黙的な行の継続を優先します。1 行に 1 つの宣言のみを使用します。
コードのプリティ リスト (再フォーマット) で継続行の書式が自動的に設定されない場合は、1 つのタブ位置で継続行を手動でインデントします。 ただし、リスト内の項目は常に左揃えにします。
a As Integer, b As Integer
メソッド定義とプロパティ定義の間に少なくとも 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
イベント ハンドラーでのリラックスしたデリゲート
引数 (Object
と EventArgs
) をイベント ハンドラーに明示的に修飾しないでください。 イベントに渡されるイベント引数 (たとえば、 sender As Object
、 e As EventArgs
) を使用していない場合は、リラックスしたデリゲートを使用し、コード内のイベント引数を省略します。
Public Sub Form1_Load() Handles Form1.Load
End Sub
符号なしデータ型
- 必要な場合を除き、符号なし型ではなく
Integer
を使用します。
配列
宣言行で配列を初期化するときは、短い構文を使用します。 たとえば、次の構文を使用します。
Dim letters1 As String() = {"a", "b", "c"}
次の構文は使用しないでください。
Dim letters2() As String = New String() {"a", "b", "c"}
変数ではなく、型に配列指定子を配置します。 たとえば、次の構文を使用します。
Dim letters4 As String() = {"a", "b", "c"}
次の構文は使用しないでください。
Dim letters3() As String = {"a", "b", "c"}
基本データ型の配列を宣言して初期化するときは、{ } 構文を使用します。 たとえば、次の構文を使用します。
Dim letters5 As String() = {"a", "b", "c"}
次の構文は使用しないでください。
Dim letters6(2) As String letters6(0) = "a" letters6(1) = "b" letters6(2) = "c"
With キーワードを使用する
1 つのオブジェクトに対して一連の呼び出しを行う場合は、 With
キーワードの使用を検討してください。
With orderLog
.Log = "Application"
.Source = "Application Name"
.MachineName = "Computer Name"
End With
Use the Try...例外処理を使用する場合のステートメントのキャッチと使用
On Error Goto
は使用しないでください。
IsNot キーワードを使用する
... IsNot Nothing
の代わりに Not ... Is Nothing
を使用します。
New キーワード
短いインスタンス化を使用します。 たとえば、次の構文を使用します。
Dim employees As New List(Of String)
前の行は次のようになります。
Dim employees2 As List(Of String) = New List(Of String)
パラメーターなしのコンストラクターの代わりに、新しいオブジェクトに対してオブジェクト初期化子を使用します。
Dim orderLog As New EventLog With { .Log = "Application", .Source = "Application Name", .MachineName = "Computer Name"}
イベント処理
AddHandler
ではなく、Handles
を使用します。Private Sub ToolStripMenuItem1_Click() Handles ToolStripMenuItem1.Click End Sub
AddressOf
を使用し、デリゲートを明示的にインスタンス化しないでください。Dim closeItem As New ToolStripMenuItem( "Close", Nothing, AddressOf ToolStripMenuItem1_Click) Me.MainMenuStrip.Items.Add(closeItem)
イベントを定義するときは、短い構文を使用し、コンパイラでデリゲートを定義します。
Public Event SampleEvent As EventHandler(Of SampleEventArgs) ' or Public Event SampleEvent(ByVal source As Object, ByVal e As SampleEventArgs)
RaiseEvent
メソッドを呼び出す前に、イベントがNothing
(null) かどうかを確認しないでください。RaiseEvent
は、イベントを発生させる前にNothing
をチェックします。
共有メンバーの使用
インスタンス変数からではなく、クラス名を使用してメンバー Shared
呼び出します。
XML リテラルを使用する
XML リテラルを使用すると、XML を操作するときに発生する最も一般的なタスク (読み込み、クエリ、変換など) が簡略化されます。 XML を使用して開発する場合は、次のガイドラインに従ってください。
XML API を直接呼び出す代わりに、XML リテラルを使用して XML ドキュメントとフラグメントを作成します。
XML リテラルのパフォーマンス最適化を利用するために、ファイルまたはプロジェクト レベルで XML 名前空間をインポートします。
XML ドキュメント内の要素と属性にアクセスするには、XML 軸プロパティを使用します。
Add
メソッドなどの API 呼び出しを使用する代わりに、埋め込み式を使用して値を含め、既存の値から XML を作成します。Private Function GetHtmlDocument( ByVal items As IEnumerable(Of XElement)) As String Dim htmlDoc = <html> <body> <table border="0" cellspacing="2"> <%= From item In items Select <tr> <td style="width:480"> <%= item.<title>.Value %> </td> <td><%= item.<pubDate>.Value %></td> </tr> %> </table> </body> </html> Return htmlDoc.ToString() End Function
LINQ クエリ
クエリ変数にはわかりやすい名前を使用します。
Dim seattleCustomers = From cust In customers Where cust.City = "Seattle"
Pascal の大文字と小文字を使用して匿名型のプロパティ名が正しく大文字になるように、クエリ内の要素の名前を指定します。
Dim customerOrders = From customer In customers Join order In orders On customer.CustomerID Equals order.CustomerID Select Customer = customer, Order = order
結果のプロパティ名があいまいになる場合は、プロパティ名を変更します。 たとえば、クエリで顧客名と注文 ID が返される場合は、
Name
のままにせずに名前を変更し、結果にID
します。Dim customerOrders2 = From cust In customers Join ord In orders On cust.CustomerID Equals ord.CustomerID Select CustomerName = cust.Name, OrderID = ord.ID
クエリ変数と範囲変数の宣言で型推論を使用します。
Dim customerList = From cust In customers
From
ステートメントの下にクエリ句を配置します。Dim newyorkCustomers = From cust In customers Where cust.City = "New York" Select cust.LastName, cust.CompanyName
他のクエリ句の前に
Where
句を使用して、後のクエリ句がフィルター処理されたデータ セットに対して動作するようにします。Dim newyorkCustomers2 = From cust In customers Where cust.City = "New York" Order By cust.LastName
Where
句を使用して結合操作を暗黙的に定義する代わりに、Join
句を使用して結合操作を明示的に定義します。Dim customerList2 = From cust In customers Join order In orders On cust.CustomerID Equals order.CustomerID Select cust, order
こちらも参照ください
.NET