Udostępnij za pośrednictwem


Instrukcje w Visual Basic

Instrukcja w Visual Basic jest kompletną instrukcją. Może zawierać słowa kluczowe, operatory, zmienne, stałe i wyrażenia. Każda instrukcja należy do jednej z następujących kategorii:

  • Instrukcje deklaracji, które nazywają zmienną, stałą lub procedurą, i mogą również określać typ danych.

  • Instrukcje wykonywalne, które inicjują akcje. Te instrukcje mogą wywoływać metodę lub funkcję i mogą pętli lub rozgałęziać bloki kodu. Instrukcje wykonywalne obejmują instrukcje przypisania, które przypisują wartość lub wyrażenie do zmiennej lub stałej.

W tym temacie opisano każdą kategorię. Ponadto w tym temacie opisano sposób łączenia wielu instrukcji w jednym wierszu i sposobu kontynuowania instrukcji w wielu wierszach.

Instrukcje deklaracji

Instrukcje deklaracji służą do określania nazw i definiowania procedur, zmiennych, właściwości, tablic i stałych. Podczas deklarowania elementu programowania można również zdefiniować jego typ danych, poziom dostępu i zakres. Aby uzyskać więcej informacji, zobacz Zadeklarowane cechy elementów.

Poniższy przykład zawiera trzy deklaracje.

Public Sub ApplyFormat()
    Const limit As Integer = 33
    Dim thisWidget As New widget
    ' Insert code to implement the procedure.
End Sub

Pierwsza deklaracja to Sub instrukcja . Wraz z instrukcją dopasowania End Sub deklaruje procedurę o nazwie applyFormat. Określa również, że jest Publicto applyFormat , co oznacza, że każdy kod, który może się do niego odwoływać, może go wywołać.

Druga deklaracja to Const instrukcja, która deklaruje stałą limit, określając Integer typ danych i wartość 33.

Trzecia deklaracja to Dim instrukcja, która deklaruje zmienną thisWidget. Typ danych jest określonym obiektem, czyli obiektem utworzonym Widget na podstawie klasy. Zmienną można zadeklarować jako dowolny typ danych podstawowych lub dowolny typ obiektu uwidoczniony w używanej aplikacji.

Wartości początkowe

Po uruchomieniu kodu zawierającego instrukcję deklaracji program Visual Basic rezerwuje pamięć wymaganą dla zadeklarowanego elementu. Jeśli element przechowuje wartość, program Visual Basic inicjuje go do wartości domyślnej dla jego typu danych. Aby uzyskać więcej informacji, zobacz "Zachowanie" w instrukcji Dim.

Możesz przypisać wartość początkową do zmiennej w ramach jej deklaracji, jak pokazano w poniższym przykładzie.

Dim m As Integer = 45
' The preceding declaration creates m and assigns the value 45 to it.

Jeśli zmienna jest zmienną obiektu, możesz jawnie utworzyć wystąpienie jej klasy podczas deklarowania za pomocą słowa kluczowego Nowy operator , jak pokazano w poniższym przykładzie.

Dim f As New FileInfo("filename")

Należy pamiętać, że początkowa wartość określona w instrukcji deklaracji nie jest przypisana do zmiennej, dopóki wykonanie nie osiągnie instrukcji deklaracji. Do tego czasu zmienna zawiera wartość domyślną dla jej typu danych.

Instrukcje wykonywalne

Instrukcja wykonywalna wykonuje akcję. Może wywołać procedurę, rozgałęzić ją do innego miejsca w kodzie, wykonać pętlę za pomocą kilku instrukcji lub ocenić wyrażenie. Instrukcja przypisania jest specjalnym przypadkiem instrukcji wykonywalnej.

W poniższym przykładzie użyto struktury sterującej If...Then...Else do uruchamiania różnych bloków kodu na podstawie wartości zmiennej. W każdym bloku kodu pętla For...Next uruchamia określoną liczbę razy.

Public Sub StartWidget(ByVal aWidget As widget,
    ByVal clockwise As Boolean, ByVal revolutions As Integer)
    Dim counter As Integer
    If clockwise = True Then
        For counter = 1 To revolutions
            aWidget.SpinClockwise()
        Next counter
    Else
        For counter = 1 To revolutions
            aWidget.SpinCounterClockwise()
        Next counter
    End If
End Sub

Instrukcja If w poprzednim przykładzie sprawdza wartość parametru clockwise. Jeśli wartość to True, wywołuje metodę spinClockwiseaWidget. Jeśli wartość to False, wywołuje metodę spinCounterClockwiseaWidget. Struktura kontrolki If...Then...Else kończy się ciągiem End If.

Pętla For...Next w każdym bloku wywołuje odpowiednią metodę kilka razy równą wartości parametru revolutions .

Instrukcje przypisania

Instrukcje przypisania wykonują operacje przypisania, które składają się z pobierania wartości po prawej stronie operatora przypisania (=) i przechowywania jej w elemenie po lewej stronie, jak w poniższym przykładzie.

v = 42

W poprzednim przykładzie instrukcja przypisania przechowuje wartość literału 42 w zmiennej v.

Kwalifikujące się elementy programowania

Element programowania po lewej stronie operatora przypisania musi mieć możliwość akceptowania i przechowywania wartości. Oznacza to, że musi być zmienną lub właściwością, która nie jest readOnly lub musi być elementem tablicy. W kontekście instrukcji przypisania taki element jest czasami nazywany lvalue dla "lewej wartości".

Wartość po prawej stronie operatora przypisania jest generowana przez wyrażenie, które może składać się z dowolnej kombinacji literałów, stałych, zmiennych, właściwości, elementów tablicy, innych wyrażeń lub wywołań funkcji. Ilustruje to poniższy przykład.

x = y + z + FindResult(3)

Powyższy przykład dodaje wartość przechowywaną w zmiennej do wartości przechowywanej w zmiennej yz, a następnie dodaje wartość zwróconą przez wywołanie funkcji findResult. Łączna wartość tego wyrażenia jest następnie przechowywana w zmiennej x.

Typy danych w instrukcjach przypisania

Oprócz wartości liczbowych operator przypisania może również przypisywać String wartości, jak pokazano w poniższym przykładzie.

Dim a, b As String
a = "String variable assignment"
b = "Con" & "cat" & "enation"
' The preceding statement assigns the value "Concatenation" to b.

Można również przypisać Boolean wartości przy użyciu Boolean literału lub Boolean wyrażenia, jak pokazano w poniższym przykładzie.

Dim r, s, t As Boolean
r = True
s = 45 > 1003
t = 45 > 1003 Or 45 > 17
' The preceding statements assign False to s and True to t.

Podobnie można przypisać odpowiednie wartości do elementów Charprogramowania typu , Datelub Object danych. Można również przypisać wystąpienie obiektu do elementu zadeklarowanego jako klasy, z której tworzone jest to wystąpienie.

Instrukcje przypisania złożonego

Instrukcje przypisania złożonego najpierw wykonują operację na wyrażeniu przed przypisaniem go do elementu programowania. Poniższy przykład ilustruje jeden z tych operatorów, +=który zwiększa wartość zmiennej po lewej stronie operatora przez wartość wyrażenia po prawej stronie.

n += 1

Powyższy przykład dodaje wartość 1 do wartości n, a następnie przechowuje nową wartość w pliku n. Jest to skrócony odpowiednik następującej instrukcji:

n = n + 1

Za pomocą operatorów tego typu można wykonywać różne operacje przypisania złożonego. Aby uzyskać listę tych operatorów i więcej informacji na ich temat, zobacz Operatory przypisania.

Operator przypisania łączenia (&=) jest przydatny do dodawania ciągu na końcu już istniejących ciągów, jak pokazano w poniższym przykładzie.

Dim q As String = "Sample "
q &= "String"
' q now contains "Sample String".

Konwersje typów w instrukcjach przypisania

Wartość przypisana do zmiennej, właściwości lub elementu tablicy musi być typu danych odpowiedniego dla tego elementu docelowego. Ogólnie rzecz biorąc, należy spróbować wygenerować wartość tego samego typu danych co element docelowy. Jednak niektóre typy można przekonwertować na inne typy podczas przypisywania.

Aby uzyskać informacje na temat konwertowania między typami danych, zobacz Konwersje typów w Visual Basic. Krótko mówiąc, język Visual Basic automatycznie konwertuje wartość danego typu na dowolny inny typ, do którego się rozszerza. Konwersja rozszerzająca jest taka, która zawsze kończy się powodzeniem w czasie wykonywania i nie traci żadnych danych. Na przykład Visual Basic konwertuje Integer wartość na Double w razie potrzeby, ponieważ Integer rozszerza wartość na Double. Aby uzyskać więcej informacji, zobacz Rozszerzanie i zawężanie konwersji.

Zawężanie konwersji (tych, które nie rozszerzają się) niesie ze sobą ryzyko awarii w czasie wykonywania lub utraty danych. Możesz jawnie wykonać konwersję zawężającą przy użyciu funkcji konwersji typu lub skierować kompilator do wykonania wszystkich konwersji niejawnie, ustawiając wartość Option Strict Off. Aby uzyskać więcej informacji, zobacz Niejawne i jawne konwersje.

Umieszczanie wielu instrukcji w jednym wierszu

Można mieć wiele instrukcji w jednym wierszu oddzielonym dwukropkiem (:). Ilustruje to poniższy przykład.

Dim sampleString As String = "Hello World" : MsgBox(sampleString)

Chociaż czasami wygodna, ta forma składni sprawia, że kod jest trudny do odczytania i konserwacji. Dlatego zaleca się zachowanie jednej instrukcji w wierszu.

Kontynuowanie instrukcji w wielu wierszach

Instrukcja zwykle pasuje do jednego wiersza, ale gdy jest zbyt długa, można kontynuować ją w następnym wierszu przy użyciu sekwencji kontynuacji linii, która składa się z spacji, po której następuje znak podkreślenia (_), po którym następuje powrót karetki. W poniższym przykładzie instrukcja wykonywalna jest kontynuowana MsgBox w dwóch wierszach.

Public Sub DemoBox()
    Dim nameVar As String
    nameVar = "John"
    MsgBox("Hello " & nameVar _
        & ". How are you?")
End Sub

Kontynuacja niejawnej linii

W wielu przypadkach można kontynuować instrukcję w następnym kolejnym wierszu bez użycia znaku podkreślenia (_). Następujące elementy składni niejawnie kontynuują instrukcję w następnym wierszu kodu.

  • Po przecince (,). Na przykład:

    Public Function GetUsername(ByVal username As String,
                                ByVal delimiter As Char,
                                ByVal position As Integer) As String
    
        Return username.Split(delimiter)(position)
    End Function
    
  • Po otwartym nawiasie (() lub przed nawiasem zamykającym ()). Na przykład:

    Dim username = GetUsername(
        Security.Principal.WindowsIdentity.GetCurrent().Name,
        CChar("\"),
        1
      )
    
  • Po otwartym nawiasie klamrowym ({) lub przed zamykającym nawiasem klamrowym (}). Na przykład:

    Dim customer = New Customer With {
      .Name = "Terry Adams",
      .Company = "Adventure Works",
      .Email = "terry@www.adventure-works.com"
    }
    

    Aby uzyskać więcej informacji, zobacz Inicjatory obiektów: typy nazwane i anonimowe lub inicjatory kolekcji.

  • Po otwarciu osadzonego wyrażenia (<%=) lub przed zamknięciem osadzonego wyrażenia (%>) w literału XML. Na przykład:

    Dim customerXml = <Customer>
                          <Name>
                              <%=
                                  customer.Name
                              %>
                          </Name>
                          <Email>
                              <%=
                                  customer.Email
                              %>
                          </Email>
                      </Customer>
    

    Aby uzyskać więcej informacji, zobacz Wyrażenia osadzone w języku XML.

  • Po operatorze łączenia (&). Na przykład:

    cmd.CommandText = 
        "SELECT * FROM Titles JOIN Publishers " &
        "ON Publishers.PubId = Titles.PubID " &
        "WHERE Publishers.State = 'CA'"
    

    Aby uzyskać więcej informacji, zobacz Operatory wymienione według funkcji.

  • Po operatorach przypisania (=, &=, -=/=*=\=+=:=, , ^=, <<=, ). >>= Na przykład:

    Dim fileStream =
      My.Computer.FileSystem.
        OpenTextFileReader(filePath)
    

    Aby uzyskać więcej informacji, zobacz Operatory wymienione według funkcji.

  • Po operatorach binarnych (+, -, ModOr<=>=And<<AndAlso>>OrElseLike/<>Xor*<>^) w wyrażeniu. Na przykład:

    Dim memoryInUse =
      My.Computer.Info.TotalPhysicalMemory +
      My.Computer.Info.TotalVirtualMemory -
      My.Computer.Info.AvailablePhysicalMemory -
      My.Computer.Info.AvailableVirtualMemory
    

    Aby uzyskać więcej informacji, zobacz Operatory wymienione według funkcji.

  • Po operatorach Is i IsNot . Na przykład:

    If TypeOf inStream Is 
      IO.FileStream AndAlso
      inStream IsNot
      Nothing Then
    
        ReadFile(inStream)
    
    End If
    

    Aby uzyskać więcej informacji, zobacz Operatory wymienione według funkcji.

  • Po znaku kwalifikatora elementu członkowskiego (.) i przed nazwą elementu członkowskiego. Na przykład:

    Dim fileStream =
      My.Computer.FileSystem.
        OpenTextFileReader(filePath)
    

    Należy jednak dołączyć znak kontynuacji wiersza (_) po znaku kwalifikatora elementu członkowskiego, gdy używasz With instrukcji lub podajesz wartości na liście inicjalizacji dla typu. Rozważ przerwanie wiersza po operatorie przypisania (na przykład =) w przypadku używania With instrukcji lub list inicjowania obiektów. Na przykład:

    ' Not allowed:
    ' Dim aType = New With { .
    '    PropertyName = "Value"
    
    ' Allowed:
    Dim aType = New With {.PropertyName =
        "Value"}
    
    
    
    Dim log As New EventLog()
    
    ' Not allowed:
    ' With log
    '    .
    '      Source = "Application"
    ' End With
    
    ' Allowed:
    With log
        .Source =
          "Application"
    End With
    

    Aby uzyskać więcej informacji, zobacz With... Zakończ za pomocą instrukcji lub inicjatorów obiektów: nazwane i anonimowe typy.

  • Po kwalifikatorze właściwości osi XML (. lub .@...). Należy jednak dołączyć znak kontynuacji wiersza (_) podczas określania kwalifikatora składowego, gdy używasz słowa kluczowego With . Na przykład:

    Dim customerName = customerXml.
      <Name>.Value
    
    Dim customerEmail = customerXml...
      <Email>.Value
    

    Aby uzyskać więcej informacji, zobacz Właściwości osi XML.

  • Po znaku mniejszej niż (<) lub przed znakiem większym niż (>) podczas określania atrybutu. Również po znaku większym niż (>) podczas określania atrybutu. Należy jednak uwzględnić znak kontynuacji wiersza (_) podczas określania atrybutów na poziomie zestawu lub na poziomie modułu. Na przykład:

    <
    Serializable()
    >
    Public Class Customer
        Public Property Name As String
        Public Property Company As String
        Public Property Email As String
    End Class
    

    Aby uzyskać więcej informacji, zobacz Omówienie atrybutów.

  • Przed operatorami zapytań i po nim (Aggregate, Distinct, JoinIntoSelectOrder BySkipLetSkip WhileGroup JoinTakeTake WhileGroup ByFromInOnWhereAscendingi ).Descending Nie można podzielić wiersza między słowami kluczowymi operatorów zapytań składających się z wielu słów kluczowych (Order By, Group Join, Take Whilei Skip While). Na przykład:

    Dim vsProcesses = From proc In
                        Process.GetProcesses
                      Where proc.MainWindowTitle.Contains("Visual Studio")
                      Select proc.ProcessName, proc.Id,
                             proc.MainWindowTitle
    

    Aby uzyskać więcej informacji, zobacz Zapytania.

  • Po słowie In kluczowym w instrukcji For Each . Na przykład:

    For Each p In
      vsProcesses
    
        Console.WriteLine("{0}" & vbTab & "{1}" & vbTab & "{2}",
          p.ProcessName,
          p.Id,
          p.MainWindowTitle)
    Next
    

    Aby uzyskać więcej informacji, zobacz For Each... (Dla każdego... Następna instrukcja.

  • Po słowie From kluczowym w inicjatorze kolekcji. Na przykład:

    Dim days = New List(Of String) From
      {
       "Mo", "Tu", "We", "Th", "F", "Sa", "Su"
      }
    

    Aby uzyskać więcej informacji, zobacz Inicjatory kolekcji.

Dodawanie komentarzy

Kod źródłowy nie zawsze jest objaśniający, nawet dla programisty, który go napisał. Aby ułatwić dokumentowanie kodu, większość programistów korzysta z komentarzy osadzonych. Komentarze w kodzie mogą wyjaśnić procedurę lub konkretną instrukcję każdemu, kto czyta go lub pracuje z nim później. Program Visual Basic ignoruje komentarze podczas kompilacji i nie ma wpływu na skompilowany kod.

Wiersze komentarza zaczynają się od apostrofu (') lub REM spacji. Można je dodawać w dowolnym miejscu w kodzie, z wyjątkiem ciągu. Aby dołączyć komentarz do instrukcji, wstaw apostrof lub REM po instrukcji, a następnie komentarz. Komentarze mogą również znajdować się w osobnym wierszu. W poniższym przykładzie pokazano te możliwości.

' This is a comment on a separate code line.
REM This is another comment on a separate code line.
x += a(i) * b(i) ' Add this amount to total.
MsgBox(statusMessage) REM Inform operator of status.

Sprawdzanie błędów kompilacji

Jeśli po wpisaniu wiersza kodu wiersz jest wyświetlany z falistym niebieskim podkreśleniu (w instrukcji może pojawić się również komunikat o błędzie), w instrukcji występuje błąd składniowy. Musisz dowiedzieć się, co jest nie tak z instrukcją (patrząc na liście zadań lub umieszczając kursor nad wskaźnikiem myszy i odczytywaniem komunikatu o błędzie) i poprawić go. Dopóki nie usunięto wszystkich błędów składniowych w kodzie, nie będzie można poprawnie skompilować programu.

Termin Definicja
Operatory przypisania Zawiera linki do stron referencyjnych języka obejmujących operatory przypisania, takie jak =, *=i &=.
Operatory i wyrażenia Przedstawia sposób łączenia elementów z operatorami w celu uzyskania nowych wartości.
Instrukcje: przerywanie i łączenie instrukcji w kodzie Pokazuje, jak podzielić pojedynczą instrukcję na wiele wierszy i jak umieścić wiele instrukcji w tym samym wierszu.
Instrukcje: etykietowanie instrukcji Pokazuje, jak oznaczyć wiersz kodu.