Visual Basic/Zmienne i stałe
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
edytujDeklaracja zmiennej
edytujVisual 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
Visual Basic pozwala używać symboli o kodach 0 do 255 w nazewnictwie zmiennych. W tym zakresie znajdują się polskie znaki, tak więc zmienna "Żółć" ma prawidłową nazwę. |
Typy zmiennych
edytujZmienne 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.
Uwaga!
|
Rzutowanie
edytujCzym jest rzutowanie?
edytujPozwolę 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".
Rzutowanie to konwersja zmiennej na inny typ. |
Jeśli jesteś zaawansowanym programistą i programowałeś wcześniej w języku Visual Basic, to prawdopodobnie wiesz, że można było użyć operatora "&" zamiast "+" i rozwiązać problem szybciej. Chciałem tylko zademonstrować na czym polega rzutowanie. |
Dodatkowe metody
edytujSpró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
edytujDefiniowanie stałej
edytujStał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 '(...)
Ogólnie przyjęte konwencje języków programowania mówią, iż do identyfikacji stałych powinno używać się dużych liter. |
Dlaczego stała nie jest zmienną
edytujJak 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
edytujPodany 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