Visual Basic/Zmienne i stałe

Z Wikibooks, biblioteki wolnych podręczników.

Podczas przetwarzania różnych danych, wykonywania operacji matematycznych, gdzieś należy przechować wyniki takich działań. W każdym języku programowania istnieją tak zwane zmienne - są to w najprostszym wytłumaczeniu „pojemniki na dane”. W zmiennych można przechowywać dane liczbowe, tekstowe, jak również obiekty i tablice (o których będzie mowa potem).

Praca ze zmiennymi[edytuj]

Deklaracja zmiennej[edytuj]

Visual Basic jest językiem dość ścisłym i wszystkie zmienne wymagają wcześniejszego zainicjowania, zanim zostaną przypisane do nich jakiekolwiek dane. Nową zmienną tworzy się za pomocą słowa kluczowego Dim, następnie podaje się nazwę zmiennej, typ, i ewentualną wartość.

        Dim Zmienna As Byte = 1

Jeżeli zmienna już istnieje i chcesz zmienić jej wartość, wystarczy wpisać nadaną jej wcześniej nazwę i ustalić dla niej odpowiednią wartość używając operatora przypisania.

        Zmienna = 2

Możesz również zadeklarować kilka zmiennych jednocześnie, wypisując je po przecinku.

        Dim ZmiennaA As Byte, ZmiennaB As Byte, ZmiennaC As Long

Typy zmiennych[edytuj]

Zmienne zawsze mają swój typ. Oznacza to, iż nie możesz zapisać wartości tekstowej do zmiennej liczbowej, a do jednego bajtu nie możesz przypisać większej wartości niż 255. Poniżej znajduje się kompletny wykaz typów zmiennych.

Byte - jeden bajt. Przechowuje liczby w zakresie 0 - 255.

SByte - jeden bajt. Przechowuje liczby w zakresie -128 - 127.

Char - reprezentuje jeden znak (czyli np. 1 literę, jedną cyfrę, ...).

String - łańcuch znaków.

Short - oznacza liczbę 16-bitową (z zakresu -32768 - 32767).

Integer - oznacza liczbę 32-bitową (z zakresu -2147483648 - 2147483647).

Long - oznacza liczbę 64-bitową, teoretycznie przyjmie każdą wartość liczbową pomiędzy -9223372036854775808 a 9223372036854775807, lecz podanie takich ogromnych liczb powoduje przepełnienie bufora.

Boolean - jest to typ inny niż wszystkie. Zmienna takiego typu przyjmuje tylko dwie specjalne wartości - True i False.

Date i DateTime - typy wykorzystywane podczas pracy na datach.

Decimal, Double i Single - typy liczb dziesiętnych. Przyjmują wartości w takim zakresie jak typ Long, lecz mogą posiadać one przecinek dziesiętny. Jedyną różnicą pomiędzy tymi trzema typami jest precyzja obliczeń na tych zmiennych.

Object - obiekt. Jeżeli w zmiennej musisz zachować np. uchwyt do pliku, używa się tego typu zmiennych.

Rzutowanie[edytuj]

Czym jest rzutowanie?[edytuj]

Pozwolę sobie to wyjaśnić, za pomocą krótkiego kodu.

    Sub Main()
        Dim Bajt As Byte = 100
        Dim Tekst As String = "Tekst"
        Console.WriteLine(Bajt + Tekst) 'Operator "+" służy do łączenia dwóch wartości
        Console.ReadKey()
    End Sub

Spróbuj uruchomić ten program. Prawdopodobnie otrzymasz taki lub podobny komunikat:

Konwersja z ciągu "Tekst" na typ 'Double' nie jest prawidłowa.

O co może chodzić? Program dokonał próby połączenia liczby i tekstu. Taka operacja jest nieprawidłowa. Jak teraz sobie z tym poradzić? Można sprowadzić obie zmienne do wspólnego typu. Ponieważ tekst nie może być liczbą, skonwertujemy liczbę na tekst. Całość jest bardzo prosta - użyjemy metody ToString, która jest dostępna z wywołania zmiennej. Na nowo zapisana linia kodu odpowiedzialna za problem powinna wyglądać tak:

        Console.WriteLine(Bajt.ToString + Tekst)

Teraz program działa poprawnie. Wypisuje napis "100Tekst".

Dodatkowe metody[edytuj]

Spróbujemy rozwinąć nasz program o pokazywanie wyniku działania x+x, gdzie x to liczba wprowadzona przez użytkownika.

    Sub Main()
        Dim Bajt As Byte = 100
        Dim Tekst As String = "Tekst"
        Console.WriteLine(Bajt.ToString + Tekst)
        Console.WriteLine() 'Console.WriteLine bez parametru zwróci tylko przejście do nowej linii
        Console.Write("Podaj x: ")
        Dim PodanaWartość As String = Console.ReadLine 'Console.ReadLine czyta tekst dowolnej długości wprowadzony do konsoli
        Console.WriteLine()
        Console.Write("" + PodanaWartość + "+" + PodanaWartość + "=") 'Wypisujemy tekst "x+x="
        Console.WriteLine(PodanaWartość + PodanaWartość) 'Piszemy wynik
        Console.ReadKey()
    End Sub

Uruchom taki kod, i podaj dowolną liczbę. Zostaniesz przywitany we wciąż niezbyt miły sposób. Program stwierdzi, że 2+2=22, a 48+48=4848. Wyniki są nieprawidłowe, ale nie pojawił się żaden błąd. Jest to po raz kolejny problem z typem zmiennych. Tak naprawdę, program łączy wartości tekstowe, a nie dodaje liczby. Nie można użyć metody "To[...]", dlatego że takowe dla tekstu nie istnieją - nie ma ToLong, ToDouble, ToInteger, czy chociażby ToByte. Jak teraz poradzimy sobie z problemem?

Gdy należy konwertować tekst na liczbę, z pomocą przychodzi stworzona do tego funkcja CInt. Jako parametr przyjmuje dowolny obiekt, który zostanie zamieniony na numer. Jeżeli w przyszłości będzie trzeba zamienić tekst na datę, używa się funkcji CDate. Wszystkie funkcje z prefiksem "C" służą do konwersji zmiennych.

        Console.WriteLine(CInt(PodanaWartość) + CInt(PodanaWartość))

Stałe[edytuj]

Definiowanie stałej[edytuj]

Stała jest w pewnym sensie innym rodzajem zmiennej (dlaczego innym dowiesz się za chwilę). Definiuje się ją podobnie jak zmienną, zamiast słowa kluczowego Dim używa się Const.

        Const STAŁA As Byte = 1

Podobnie jak przy zmiennych, można zadeklarować kilka stałych jednocześnie.

        Const DZIESIĘĆ As Byte = 10, DWADZIEŚCIA As Byte = 20 '(...)

Dlaczego stała nie jest zmienną[edytuj]

Jak zwykle, wzbogacę przykład odpowiednim kodem.

        Dim Zmienna As Byte = 0
        Const STAŁA As Byte = 0
        Zmienna = 1 'Przypisujemy do zmiennej wartość 1
        STAŁA = 1 'Przypisujemy stałej wartość? Chyba się nie da!

Tutaj jest zawarta najważniejsza właściwość stałej. Definiuje się ją tylko raz, potem nie można jej już zmienić. Często jest to przydatne gdy potrzebujemy określić coś, czego nie powinno się zmieniać, a łatwo popełnić literówkę powodującą zmianę wartości zmiennej o podobnej nazwie.

Ćwiczenie[edytuj]

Podany jest kod aplikacji, lecz nie działa on zgodnie z zamierzeniami autora. Znajdź błąd i rozwiąż go za pomocą rzutowania. (Rozwiązanie)

    Sub Main()
        Dim Pierwsza, Druga As String
        Dim Wynik As Integer
        Const JEDYNKA As Byte = 1
        Console.Write("Pierwsza liczba: ")
        Pierwsza = Console.ReadLine
        Console.WriteLine()
        Console.Write("Druga liczba: ")
        Druga = Console.ReadLine
        Console.WriteLine()
        Wynik = CInt(Druga.ToString + Pierwsza.ToString) + JEDYNKA
        Console.WriteLine("Wynik z dodawania podanych liczb i dodaniu do tego 1: " + Wynik.ToString + ".")
        Console.ReadKey()
    End Sub