次の方法で共有


Visual Basic のコーディング規則

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
    

イベント ハンドラーでのリラックスしたデリゲート

引数 (ObjectEventArgs) をイベント ハンドラーに明示的に修飾しないでください。 イベントに渡されるイベント引数 (たとえば、 sender As Objecte 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
    

こちらも参照ください