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żde stwierdzenie należy do jednej z następujących kategorii:

  • Instrukcje deklaracji, które nazywają zmienną, stałą lub procedurę, a także mogą określać typ danych.

  • Instrukcje wykonywalne, które inicjują akcje. Te instrukcje mogą wywoływać metodę lub funkcję i mogą tworzyć pętle lub rozgałęziać się w blokach 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 deklaracyjne

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 wyrażenie Sub. Wraz z instrukcją dopasowania End Sub deklaruje procedurę o nazwie applyFormat. Określa również, że applyFormat jest Public, 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, a mianowicie obiektem utworzonym z klasy Widget. 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ę spinClockwise obiektu aWidget. Jeśli wartość to False, wywołuje metodę spinCounterClockwise obiektu aWidget. Struktura sterująca If...Then...Else kończy się elementem 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 stałą wartość 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 określany jako 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. Poniższy przykład ilustruje to.

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 przypisać wartości dla Boolean, używając literału Boolean lub wyrażenia Boolean, jak ilustruje poniższy przykład.

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 elementom programowania typu Char, Date lub Object danych. Można również przypisać wystąpienie obiektu do elementu zadeklarowanego jako należący do klasy, z której to wystąpienie zostało utworzone.

Złożone przypisania

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 konkatenacji (&=) jest przydatny do dodawania ciągu znaków na końcu istniejących już ciągów znakó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 (:). Poniższy przykład ilustruje to.

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 wypowiedzi na wiersz.

Kontynuowanie oświadczenia 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 MsgBox jest kontynuowana 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ć wyrażenie w następnym wierszu bez użycia znaku podkreślenia (_). Następujące elementy składni niejawnie kontynuują instrukcję w następnym wierszu kodu.

  • Po przecince (,). 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 ()). Przykład:

    Dim username = GetUsername(
        Security.Principal.WindowsIdentity.GetCurrent().Name,
        CChar("\"),
        1
      )
    
  • Po otwartym nawiasie klamrowym ({) lub przed zamykającym nawiasem klamrowym (}). 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. 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 (&). 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 (=, &=, :=, +=, -=, *=, /=, \=, ^=, <<=, >>=). Przykład:

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

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

  • Po operatorach binarnych (+, -, /, *, Mod, <>, <, >, <=, >=, ^, >>, <<, And, AndAlso, Or, OrElse, Like, Xor) w wyrażeniu. 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 . 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 członkowskiego (.) i przed jego nazwą. Przykład:

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

    Należy jednak umieścić znak kontynuacji wiersza (_) po znaku kwalifikatora elementu członkowskiego, gdy używasz instrukcji With lub gdy podajesz wartości na liście inicjalizacji dla typu. Rozważ przerwanie wiersza po operatorze przypisania (na przykład =) w przypadku używania With instrukcji lub list do inicjalizacji obiektów. 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 Instrukcja With...End With lub Inicjatorów Obiektów: Nazwane i Anonimowe Typy.

  • Po kwalifikatorze właściwości osi XML (. lub .@ lub ...). Należy jednak dołączyć znak kontynuacji wiersza (_) podczas określania kwalifikatora składowego, gdy używasz słowa kluczowego With . 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 mniejszym "<" lub przed znakiem większym ">", gdy określasz atrybut. 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. 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 i po operatorami zapytań (Aggregate, Distinct, From, Group By, Group Join, Join, Let, Order By, Select, Skip, Skip While, Take, Take While, Where, In, Into, On, Ascending, i 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). 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 kluczowym słowie In w instrukcji For Each. 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 Instrukcja For Each...Next.

  • Po kluczowym słowie From w inicjatorze kolekcji. 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 swobodnie używa komentarzy wbudowanych. 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 i po nich następuje spacja. 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śleniem (może również pojawić się komunikat o błędzie), w poleceniu występuje błąd składniowy. Musisz dowiedzieć się, co jest nie tak z oświadczeniem (patrząc na liście zadań lub umieszczając wskaźnik myszy nad błędem i odczytując komunikat o błędzie) i poprawić ją. 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: instrukcje etykiet Pokazuje, jak oznaczyć wiersz kodu.