Соглашения о написании кода в Visual Basic

Корпорация Майкрософт разрабатывает примеры и документацию, которые соответствуют рекомендациям, приведенным в этом разделе. Если вы следуйте тем же соглашениям по кодированию, вы можете получить следующие преимущества:

  • Код будет иметь согласованный вид, чтобы читатели могли лучше сосредоточиться на содержимом, а не макете.

  • Читатели более быстро понимают код, так как они могут делать предположения на основе предыдущего опыта.

  • Вы можете копировать, изменять и поддерживать код проще.

  • Вы можете убедиться, что код демонстрирует "рекомендации" для Visual Basic.

Соглашения об именах

  • Дополнительные сведения об именовании см . в разделе "Рекомендации по именованию".

  • Не используйте "My" или "my" в составе имени переменной. Эта практика создает путаницу с объектами My .

  • Вам не нужно изменять имена объектов в автоматическом коде, чтобы они соответствовали рекомендациям.

Соглашения о расположении

  • Вставка вкладок в виде пробелов и использование интеллектуального отступа с четырехпространствыми отступами.

  • Используйте довольное описание (переформатирование) кода, чтобы переформатировать код в редакторе кода. Дополнительные сведения см. в разделе "Параметры", "Текстовый редактор", "Базовый" (Visual Basic).

  • Используйте только одну инструкцию на строку. Не используйте символ разделителя строк Visual Basic (:).

  • Избегайте использования явного символа продолжения строки "_" в пользу неявного продолжения строки, где бы он ни был разрешен.

  • Используйте только одно объявление на строку.

  • Если "Довольно" (переформатирование) кода не форматируют строки продолжения автоматически, отступные строки продолжения вручную останавливаются на одной вкладке. Однако всегда выровнять элементы в списке по левому краю.

    a As Integer,  
    b As Integer  
    
  • Добавьте по крайней мере одну пустую строку между определениями методов и свойств.

Соглашения о комментариях

  • Поместите комментарии в отдельную строку вместо конца строки кода.

  • Запустите текст примечания с прописной буквой и текстом примечания с периодом.

  • Вставьте одно пространство между разделителем комментариев (') и текстом комментария.

    ' 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
    

Расслабленные делегаты в обработчиках событий

Не указывайте явно аргументы (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

При выполнении ряда вызовов одного объекта рассмотрите возможность использования With ключевое слово:

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

Используйте пробную попытку... Перехват и использование инструкций при использовании обработки исключений

Не используйте On Error Goto.

Использование ключевого слова IsNot

Используйте ... IsNot Nothing вместо Not ... Is Nothing.

Новое ключевое слово

  • Используйте короткий экземпляр. Например, используйте следующий синтаксис:

    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"}
    

Обработка событий

  • Используйте Handles вместо AddHandler:

    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)
    
  • Не проверяйте, имеет ли событие значение Nothing NULL перед вызовом RaiseEvent метода. RaiseEventпроверка перед Nothing вызовом события.

Использование общих членов

Вызов Shared элементов с помощью имени класса, а не из переменной экземпляра.

Использование XML-литерала

XML-литералы упрощают наиболее распространенные задачи, которые возникают при работе с XML (например, загрузка, запрос и преобразование). При разработке с использованием XML выполните следующие рекомендации.

  • Используйте XML-литералы для создания XML-документов и фрагментов вместо вызова API-интерфейсов XML напрямую.

  • Импортируйте пространства имен XML на уровне файла или проекта, чтобы воспользоваться оптимизацией производительности для XML-литералов.

  • Используйте свойства оси XML для доступа к элементам и атрибутам в XML-документе.

  • Используйте внедренные выражения для включения значений и создания XML из существующих значений вместо использования вызовов API, таких как Add метод:

    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
    
  • Переименуйте свойства, если имена свойств в результате могут быть неоднозначными. Например, если запрос возвращает имя клиента и идентификатор заказа, переименуйте их вместо того, чтобы оставить их как 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
    
  • Join Используйте предложение для явного определения операции соединения вместо использования Where предложения для неявного определения операции соединения:

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

См. также