Convenções de codificação do Visual Basic
A Microsoft desenvolve exemplos e documentação que seguem as diretrizes neste tópico. Se você seguir as mesmas convenções de codificação, poderá obter os seguintes benefícios:
Seu código terá uma aparência consistente, para que os leitores possam se concentrar melhor no conteúdo, não no layout.
Os leitores entendem seu código mais rapidamente porque podem fazer suposições com base na experiência anterior.
Você pode copiar, alterar e manter o código mais facilmente.
Você ajuda a garantir que seu código demonstre "práticas recomendadas" para Visual Basic.
Convenções de nomenclatura
Para obter informações sobre diretrizes de nomenclatura, consulte o tópico Diretrizes de nomenclatura.
Não use "Meu" ou "Meu" como parte de um nome de variável. Esta prática cria confusão com os
My
objetos.Não é necessário alterar os nomes dos objetos no código gerado automaticamente para que eles se ajustem às diretrizes.
Convenções de Layout
Insira guias como espaços e use recuo inteligente com recuos de quatro espaços.
Use a listagem bonita (reformatação) de código para reformatar seu código no editor de código. Para obter mais informações, consulte Opções, Editor de texto, Básico (Visual Basic).
Use apenas uma instrução por linha. Não use o caractere separador de linha do Visual Basic (
:
).Evite usar o caractere de continuação de linha explícita "
_
" em favor da continuação de linha implícita sempre que a linguagem permitir.Use apenas uma declaração por linha.
Se a listagem bonita (reformatação) do código não formatar linhas de continuação automaticamente, recue manualmente as linhas de continuação uma parada de tabulação. No entanto, sempre alinhe os itens à esquerda em uma lista.
a As Integer, b As Integer
Adicione pelo menos uma linha em branco entre as definições de método e propriedade.
Convenções comentadoras
Coloque comentários em uma linha separada em vez de no final de uma linha de código.
Inicie o texto do comentário com uma letra maiúscula e termine o texto do comentário com um ponto.
Insira um espaço entre o delimitador de comentários (
'
) e o texto do comentário.' Here is a comment.
Não rodeie os comentários com blocos formatados de asteriscos.
Estrutura do Programa
Quando você usa o
Main
método, use a construção padrão para novos aplicativos de console e useMy
para argumentos de linha de comando.Sub Main() For Each argument As String In My.Application.CommandLineArgs ' Add code here to use the string variable. Next End Sub
Orientações linguísticas
Tipo de dados de cadeia de caracteres
Use a interpolação de cadeia de caracteres para concatenar cadeias curtas, conforme mostrado no código a seguir.
MsgBox($"hello{vbCrLf}goodbye")
Para acrescentar cadeias de caracteres em loops, use o StringBuilder objeto.
Dim longString As New System.Text.StringBuilder For count As Integer = 1 To 1000 longString.Append(count) Next
Delegados relaxados em manipuladores de eventos
Não qualifique explicitamente os argumentos (Object
e EventArgs
) para manipuladores de eventos. Se você não estiver usando os argumentos de evento que são passados para um evento (por exemplo, sender As Object
, e As EventArgs
), use delegados relaxados e deixe de fora os argumentos de evento em seu código:
Public Sub Form1_Load() Handles Form1.Load
End Sub
Tipo de dados não assinado
- Use
Integer
em vez de tipos não assinados, exceto quando forem necessários.
Matrizes
Use a sintaxe curta ao inicializar matrizes na linha de declaração. Por exemplo, use a sintaxe a seguir.
Dim letters1 As String() = {"a", "b", "c"}
Não use a sintaxe a seguir.
Dim letters2() As String = New String() {"a", "b", "c"}
Coloque o designador de matriz no tipo, não na variável. Por exemplo, use a seguinte sintaxe:
Dim letters4 As String() = {"a", "b", "c"}
Não use a seguinte sintaxe:
Dim letters3() As String = {"a", "b", "c"}
Use a sintaxe { } ao declarar e inicializar matrizes de tipos de dados básicos. Por exemplo, use a seguinte sintaxe:
Dim letters5 As String() = {"a", "b", "c"}
Não use a seguinte sintaxe:
Dim letters6(2) As String letters6(0) = "a" letters6(1) = "b" letters6(2) = "c"
Use a palavra-chave With
Ao fazer uma série de chamadas para um objeto, considere usar a With
palavra-chave:
With orderLog
.Log = "Application"
.Source = "Application Name"
.MachineName = "Computer Name"
End With
Use o... Capturar e usar instruções ao usar o Tratamento de Exceções
Não utilize On Error Goto
.
Use a palavra-chave IsNot
Use ... IsNot Nothing
em vez de Not ... Is Nothing
.
Nova palavra-chave
Use uma instanciação curta. Por exemplo, use a seguinte sintaxe:
Dim employees As New List(Of String)
A linha anterior é equivalente a isto:
Dim employees2 As List(Of String) = New List(Of String)
Use inicializadores de objeto para novos objetos em vez do construtor sem parâmetros:
Dim orderLog As New EventLog With { .Log = "Application", .Source = "Application Name", .MachineName = "Computer Name"}
Tratamento de eventos
Utilizar
Handles
em vez deAddHandler
:Private Sub ToolStripMenuItem1_Click() Handles ToolStripMenuItem1.Click End Sub
Use
AddressOf
e não instancie o delegado explicitamente:Dim closeItem As New ToolStripMenuItem( "Close", Nothing, AddressOf ToolStripMenuItem1_Click) Me.MainMenuStrip.Items.Add(closeItem)
Ao definir um evento, use a sintaxe curta e deixe o compilador definir o delegado:
Public Event SampleEvent As EventHandler(Of SampleEventArgs) ' or Public Event SampleEvent(ByVal source As Object, ByVal e As SampleEventArgs)
Não verifique se um evento é
Nothing
(nulo) antes de chamar oRaiseEvent
método.RaiseEvent
verifica antesNothing
de gerar o evento.
Usando membros compartilhados
Chame Shared
os membros usando o nome da classe, não de uma variável de instância.
Usar literais XML
Os literais XML simplificam as tarefas mais comuns que você encontra quando trabalha com XML (por exemplo, carregar, consultar e transformar). Ao desenvolver com XML, siga estas diretrizes:
Use literais XML para criar documentos e fragmentos XML em vez de chamar APIs XML diretamente.
Importe namespaces XML no nível de arquivo ou projeto para aproveitar as otimizações de desempenho para literais XML.
Use as propriedades do eixo XML para acessar elementos e atributos em um documento XML.
Use expressões incorporadas para incluir valores e criar XML a partir de valores existentes em vez de usar chamadas de API, como o
Add
método: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
Consultas LINQ
Use nomes significativos para variáveis de consulta:
Dim seattleCustomers = From cust In customers Where cust.City = "Seattle"
Forneça nomes para elementos em uma consulta para certificar-se de que os nomes de propriedade de tipos anônimos estejam corretamente capitalizados usando a caixa Pascal:
Dim customerOrders = From customer In customers Join order In orders On customer.CustomerID Equals order.CustomerID Select Customer = customer, Order = order
Renomeie propriedades quando os nomes de propriedade no resultado forem ambíguos. Por exemplo, se sua consulta retornar um nome de cliente e um ID de pedido, renomeie-os em vez de deixá-los como
Name
eID
no resultado:Dim customerOrders2 = From cust In customers Join ord In orders On cust.CustomerID Equals ord.CustomerID Select CustomerName = cust.Name, OrderID = ord.ID
Use a inferência de tipo na declaração de variáveis de consulta e variáveis de intervalo:
Dim customerList = From cust In customers
Alinhe as cláusulas de consulta sob a
From
instrução:Dim newyorkCustomers = From cust In customers Where cust.City = "New York" Select cust.LastName, cust.CompanyName
Use
Where
cláusulas antes de outras cláusulas de consulta para que cláusulas de consulta posteriores operem no conjunto filtrado de dados:Dim newyorkCustomers2 = From cust In customers Where cust.City = "New York" Order By cust.LastName
Use a
Join
cláusula para definir explicitamente uma operação de junção em vez de usar aWhere
cláusula para definir implicitamente uma operação de junção:Dim customerList2 = From cust In customers Join order In orders On cust.CustomerID Equals order.CustomerID Select cust, order