Visual Basic のコーディング規則Visual Basic Coding Conventions

Microsoft は、ここで示すガイドラインに従ってサンプルおよびドキュメントを開発しています。Microsoft develops samples and documentation that follow the guidelines in this topic. 同じコーディング規則に従うと、次のような利点があります。If you follow the same coding conventions, you may gain the following benefits:

  • コードの見た目が統一されるため、コードを読むときに、レイアウトではなく内容に重点を置くことができます。Your code will have a consistent look, so that readers can better focus on content, not layout.

  • これまでの経験に基づいて推測できるようになるため、コードをすばやく理解できます。Readers understand your code more quickly because they can make assumptions based on previous experience.

  • コードのコピー、変更、保守がより簡単になります。You can copy, change, and maintain the code more easily.

  • コードが Visual Basic の "ベスト プラクティス" に従っていることを確認できます。You help ensure that your code demonstrates "best practices" for Visual Basic.

名前付け規則Naming Conventions

  • 名前付けのガイドラインについては、次を参照してください。名前付けのガイドライントピックです。For information about naming guidelines, see Naming Guidelines topic.

  • "My" または "my" を変数名の一部として使用しないようにします。Do not use "My" or "my" as part of a variable name. My オブジェクトとの混同を招くからです。This practice creates confusion with the My objects.

  • 自動生成されたコードに含まれるオブジェクトの名前をこのガイドラインに合わせて変更する必要はありません。You do not have to change the names of objects in auto-generated code to make them fit the guidelines.

レイアウト規則Layout Conventions

  • タブを空白として挿入し、4 文字インデントによるスマート インデントを使用します。Insert tabs as spaces, and use smart indenting with four-space indents.

  • コード エディターでコードの書式を再整形するときはコードの再フォーマットを使用します。Use Pretty listing (reformatting) of code to reformat your code in the code editor. 詳細については、次を参照してください。オプション、[テキスト エディター]、基本 (Visual Basic)です。For more information, see Options, Text Editor, Basic (Visual Basic).

  • 1 つの行には 1 つのステートメントのみを記述します。Use only one statement per line. Visual Basic の行区切り記号 (:) は使用しないでください。Don't use the Visual Basic line separator character (:).

  • 言語で許可される場所では、明示的な行継続文字 "" ではなく暗黙的な行継続を使用します。Avoid using the explicit line continuation character "" in favor of implicit line continuation wherever the language allows it.

  • 1 つの行には 1 つの宣言のみを記述します。Use only one declaration per line.

  • コードの再フォーマットが自動で行継続を整形しない場合、手動で継続行を1個のタブ ストップでインデントします。If Pretty listing (reformatting) of code doesn't format continuation lines automatically, manually indent continuation lines one tab stop. ただし、リストの項目は常に左揃えにします。However, always left-align items in a list.

    a As Integer,  
    b As Integer  
    
  • メソッド定義とプロパティ定義の間に少なくとも 1 行の空白行を追加します。Add at least one blank line between method and property definitions.

コメント規則Commenting Conventions

  • コメントは、コード行の末尾ではなく別の行に記述します。Put comments on a separate line instead of at the end of a line of code.

  • 英語でコメントを記述する場合、コメント テキストの始まりには英大文字を使用し、終わりにはピリオドを使用します。Start comment text with an uppercase letter, and end comment text with a period.

  • コメント デリミター (') とコメント テキストの間に空白を 1 つ挿入します。Insert one space between the comment delimiter (') and the comment text.

    ' Here is a comment.
    
  • 整形されたアスタリスク (*) のブロックでコメントを囲まないようにします。Do not surround comments with formatted blocks of asterisks.

プログラムの構造Program Structure

  • Main メソッドを使用するときには、新しいコンソール アプリケーションの既定の構造を使用し、コマンド ライン引数には My を使用します。When you use the Main method, use the default construct for new console applications, and use My for command-line arguments.

    Sub Main()
      For Each argument As String In My.Application.CommandLineArgs
        ' Add code here to use the string variable.
      Next
    End Sub
    

言語ガイドラインLanguage Guidelines

文字列型 (String)String Data Type

  • 文字列を連結するには、アンパサンド (&) を使用します。To concatenate strings, use an ampersand (&).

    MsgBox("hello" & vbCrLf & "goodbye")
    
  • ループ内での文字列の追加には StringBuilder オブジェクトを使用します。To append strings in loops, use the StringBuilder object.

    Dim longString As New System.Text.StringBuilder
    For count As Integer = 1 To 1000
      longString.Append(count)
    Next
    

イベント ハンドラー内の厳密でないデリゲートRelaxed Delegates in Event Handlers

イベント ハンドラーの引数 (Object および EventArgs) は明示的に修飾しません。Do not explicitly qualify the arguments (Object and EventArgs) to event handlers. イベントに渡されるイベント引数 (sender as Object、e as EventArgs など) を使用しない場合は、厳密でないデリゲートを使用して、コードでイベント引数を省略します。If you are not using the event arguments that are passed to an event (for example, sender as Object, e as EventArgs), use relaxed delegates, and leave out the event arguments in your code:

Public Sub Form1_Load() Handles Form1.Load
End Sub

Unsigned データ型Unsigned Data Type

  • 特に必要でない限り、unsigned 型ではなく Integer を使用します。Use Integer rather than unsigned types, except where they are necessary.

配列Arrays

  • 宣言行で配列を初期化するときは短い構文を使用します。Use the short syntax when you initialize arrays on the declaration line. たとえば、次のような構文を使用します。For example, use the following syntax.

    Dim letters1 As String() = {"a", "b", "c"}
    

    次のような構文は使用しません。Do not use the following syntax.

    Dim letters2() As String = New String() {"a", "b", "c"}
    
  • 配列指定子は、変数ではなく型に指定します。Put the array designator on the type, not on the variable. たとえば、次のような構文を使用します。For example, use the following syntax:

    Dim letters4 As String() = {"a", "b", "c"}
    

    次のような構文は使用しません。Do not use the following syntax:

    Dim letters3() As String = {"a", "b", "c"}
    
  • 基本データ型の配列の宣言と初期化では、{ } 構文を使用します。Use the { } syntax when you declare and initialize arrays of basic data types. たとえば、次のような構文を使用します。For example, use the following syntax:

    Dim letters5 As String() = {"a", "b", "c"}
    

    次のような構文は使用しません。Do not use the following syntax:

    Dim letters6(2) As String
    letters6(0) = "a"
    letters6(1) = "b"
    letters6(2) = "c"
    

With キーワードの使用Use the With Keyword

同じオブジェクトの呼び出しを複数回使用する場合には、With キーワードの使用を検討します。When you make a series of calls to one object, consider using the With keyword:

With orderLog
  .Log = "Application"
  .Source = "Application Name"
  .MachineName = "Computer Name"
End With

例外処理を使用する場合の Try...Catch/Using ステートメントの使用Use the Try...Catch and Using Statements when you use Exception Handling

On Error Goto は使用しないでください。Do not use On Error Goto.

IsNot キーワードの使用Use the IsNot Keyword

Not...Is Nothing の代わりに IsNot キーワードを使用します。 Use the IsNot keyword instead of Not...Is Nothing.

New キーワードNew Keyword

  • 短い形式のインスタンス化を使用します。Use short instantiation. たとえば、次のような構文を使用します。For example, use the following syntax:

    Dim employees As New List(Of String)
    

    この行は次の行と同じ結果をもたらします。The preceding line is equivalent to this:

    Dim employees2 As List(Of String) = New List(Of String)
    
  • 新しいオブジェクトには、パラメーターなしのコンストラクターの代わりにオブジェクト初期化子を使用します。Use object initializers for new objects instead of the parameterless constructor:

    Dim orderLog As New EventLog With { 
        .Log = "Application", 
        .Source = "Application Name", 
        .MachineName = "Computer Name"}
    

イベント処理Event Handling

  • AddHandler ではなく Handles を使用します。Use Handles rather than AddHandler:

    Private Sub ToolStripMenuItem1_Click() Handles ToolStripMenuItem1.Click
    End Sub
    
  • AddressOf を使用し、デリゲートの明示的なインスタンス化は避けます。Use AddressOf, and do not instantiate the delegate explicitly:

    Dim closeItem As New ToolStripMenuItem( 
        "Close", Nothing, AddressOf ToolStripMenuItem1_Click)
    Me.MainMenuStrip.Items.Add(closeItem)
    
  • イベントを定義するときには、短い構文を使用し、デリゲートの定義はコンパイラに任せます。When you define an event, use the short syntax, and let the compiler define the delegate:

    Public Event SampleEvent As EventHandler(Of SampleEventArgs)
    ' or
    Public Event SampleEvent(ByVal source As Object, 
                              ByVal e As SampleEventArgs)
    
  • RaiseEvent メソッドを呼び出す前にイベントが Nothing (null) かどうか確認しないようにします。Do not verify whether an event is Nothing (null) before you call the RaiseEvent method. RaiseEvent は、イベントを発生させる前に Nothing かどうか確認します。RaiseEvent checks for Nothing before it raises the event.

共有メンバーの使用Using Shared Members

Shared メンバーの呼び出しにはクラス名を使用し、インスタンス変数からは行わないようにします。Call Shared members by using the class name, not from an instance variable.

XML リテラルの使用Use XML Literals

XML リテラルを使用すると、XML 操作時に行う最も一般的なタスク (読み込み、クエリ、変換など) を簡素化できます。XML literals simplify the most common tasks that you encounter when you work with XML (for example, load, query, and transform). XML を使用して開発を行う場合は、次のガイドラインに従います。When you develop with XML, follow these guidelines:

  • XML API を直接呼び出す代わりに XML リテラルを使用して XML ドキュメントおよびフラグメントを作成します。Use XML literals to create XML documents and fragments instead of calling XML APIs directly.

  • ファイル レベルまたはプロジェクト レベルで XML 名前空間をインポートし、XML リテラルによるパフォーマンスの最適化を利用します。Import XML namespaces at the file or project level to take advantage of the performance optimizations for XML literals.

  • XML 軸プロパティを使用して XML ドキュメント内の要素と属性にアクセスします。Use the XML axis properties to access elements and attributes in an XML document.

  • Add メソッドなどの API 呼び出しを使用する代わりに、埋め込み式を使用して既存の値から値を組み込んで XML を作成します。Use embedded expressions to include values and to create XML from existing values instead of using API calls such as the Add method:

    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 クエリLINQ Queries

  • クエリ変数にはわかりやすい名前を使用します。Use meaningful names for query variables:

    Dim seattleCustomers = From cust In customers 
                           Where cust.City = "Seattle"
    
  • クエリ内で要素の名前を指定して、匿名型のプロパティ名の大文字と小文字の使用が正しい Pascal 形式になるようにします。Provide names for elements in a query to make sure that property names of anonymous types are correctly capitalized using Pascal casing:

    Dim customerOrders = From customer In customers 
                         Join order In orders 
                           On customer.CustomerID Equals order.CustomerID 
                         Select Customer = customer, Order = order
    
  • 結果のプロパティ名があいまいになる場合は、プロパティ名を変更します。Rename properties when the property names in the result would be ambiguous. たとえば、クエリが顧客名と注文 ID を返す場合、それらの名前を結果の NameID のままにはせずに変更します。For example, if your query returns a customer name and an order ID, rename them instead of leaving them as Name and ID in the result:

    Dim customerOrders2 = From cust In customers 
                          Join ord In orders
                            On cust.CustomerID Equals ord.CustomerID 
                          Select CustomerName = cust.Name, 
                                 OrderID = ord.ID
    
  • クエリ変数と範囲変数の宣言で型の推論を使用します。Use type inference in the declaration of query variables and range variables:

    Dim customerList = From cust In customers
    
  • 各クエリ句を From ステートメントの下に揃えます。Align query clauses under the From statement:

    Dim newyorkCustomers = From cust In customers 
                           Where cust.City = "New York" 
                           Select cust.LastName, cust.CompanyName
    
  • Where 句を他のクエリ句より先に使用し、それ以降のクエリ句では、フィルター化されたデータセットが処理されるようにします。Use Where clauses before other query clauses so that later query clauses operate on the filtered set of data:

    Dim newyorkCustomers2 = From cust In customers 
                            Where cust.City = "New York" 
                            Order By cust.LastName
    
  • Where 句を使用して暗黙的に結合操作を定義する代わりに、Join 句を使用して明示的に結合操作を定義します。Use the Join clause to explicitly define a join operation instead of using the Where clause to implicitly define a join operation:

    Dim customerList2 = From cust In customers 
                        Join order In orders 
                          On cust.CustomerID Equals order.CustomerID 
                        Select cust, order
    

関連項目See Also

安全なコーディングのガイドラインSecure Coding Guidelines