Convenciones de código de Visual Basic
Microsoft desarrolla ejemplos y documentación que siguen las instrucciones de este tema. Si sigue las mismas convenciones de codificación, puede obtener las siguientes ventajas:
El código tendrá un aspecto coherente para que los lectores puedan centrarse mejor en el contenido, no en el diseño.
Los lectores comprenden el código más rápidamente porque pueden realizar suposiciones en función de experiencias anteriores.
Puede copiar, cambiar y mantener el código más fácilmente.
Le ayudará a garantizar que el código muestra los "procedimientos recomendados" de Visual Basic.
Convenciones de nomenclatura
Para más información sobre las instrucciones de nomenclatura, consulte el tema Instrucciones de nomenclatura.
No use "My" o "my" como parte de un nombre de variable. Esta práctica crea confusión con los objetos
My
.No es necesario cambiar los nombres de los objetos en el código generado automáticamente para que se ajusten a las instrucciones.
Convenciones de diseño
Inserte pestañas como espacios y use la sangría inteligente con sangrías de cuatro espacios.
Use Lista descriptiva (nuevo formato) de código para volver a formatear el código en el editor de código. Para más información, consulte Opciones, editor de texto, básico (Visual Basic).
Use solo una instrucción por línea. No use el carácter separador de líneas de Visual Basic (
:
).Evite usar el carácter de continuación de línea explícito "
_
" en favor de la continuación de línea implícita siempre que el lenguaje lo permita.Use solo una declaración por línea.
Si Lista descriptiva (nuevo formato) de código no da formato a las líneas de continuación automáticamente, inserte manualmente una sangría de una tabulación en las líneas de continuación. No obstante, alinee siempre los elementos a la izquierda en una lista.
a As Integer, b As Integer
Agregue al menos una línea en blanco entre las definiciones de método y las de propiedad.
Convenciones de los comentarios
Ponga los comentarios en una línea aparte en lugar de al final de una línea de código.
Inicie el texto del comentario con una letra mayúscula y termine con un punto.
Inserte un espacio entre el delimitador de comentarios (
'
) y el texto del comentario.' Here is a comment.
No rodee los comentarios con bloques con formato de asteriscos.
Estructura del programa
Cuando use el método
Main
, use la construcción predeterminada para las nuevas aplicaciones de consola y useMy
para argumentos de línea de comandos.Sub Main() For Each argument As String In My.Application.CommandLineArgs ' Add code here to use the string variable. Next End Sub
Convenciones de lenguaje
String (Tipo de datos)
Use interpolación de cadenas para concatenar cadenas cortas, como se muestra en el código siguiente.
MsgBox($"hello{vbCrLf}goodbye")
Para anexar cadenas en bucles, use el objeto StringBuilder.
Dim longString As New System.Text.StringBuilder For count As Integer = 1 To 1000 longString.Append(count) Next
Delegados relajados en controladores de eventos
No califique explícitamente los argumentos (Object
y EventArgs
) en los controladores de eventos. Si no usa los argumentos de evento que se pasan a un evento (por ejemplo, sender As Object
y e As EventArgs
), use delegados relajados y deje los argumentos de evento en el código:
Public Sub Form1_Load() Handles Form1.Load
End Sub
Tipo de datos sin signo
- Use
Integer
en lugar de tipos sin firmar, excepto cuando sean necesarios.
Matrices
Utilice sintaxis corta para inicializar las matrices en la línea de declaración. Por ejemplo, use la sintaxis siguiente.
Dim letters1 As String() = {"a", "b", "c"}
No use la sintaxis siguiente.
Dim letters2() As String = New String() {"a", "b", "c"}
Coloque el designador de matriz en el tipo, no en la variable. Por ejemplo, use la sintaxis siguiente:
Dim letters4 As String() = {"a", "b", "c"}
No use la sintaxis siguiente:
Dim letters3() As String = {"a", "b", "c"}
Use la sintaxis { } al declarar e inicializar matrices de tipos de datos básicos. Por ejemplo, use la sintaxis siguiente:
Dim letters5 As String() = {"a", "b", "c"}
No use la sintaxis siguiente:
Dim letters6(2) As String letters6(0) = "a" letters6(1) = "b" letters6(2) = "c"
Uso de la palabra clave With
Cuando realice una serie de llamadas a un objeto, considere la posibilidad de usar la palabra clave With
:
With orderLog
.Log = "Application"
.Source = "Application Name"
.MachineName = "Computer Name"
End With
Uso de las instrucciones Try...Catch y Using cuando utilice el control de excepciones
No use On Error Goto
.
Uso de la palabra clave IsNot
Use ... IsNot Nothing
en lugar de Not ... Is Nothing
.
Nueva palabra clave
Use la creación de instancias cortas. Por ejemplo, use la sintaxis siguiente:
Dim employees As New List(Of String)
La línea anterior equivale a lo siguiente:
Dim employees2 As List(Of String) = New List(Of String)
Use inicializadores de objeto para objetos nuevos en lugar del constructor sin parámetros:
Dim orderLog As New EventLog With { .Log = "Application", .Source = "Application Name", .MachineName = "Computer Name"}
Control de eventos
Use
Handles
en lugar deAddHandler
:Private Sub ToolStripMenuItem1_Click() Handles ToolStripMenuItem1.Click End Sub
Use
AddressOf
y no cree instancias del delegado explícitamente:Dim closeItem As New ToolStripMenuItem( "Close", Nothing, AddressOf ToolStripMenuItem1_Click) Me.MainMenuStrip.Items.Add(closeItem)
Al definir un evento, use la sintaxis corta y deje que el compilador defina el delegado:
Public Event SampleEvent As EventHandler(Of SampleEventArgs) ' or Public Event SampleEvent(ByVal source As Object, ByVal e As SampleEventArgs)
No compruebe si un evento es
Nothing
(null) antes de llamar al métodoRaiseEvent
.RaiseEvent
comprueba si apareceNothing
antes de generar el evento.
Uso de miembros compartidos
Llame a los miembros Shared
mediante el nombre de clase, no desde una variable de instancia.
Uso de literales XML
Los literales XML simplifican las tareas más comunes que se encuentran al trabajar con XML (por ejemplo, la carga, consulta y transformación). Cuando desarrolle con XML, siga estas instrucciones:
Use literales XML para crear documentos y fragmentos XML en lugar de llamar directamente a las API de XML.
Importe espacios de nombres XML en el nivel de archivo o proyecto para aprovechar las optimizaciones de rendimiento de los literales XML.
Use las propiedades del eje XML para acceder a los elementos y atributos de un documento XML.
Use expresiones insertadas para incluir valores y para crear XML a partir de los valores existentes en lugar de usar llamadas API como el método
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
Consultas LINQ
Utilice nombres descriptivos para las variables de consulta:
Dim seattleCustomers = From cust In customers Where cust.City = "Seattle"
Proporcione nombres para los elementos de una consulta para asegurarse de que los nombres de propiedad de tipos anónimos se escriben correctamente con mayúscula o minúscula, usando para ello la grafía Pascal:
Dim customerOrders = From customer In customers Join order In orders On customer.CustomerID Equals order.CustomerID Select Customer = customer, Order = order
Cambie el nombre de las propiedades cuando puedan ser ambiguos en el resultado. Por ejemplo, si su consulta devuelve un nombre de cliente y un identificador de pedido, reasígneles un nombre en lugar de dejarlos como
Name
yID
en el resultado:Dim customerOrders2 = From cust In customers Join ord In orders On cust.CustomerID Equals ord.CustomerID Select CustomerName = cust.Name, OrderID = ord.ID
Utilice la inferencia de tipos en la declaración de variables de consulta y variables de rango:
Dim customerList = From cust In customers
Alinee las cláusulas de consulta en la instrucción
From
:Dim newyorkCustomers = From cust In customers Where cust.City = "New York" Select cust.LastName, cust.CompanyName
Use cláusulas
Where
antes de otras cláusulas de consulta para que las cláusulas de consulta posteriores operen en el conjunto de datos filtrado:Dim newyorkCustomers2 = From cust In customers Where cust.City = "New York" Order By cust.LastName
Use la cláusula
Join
para definir explícitamente una operación de combinación en lugar de usar la cláusulaWhere
para definir implícitamente una operación de combinación:Dim customerList2 = From cust In customers Join order In orders On cust.CustomerID Equals order.CustomerID Select cust, order