Visual Basic のコーディング規則
Microsoft は、このトピックで説明するガイドラインに従ってドキュメントやサンプルを開発します。同じコード規則に従うと、次の利点を取得する場合:
リーダーがコンテンツのフォーカスにできるようにコードに一貫した外観を、レイアウトです。
リーダーは前の経験に基づいて判断を行うことができるため、コードをすばやく理解します。
コードのコピー、変更、より簡単に管理できます。
コードが Visual Basic のベスト プラクティスを示すことを確認できます。
名前付け規則
名前付けのガイドラインについては、Guidelines for Names "を参照してください。
"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
言語ガイドライン
文字列型 (String)
文字列を連結するには、アンパサンドを使用します (&)。
MsgBox("hello" & vbCrLf & "goodbye")
ループ内で文字列を追加するには、StringBuilder のオブジェクトを使用します。
Dim longString As New System.Text.StringBuilder For count As Integer = 1 To 1000 longString.Append(count) Next
イベント ハンドラー内の厳密でないデリゲート
明示的にイベント ハンドラーに引数 (オブジェクト) および EventArgs 修飾しないでください。イベント (たとえば、オブジェクト、EventArgs として e として送信元) を渡すイベント引数を使用しない場合は、厳密でないデリゲートを使用して、コード内でイベント引数を省略する:
Public Sub Form1_Load() Handles Form1.Load
End Sub
Unsigned データ型
- を除く必要な unsigned 型ではなく 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
例外処理を使用すると Try… Catch/Using ステートメントの使用した場合
On Error Goto は使用しないでください。
IsNot キーワードの使用
Not...Is Nothingの代わりに IsNot のキーワードを使用します。
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