Visual Basic — Konwencje kodowania
Microsoft rozwija przykłady i dokumentację, które postępują zgodnie ze wskazówkami podanymi w tym temacie.Dzięki stosowaniu tych samych konwencji kodowania możesz osiągnąć następujące korzyści:
Twój kod będzie miał jednolity wygląd, żeby czytelnicy mogli lepiej skupić się na treści, a nie na układzie.
Czytniki rozumieją twój kod lepiej, ponieważ mogą robić więjsze założenia na podstawie poprzednich doświadczeń.
Można łatwiej kopiować, zmieniać i utrzymywać kod.
Ułatwia zapewnienie, że Twój kod wykazuje ,,Najważniejsze wskazówki" dla języka Visual Basic.
Konwencje nazewnictwa
Dla informacji o zasadach nazywania zobacz temat Guidelines for Names.
Nie należy używać "Mój" lub "mój" jako część nazwy zmiennej.Praktyka ta tworzy omyłkowe obiekty My.
Nie musisz zmieniać nazwy obiektów w automatycznie wygenerowany kod, aby je dopasować do wytycznych.
Konwencje układu
Wstaw tabulatory jako spacje i użyj inteligentnego wcięcia z czterokrotnym wcięciem.
Użyj opcji Automatyczne formatowanie kodu, aby sformatować kod w edytorze kodu.Aby uzyskać więcej informacji, zobacz Opcje, edytor tekstów, Basic (Visual Basic).
Użyj tylko jednej instrukcji na wiersz.Nie używaj znaku separatora wierszy programu Visual Basic (:).
Unikaj używania jawnego znaku kontynuacji wiersza "_" na rzecz niejawnej kontynuacji wiersza wszędzie tam, gdzie pozwala to język.
Użyj tylko jednej deklaracji na wiersz.
Jeśli funkcja Automatyczne formatowanie kodu nie formatuje wierszy kontynuacji automatycznie, ręcznie utwórz wcięcia wierszy kontynuacji na jeden tabulator.Jednak zawsze wyrównuj do lewej elementy na liście.
a As Integer, b As Integer
Dodaj co najmniej jeden pusty wiersz między definicje metod i właściwości.
Konwencje komentowania
Umieść komentarze w osobnym wierszu zamiast na końcu wiersza kodu.
Rozpocznij tekst komentarza wielką literą i zakończ go kropką.
Wstaw jedną spację między ogranicznik komentarza (') i tekst komentarza.
' Here is a comment.
Nie otaczaj komentarzy sformatowanymi blokami ani gwiazdkami.
Struktura programu
Podczas korzystania z metody Main, użyj domyślnego konstruktora dla nowych aplikacji konsoli oraz My dla argumentów wiersza poleceń.
Sub Main() For Each argument As String In My.Application.CommandLineArgs ' Add code here to use the string variable. Next End Sub
Wytyczne dotyczące języka
Typ danych ciągu
Do łączenia ciągów użyj znaku handlowe „i” (&).
MsgBox("hello" & vbCrLf & "goodbye")
Aby dołączyć ciągi w pętli, należy użyć obiektu StringBuilder.
Dim longString As New System.Text.StringBuilder For count As Integer = 1 To 1000 longString.Append(count) Next
Obniżone delegaty w procedurach obsługi zdarzeń
Nie kwalifikuj jawnie argumentów (Obiekt i EventArgs) do obsługi zdarzeń.Jeśli nie używasz argumentów zdarzeń, które są przekazywane do zdarzenia (na przykład nadawcy jako obiektu, e jako EventArg), użyj swobodnych delegatów pomiń argumenty zdarzeń w kodzie:
Public Sub Form1_Load() Handles Form1.Load
End Sub
Typ danych bez znaku
- Użyj Integer zamiast niepodpisanych typów, z wyjątkiem przypadków, gdy jest to konieczne.
Tablice
Użyj skróconej składni podczas inicjowania tablic w wierszu deklaracji.Na przykład użyj następującej składni.
Dim letters1 As String() = {"a", "b", "c"}
Nie używaj poniższej składni.
Dim letters2() As String = New String() {"a", "b", "c"}
Umieść oznaczenie tablicy na typie a nie na zmiennej.Na przykład użyj następującej składni:
Dim letters4 As String() = {"a", "b", "c"}
Nie używaj poniższej składni:
Dim letters3() As String = {"a", "b", "c"}
Do deklarowania i inicjowania tablic typów podstawowych danych należy użyć składni {}.Na przykład użyj następującej składni:
Dim letters5() As String = {"a", "b", "c"}
Nie używaj poniższej składni:
Dim letters6(2) As String letters6(0) = "a" letters6(1) = "b" letters6(2) = "c"
Użycie słowa kluczowego With
Wprowadzając szereg wywołań do jednego obiektu, należy rozważyć użycie słowa kluczowego With:
With orderLog
.Log = "Application"
.Source = "Application Name"
.MachineName = "Computer Name"
End With
Użycie instrukcji Try...Catch i Using do obsługi wyjątków
Nie używać On Error Goto.
Użycie słowa kluczowego IsNot
Użyj słowa kluczowego IsNot zamiast Not...Is Nothing.
Nowe słowa kluczowe
Użyj krótkiego tworzenia wystąpienia.Na przykład użyj następującej składni:
Dim employees As New List(Of String)
Poprzedni wiersz jest równoważny następującemu wyrażeniu:
Dim employees2 As List(Of String) = New List(Of String)
Użyj inicjatorów obiektów dla nowych obiektów, a nie konstruktora bez parametrów:
Dim orderLog As New EventLog With { .Log = "Application", .Source = "Application Name", .MachineName = "Computer Name"}
Obsługa zdarzeń
Użyj Handles a nie AddHandler:
Private Sub ToolStripMenuItem1_Click() Handles ToolStripMenuItem1.Click End Sub
Należy użyć AddressOf i nie tworzyć wystąpienia pełnomocnika jawnie:
Dim closeItem As New ToolStripMenuItem( "Close", Nothing, AddressOf ToolStripMenuItem1_Click) Me.MainMenuStrip.Items.Add(closeItem)
Podczas definiowania zdarzenia można używać skróconej składni i zezwolić kompilatorowi na zdefiniowanie delegata:
Public Event SampleEvent As EventHandler(Of SampleEventArgs) ' or Public Event SampleEvent(ByVal source As Object, ByVal e As SampleEventArgs)
Nie weryfikuj, czy zdarzenie jest Nothing (null) przed wywołaniem metody RaiseEvent.RaiseEvent sprawdza, czy Nothing przed wywołaniem zzdarzenia.
Używanie udostępnionych elementów członkowskich
Wywołaj członków Shared przy użyciu nazwy klasy, ale nie ze zmiennej wystąpienia.
Używanie literałów XML
Literały XML upraszczają najbardziej typowe zadania, które można napotkać podczas pracy z XML (na przykład ładowanie, kwerendy i transformowanie).Podczas pracy z danymi XML należy przestrzegać następujących zasad:
Literały XML umożliwiają tworzenie dokumentów XML i fragmentów zamiast wywoływania interfejsów API XML bezpośrednio.
Zaimportuj przestrzenie nazw XML na poziomie pliku lub projektu, aby skorzystać z optymalizacji wydajności w literałach XML.
Właściwości osi XML umożliwiają dostęp do elementów i atrybutów w dokumencie XML.
Wyrażenia osadzone umożliwiają uwzględnienie wartości i tworzenie kodu XML na podstawie istniejących wartości, a nie przy użyciu wywołań interfejsu API, takich jak metoda 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
Zapytania LINQ
Użyj nazw opisowych dla zmiennych kwerendy:
Dim seattleCustomers = From cust In customers Where cust.City = "Seattle"
Zapewnij nazwy elementów w zapytaniu, aby upewnić się, że nazwy właściwości anonimowych typów są kapitalizowane poprawnie przy użyciu obudowy Pascal:
Dim customerOrders = From customer In customers Join order In orders On customer.CustomerID Equals order.CustomerID Select Customer = customer, Order = order
Zmień nazwę właściwości, gdy nazwy właściwości w wyniku byłby niejednoznaczne.Na przykład jeśli zapytanie zwraca nazwę klienta i identyfikator zamówienia, zmień je zamiast pozostawiania je jako Name i ID w wyniku:
Dim customerOrders2 = From cust In customers Join ord In orders On cust.CustomerID Equals ord.CustomerID Select CustomerName = cust.Name, OrderID = ord.ID
Użyj wnioskowania o typie w deklaracji zmiennych kwerendy i zmiennych zakresu:
Dim customerList = From cust In customers
Wyrównaj klauzule zapytania pod instrukcją From:
Dim newyorkCustomers = From cust In customers Where cust.City = "New York" Select cust.LastName, cust.CompanyName
Użycie klauzuli Where przed innymi klauzulami kwerend powoduje, że późniejsze klauzule kwerend działają na zestawie filtrowanych danych:
Dim newyorkCustomers2 = From cust In customers Where cust.City = "New York" Order By cust.LastName
Klauzula Join umożliwia jawne zdefiniowanie operacji join w przeciwieństwie do klauzuli Where, która umożliwia niejawnie określenie operacji join:
Dim customerList2 = From cust In customers Join order In orders On cust.CustomerID Equals order.CustomerID Select cust, order