II.
Wprowadzenie do języka Visual Basic 2010
Aplikacje utworzone przy okazji poznawania środowiska Visual Studio 2010 nie wykonywały ja-
kichkolwiek działań, na które użytkownik aplikacji musiałby zareagować, albo efekty których mógłby
obejrzeć. Fakt ten nie powinien dziwić, biorąc pod uwagę, że głównym punktem zainteresowania ćwi-
czących było środowisko programistyczne. Drugi rozdział poświęcony jest wprowadzeniu podstawo-
wych elementów składni jednego z języków możliwych do wykorzystania w środowisku – Visual Ba-
sic 2010. Składnia to zbiór zasad, których przestrzeganie pozwala tworzyć poprawne zdania w da-
nym języku (ang. statement – wypowiedź). Kolejne ćwiczenie polega na zapoznaniu się ze zdaniami
umieszczonymi w projekcie aplikacji przez środowisko.
Ćwiczenie 16
Zapoznać się z elementami języka umieszczanymi automatycznie w module aplikacji
opartej na szablonie Console Application.
1. Utwórz Projekt_016 aplikacji konsolowej.
2. Zapoznaj się z treścią kodu źródłowego modułu Module1. Zwróć uwagę na zastosowany
układ tekstu oraz kolory.
Jeżeli ćwiczący nie wprowadził żadnych zmian od momentu utworzenia aplikacji to powinien za-
obserwować następujący widok:
Plik Module1.vb to pierwsza część projektu aplikacji konsolowej. Tworzona jest automatycznie
w każdym nowym projekcie tego typu. Słowa kluczowe języka Visual Basic 2010 wyróżniane są
przez edytor kolorem niebieskim. W przedstawionym kodzie są to: Module, End oraz Sub (Sub zosta-
nie objaśnione oddzielnie). Słowa kluczowe mogą zostać użyte tylko w przeznaczonym dla nich kon-
tekście i miejscu.
Słowo
Module
(Moduł, człon) wskazuje miejsce, w którym rozpoczyna się pewna część projek-
tu. Zakończenie tej części wskazywane jest słowami kluczowymi
End Module
(Koniec modułu). Mo-
duł zawiera deklaracje elementów języka potrzebnych do działania aplikacji. Aby ułatwić programiście
pracę edytor tekstowy środowiska umieszcza przed słowem
Module
rozpoczynającym deklarację
modułu graficzny przełącznik pozwalający zwinąć lub rozwinąć treść wnętrza modułu.
Rysunek 8: Okno edytora kodu źródłowego z modułem Module1.
II.1.
Zestawy (podzespoły)
Aplikacje budowane w Visual Studio 2010 wykorzystują deklaracje „cegiełek” przechowywanych
w zestawach (ang. assembly). Utworzony zestaw po ukończonej sukcesem kompilacji przyjmuje po-
stać pliku z kodem wykonywalnym. Istnieją dwa rodzaje takich plików: aplikacje oraz biblioteki dołą-
czane dynamicznie. Nazwy skompilowanych zestawów charakteryzują się rozszerzeniami: .exe
(skrót od angielskiego executable – wykonywalne) – aplikacje oraz .dll (akronim angielskiej nazwy
dynamic-link library) – biblioteki dołączane dynamicznie.
Zestawy są bardzo istotnym elementem programowania. Pozwalają one zgrupować niezbędne
do rozwiązania określonego problemu zasoby, a po kompilacji stają się „poręcznym” dodatkiem do in-
nych tworzonych zestawów.
Deklaracje zawarte w zestawie pozwalają programiście pominąć pracę koncepcyjną wykonaną
wcześniej (samodzielnie, lub przez innych programistów). Skraca to czas pracy i pozwala na wielo-
krotne wykorzystanie tego samego kodu.
Każda aplikacja konsolowa tworzona w języku Visual Basic 2010 domyślnie ma dostęp do
dwóch zestawów:
Microsoft.VisualBasic – zestaw ten jest przechowywany w pliku Microsoft.VisualBasic.dll kata-
logu platformy NETFramework,
mscorlib – w pliku mscorlib.dll katalogu platformy NETFramework
Oprócz dwóch wymienionych zestawów, które są dostępne dla aplikacji konsolowej, w chwili
tworzenia aplikacji środowisko Visual Studio 2010 dołącza wybrane inne zestawy. To właśnie te ze-
stawy wyświetlone są w węźle References okna Solution Explorer po wybraniu przycisku paska na-
rzędzi Show All Files.
Węzeł References pozwala dodawać do aplikacji także inne (potrzebne programiście) zestawy.
Jednym z zadań wykonywanych przez zestawy jest dostarczanie deklaracji rozmieszczonych w prze-
strzeniach nazw zestawu.
II.2.
Przestrzenie nazw
Wszystkie deklaracje (istniejące, tworzone współcześnie i w przyszłości) umieszczane są
w przestrzeniach nazw (ang. Namespace). Przestrzeń nazw to zbiór, z którego można odczytać zna-
czenie pewnej nazwy zadeklarowanej w tym zbiorze.
Każdy projekt aplikacji konsolowej podczas tworzenia otrzymuje własną przestrzeń nazw. Po-
siada ona nazwę identyczną z nazwą projektu i w przypadku ćwiczenia 16. jest to przestrzeń nazw
Projekt_016.
Oprócz własnej przestrzeni nazw każdy projekt aplikacji konsolowej ma dostęp do przestrzeni
nazw zawartych w zestawach mscorlib i Microsoft.VisualBasic. Dodatkowo, projekt posiada dostęp
do deklaracji umieszczonych w przestrzeniach nazw zestawów wyszczególnionych w węźle Referen-
ces projektu (patrz okno Solution Explorer). W przypadku projektu aplikacji konsolowej są to zestawy:
System, System.Data, System.Data.DataSetExtensions, System.Deployment, System.XML, Sys-
tem.Xml.Linq. Każdy z tych zestawów zawiera wiele przestrzeni nazw, a te – deklaracje.
Środowisko posiada specjalne okno Object Browser (Przeszukiwarka obiektów) służące
do przeglądu deklaracji zgromadzonych w zestawach. Kolejne ćwiczenie zapoznaje ze strukturą
przestrzeni nazw zestawu Projekt_016.
Ćwiczenie 17
Zapoznać się ze strukturą projektu wykorzystując okno Object Browser.
1. Otwórz okno Object Browser, w tym celu:
◦
rozwiń menu View i zapoznaj się z poleceniem Object Browser; polecenie posiada
ikonę –
– (odpowiedni przycisk odnajdziesz w pasku narzędzi) oraz skrót klawia-
turowy – F2,
◦
wybierz polecenie Object Browser dowolnym sposobem; zauważ, że otworzyło się
nowe okno o nazwie Object Browser.
2. Zapoznaj się z budową okna Object Browser.
3. Zapoznaj się z listą zawartą w lewej części okna. Lista zawiera przestrzenie nazw do-
stępne w środowisku (zwróć uwagę na charakterystyczne oznaczenie – {}), w tym prze-
strzeń nazw Projekt_016.
4. Rozwiń przestrzeń nazw Projekt_016. Pojawiająca się gałąź reprezentuje moduł Modu-
le1.
5. Zaznacz węzeł przestrzeni nazw Projekt_016 i zapoznaj się z treścią dolnej części okna
– informuje ona, że zaznaczony obiekt to przestrzeń nazw o nazwie Projekt_016, a do-
datkowo zawiera komunikat, że przestrzeń nazw jest członkiem (ang. member) nadrzęd-
nej nad przestrzenią nazw struktury o nazwie Projekt_016. Nazwa tej struktury jest hiper-
łączem pozwalającym wyświetlić nadrzędny element.
6. Zaznacz gałąź modułu Module1 i zapoznaj się z treścią dolnej części okna – informuje
ona, że zaznaczony obiekt to moduł o nazwie Module1 (znaczenie modyfikatora
Friend
zostanie objaśnione przy okazji innych ćwiczeń), a dodatkowo zawiera komunikat, że
moduł jest członkiem (składnikiem, składową) przestrzeni nazw Projekt_016. Nazwa
przestrzeni nazw jest hiperłączem pozwalającym wyświetlić nadrzędny element.
7. Zapoznaj się z zawartością prawej (górnej) części okna Object Browser. Okno wyszcze-
gólnia deklaracje dostępne w module Module1. Zwróć uwagę na deklarację metody (po-
staraj się zapamiętać tą nazwę oraz charakterystyczną dla tego elementu ikonę –
)
Main.
Uwaga. Nazwy metod będą wyróżnione w tekście przez pogrubioną czcionkę o stałej szeroko-
ści.
8. Zaznacz metodę Main i zapoznaj się z treścią dolnej części okna – informuje ona, że za-
znaczony obiekt to metoda typu
Sub
o nazwie Main (znaczenie modyfikatora
Public
zo-
stanie objaśnione przy okazji innych ćwiczeń), a dodatkowo zawiera komunikat, że meto-
da jest składową modułu Module1, będącego składową przestrzeni nazw Projekt_016.
Nazwa modułu, a także nazwa przestrzeni nazw są hiperłączami pozwalającymi wyświe-
tlić dany element nadrzędny.
Podsumowując, projekt posiada przestrzeń nazw, która zawiera deklaracje danego projektu.
Projekt posiada także dostęp do deklaracji zawartych w innych przestrzeniach nazw, jeśli tylko zesta-
wy zawierające te przestrzenie dołączone są do projektu.
II.3.
Moduły
Moduł jest najmniejszą jednostką organizacyjną zestawu. Ograniczany jest przez słowa kluczo-
we
Module
…
End Module
. Deklaracja modułu występuje w przestrzeni nazw. W oknie Object
Browser moduły oznaczane są ikoną –
.
Każdy moduł występuje tylko w jednym pliku projektu. Jest to cecha, która znacząco odróżnia
moduł od przestrzeni nazw, która może obejmować deklaracje zawarte w wielu plikach.
W jednym pliku mogą występować deklaracje wielu modułów, jednak praktyka uczy, że łatwiej
zarządzać modułami zadeklarowanymi w oddzielnych plikach. Do projektu można dodać dowolną
liczbę modułów. Warto przy tym nadawać plikom nazwy określające znaczenie zestawu deklaracji za-
wartych w pliku. Kolejne ćwiczenie pokazuje sposób dodawania do projektu kolejnego modułu.
Ćwiczenie 18
Dodać do Projekt_016 kolejny moduł. Zapoznać się z różnicami pomiędzy zawartością
pliku Module1.vb oraz dodanego pliku.
1. Rozwiń menu Project.
2. Zapoznaj się z poleceniami rozpoczynającymi się od słowa Add (Dodaj); szczególną
uwagę zwróć na polecenie Add Module (Dodaj moduł) -
. Nie wybierając polecenia po-
rzuć menu Project.
Uwaga. Wprawdzie „złoty rozbłysk” w lewym, górnym narożniku ikony jest słabo widoczny, ale
warto zapamiętać, że występuje w ikonach poleceń tworzących nowe elementy.
3. Przejdź do okna Solution Explorer i zaznacz węzeł Projekt_016.
4. Rozwiń menu kontekstowe węzła Projekt_016 (oprócz prawego klawisza myszy można
także użyć przycisku
klawiatury, gdy zaznaczony jest obiekt, dla którego ma zo-
stać wyświetlone menu kontekstowe).
5. Wybierz grupę poleceń Add i zauważ, że również tutaj znajduje się (oprócz innych) pole-
cenie Module.
6. Dodaj do Projekt_016 nowy moduł o nazwie Dodatkowy, w tym celu:
◦
uruchom jedno z poleceń tworzących nowy moduł poznanych w punktach 2. i 5.
ćwiczenia; pojawia się okno Add New Item (Dodaj nowy element), w pasku tytuło-
wym okna znajduje się również nazwa projektu, do którego dodawany jest nowy
element,
◦
zapoznaj się z budową okna; zauważ, że jest ono niemal identyczne z oknem
New Project poznanym we wcześniejszych ćwiczeniach,
◦
zauważ, że środowisko „wybrało” odpowiedni do wybranego polecenia szablon
(Module),
◦
zmień nazwę dodawanego modułu (pole tekstowe Name) na Dodatkowy,
◦
zatwierdź zmiany przyciskiem Add.
7. Zauważ, że w oknie Solution Explorer pojawił się nowy plik – Dodatkowy.vb (rozszerze-
nie .vb zostało dodane automatycznie), a w oknie edytora otwarty jest kod źródłowy mo-
dułu Dodatkowy.
8. Postaraj się, przełączając wyświetlanie między zakładkami Module1.vb i Dodatkowy.vb,
zauważyć różnice między dwoma modułami projektu Projekt_016.
Uwaga. Jeśli okno edytora posiada więcej niż jedną zakładkę, to menu kontekstowe każdej
z nich zawiera polecenia: New Horizontal Tab Group (Nowa grupa zakładek – podział poziomy) oraz
New Vertical Tab Group (Nowa grupa zakładek – podział pionowy). Po wybraniu jednego z tych pole-
ceń okno edytora zostaje podzielone na części. W jednej z nich wyświetlona jest wskazana zakładka,
a w drugiej pozostałe zakładki. Mechanizm ten ułatwia porównywanie kodu źródłowego zawartego
w dwóch plikach. Zakładki można rozdzielać do chwili, gdy w danej części okna pozostanie tylko jed-
na zakładka. Każdą zakładkę można przenieść do innej grupy (po podziale pojawia się w menu kon-
tekstowym zakładki polecenie Move To Next Tab Group [Przenieś do następnej grupy zakładek]).
Okno edytora można dzielić tylko w jednym kierunku – jeśli pierwszy podział przeprowadzono w pio-
nie, to wszystkie następne możliwe są jedynie w pionie (podobnie w poziomie).
Co do zasadniczej budowy, moduły są identyczne. Wyróżnia je nazwa (Module1 i Dodatkowy).
Łatwo jednak zauważyć, że Module1 zawiera automatycznie dodaną przez środowisko treść –
Sub
Main …
End
Sub
. Main (główny), to metoda, od której rozpoczyna się wykonywanie aplikacji konso-
lowej. Tym samym Module1 stanowi moduł startowy aplikacji, co byłoby warte odzwierciedlenia w na -
zwie tego modułu.
Do zmiany nazwy modułu można wykorzystać okno Solution Explorer w identyczny sposób, jak
to się robi w Exploratorze Windows (polecenie Rename [Zmień nazwę] z menu kontekstowego).
Zmianę nazwy modułu Module1 na Startowy pozostawia się ćwiczącym do samodzielnego wykona-
nia. Tym razem należy pamiętać o dodaniu rozszerzenia .vb, które środowisko automatycznie opuści
tworząc nazwę modułu.
II.4.
Konsola
Moduł Startowy (przed zmianą nazwy – Module1) zawiera metodę typu
Sub
o następującej
składni (przypomnijmy, że składnia to zbiór zasad pozwalających tworzyć poprawne zdania w danym
języku):
Sub Main()
End Sub
Uprzedzając treści następnych rozdziałów należy w tym miejscu powiedzieć, że występują dwa
rodzaje metod:
Sub
oraz
Function
.
Słowo kluczowe
Sub
(skrót angielskiego Subroutine – podprogram) oznacza początek procedu-
ry. Koniec procedury oznaczony jest słowami kluczowymi
End Sub
. Metody służą do grupowania
zdań języka. Metoda-procedura Main posiada szczególne znaczenie. Aplikacja, po uruchomieniu
przez użytkownika, rozpoczyna pracę od wykonywania rozkazów (instrukcji) zawartych w tej właśnie
procedurze. W kolejnym ćwiczeniu do procedury Main zostanie dodana instrukcja powodująca wypi-
sanie tekstu w oknie konsoli.
Ćwiczenie 19
Zaprogramować wyświetlenie w oknie konsoli tekstu „Witaj”.
1. Wybierz zakładkę Startowy.vb powodując wyświetlenie okna edytora kodu źródłowego
modułu Startowy.
2. Ustaw kursor tekstowy w pustym wierszu pomiędzy początkiem a końcem procedury
Main (jeśli kod źródłowy nie był edytowany, to wiersz posiada numer 4).
3. Wpisz następujący tekst:
System.Console.Write("Witaj")
4. Przesuń kursor do innego wiersza kodu źródłowego i zauważ, że edytor dokonał odpo-
wiednich zmian w układzie tekstu:
Module Module1
Sub Main()
System.Console.Write("Witaj")
End Sub
End Module
5. Skompiluj projekt (Build\Build Projekt_016, lub przycisk
dodanego paska narzędzi
Build).
6. Uruchom aplikację bez debugowania (Ctrl+F5, lub przycisk
dodany do paska narzę-
dzi Standard). Zauważ, że pojawiło się okno konsoli:
7. Zakończ działanie aplikacji naciskając dowolny klawisz.
Zdanie – System.Console.Write("Witaj") – to instrukcja języka Visual Basic 2010. Kompilator po-
trafi przetworzyć taką instrukcję na kod wykonywalny. Skąd Projekt_016 „zna” użytą w ćwiczeniu in-
strukcję? Kolejne ćwiczenie pokazuje w jaki sposób odnaleźć źródło informacji.
Ćwiczenie 20
Odnaleźć położenie deklaracji metody Write przy użyciu okna Object Browser.
1. Rozwiń menu kontekstowe, gdy kursor myszy znajduje się wewnątrz słowa Write.
2. Zapoznaj się z poleceniami menu kontekstowego. Wybierz polecenie Go To Definition
(Przejdź do deklaracji). Edytor wyświetla okno Object Browser. Zaznaczony obiekt to po-
szukiwana metoda Write.
3. Zapoznaj się z oknem informacji o zaznaczonym obiekcie. Jest to metoda-procedura
o nazwie Write (znaczenie słowa kluczowego
Shared
zostanie objaśnione przy okazji
innych ćwiczeń). Jest ona składnikiem elementu Console, który jest składową przestrzeni
nazw System. Zgodnie ze skróconym opisem (ang. Summary) metoda wypisuje łańcuch
tekstowy do standardowego strumienia wyjściowego, czyli monitora konsoli.
W tym miejscu konieczne jest określenie czym jest konsola. Otóż jest to urządzenie wejścia/wyj-
ścia (wprowadzania danych/wyprowadzania wyników) składające się współcześnie z klawiatury i mo-
nitora. Zatem klawiatura i monitor danego zestawu komputerowego stanowią łącznie jego konsolę.
Konsola pracuje w trybie tekstowym, to znaczy dane wprowadzane są w postaci tekstu i wyniki
wyprowadzane są również w postaci tekstu. Konsola o nazwie Console zadeklarowana jest w prze-
strzeni nazw System zestawu mscorlib. Posiada ona (zawiera) metody pozwalające wyprowadzać
tekst do konsoli (czyli na ekran monitora) oraz wprowadzać tekst z konsoli (czyli z klawiatury).
Tekst System.Console.Write("Witaj") nazywa się wywołaniem (ang. call) metody. Wywołanie
procedury jest najprostszym zdaniem (instrukcją) języka Visual Basic 2010. Wydaje się, że wprowa-
dzanie tak długich zdań jest dosyć czasochłonne. Pomocna jest w tym przypadku znajomość prze-
strzeni nazw. Otóż okazuje się, że deklaracja elementu Console występuje wyłącznie w przestrzeni
nazw System, a ta jest „znana” każdemu projektowi. Jeśli pominięcie nazwy przestrzeni (a nawet jej
składowych) nie prowadzi do niejednoznaczności to można ją pominąć wraz z kropką. Pokaże to ko-
lejne ćwiczenie.
Ćwiczenie 21
Wykorzystać znajomość przestrzeni nazw System przez Projekt_016 do skrócenia
wywołania metody Write.
1. Usuń z instrukcji System.Console.Write("Witaj") nazwę przestrzeni System wraz z krop-
ką.
2. Skompiluj projekt i uruchom aplikację.
3. Zakończ działanie aplikacji.
Aplikacja działa poprawnie. Ćwiczący powinien samodzielnie sprawdzić, czy deklaracja metody
Console.Write jest tą samą, którą Object Browser pokazywał wcześniej, wykonując ponownie ćwicze-
nie 20.
Deklaracja metody o nazwie Write występuje w więcej niż jednej przestrzeni nazw. Dlatego,
aby kompilator mógł jednoznacznie określić, o którą z nich chodzi konieczne jest użycie, przed na-
zwą metody, nazwy elementu zawierającego jego deklarację, w tym przypadku Console.
W wywołaniu metody Write konsoli tekst, który miał zostać wyprowadzony na ekran został za-
pisany wewnątrz nawiasów okrągłych. Nawiasy umieszczane po nazwie metody wskazują listę argu-
mentów metody. Argumenty to wartości wpływające na działanie metody. Argument o wartości "Witaj"
to tekst. Język Visual Basic 2010 używa określenia łańcuch tekstowy (ang. string). Dowolny łańcuch
tekstowy wyróżnia się poprzez objęcie go cudzysłowem.
Przykłady łańcuchów tekstowych.
"Witaj"
"Siedem razy dziewięć to sześćdziesiąt trzy"
Klawiatura i monitor powiązane w konsolę posiadają charakterystyczny element zwany kurso-
rem tekstowym – miejsce wyprowadzenia kolejnego znaku.
Ponadto znaki w konsoli pogrupowane są w wiersze. Przejście do następnego wiersza realizuje
się naciskając klawisz Enter. Powoduje to utworzenie nowego wiersza (ang. Line Feed – dosłownie
zjedz linię) i powrót kursora do początku linii (Carriage Return – dosłownie powrót karetki). Metoda
Write nie realizuje tych dwóch etapów, dlatego tekst wyprowadzany do konsoli przez środowisko Vi-
sual Studio 2010 – Aby kontynuować, naciśnij dowolny klawisz – pojawia się tuż po słowie Witaj.
W kolejnym ćwiczeniu użyta zostanie metoda realizująca również tworzenie nowego wiersza.
Ćwiczenie 22
Zapoznać się z użyciem metody WriteLine konsoli.
1. Dodaj, przed wywołaniem Console.Write("Witaj"), pusty wiersz i umieść w nim kursor tek-
stowy.
2. Wpisz następujący tekst:
Console.WriteLine("Tekst Witaj pojawi się w następnym wierszu konsoli")
3. Skompiluj projekt i uruchom aplikację.
4. Zapoznaj się z zawartością konsoli i zakończ działanie aplikacji.
Tym razem konsola wyglądała następująco:
Widać, że metoda WriteLine konsoli, po wypisaniu tekstu będącego jej argumentem, tworzy
nowy wiersz. Obie metody wykorzystywane są w aplikacjach konsolowych. Posiadają one wiele wer-
sji służących do wyprowadzania w postaci tekstu różnych wartości: liczb, znaków, wartości logicz-
nych.
Warto w tym miejscu wspomnieć, że konsola Console posiada również inne metody, np.:
Beep – powoduje odtworzenie dźwięku przez głośnik zestawu komputerowego,
Rysunek 9: Pozioma kreska na końcu wiersza, to kursor tekstowy.
Clear – powoduje wyczyszczenie okna konsoli – usuwa teksty wyprowadzone wcześniej przez
metody Write i WriteLine oraz te wprowadzone przez użytkownika.
Metody konsoli będą wprowadzane w miarę potrzeb kolejnych ćwiczeń
II.5.
Reprezentacja danych, stałe i zmienne
Reprezentacja danych w pamięci operacyjnej
Najmniejszą porcją informacji jest jeden bit. Informacje przechowywane w bitach nazywa się bi-
narnymi, gdyż bit może przechowywać (i prezentować) jeden z dwóch (bi-) stanów. Mówi się, że bit
jest ustawiony (włączony), gdy przechowuje wartość 1 (jeden), a wyłączony, gdy przechowuje war-
tość 0 (zero).
Pamięć operacyjna podzielona jest na większe porcje składające się z ośmiu bitów. Taka porcja,
to bajt (ang. byte). Każdy bit bajta może być w jednym z dwóch, opisanych wcześniej, stanów 0/1.
Patrząc na zestaw bitów w bajcie:
00000000
B
= 0
D
(B – binarnie, D – dziesiętnie)
pierwszy od prawej nazywa się najmłodszym, a pierwszy od lewej najstarszym, bitem.
Jeśli ustawimy najmłodszy bit bajta:
00000001
B
= 1
D
to liczba binarna ma wartość 1. Jeśli zamiast najmłodszego ustawimy kolejny starszy bit:
00000010
B
= 2
D
to liczba binarna ma wartość 2. Jeśli ustawimy dwa najmłodsze bity:
00000011
B
= 3
D
to liczba binarna ma wartość 3. Jeśli ustawimy wszystkie bity:
11111111
B
= 255
D
to liczba binarna ma wartość 255.
Łatwo stąd wywnioskować, że jeśli do przechowywania wartości liczbowej zarezerwuje się
w pamięci operacyjnej jeden bajt, to można w tym bajcie przechowywać wartości od 0 do 255.
Rezerwacji dokonuje się poprzez deklarację:
Dim bytMałaLiczbaNieujemna As Byte
Bajt pamięci operacyjnej o nazwie bytMałaLiczbaNieujemna może przechowywać wartości od 0
do 255. Taki nazwany obszar pamięci operacyjnej, w którym można przechowywać jakąś wartość na -
zywa się zmienną. Powyższa deklaracja oznacza zatem utworzenie zmiennej bytMałaLiczbaNieujem-
na.
Zmienna bytMałaLiczbaNieujemna nie może przechowywać np. liczby -12. Aby rozwiązać ten
problem można inaczej interpretować bity bajta. Umowa określająca interpretację bitów w bajcie jest
następująca: najstarszy bit jest bitem znaku. Jeśli jest wyłączony, to oznacza, że liczba jest dodatnia,
a jeśli włączony – ujemna.
Przykładowo.
00000001
B
= 1
D
(podobnie jak przy poprzedniej interpretacji)
10000001
B
=-1
D
(bo najstarszy bit wskazuje, że liczba jest ujemna)
W związku z powyższym największą liczbą dodatnią, którą można przechowywać, przy takim
sposobie interpretacji jest:
01111111
B
= 127
D
a najmniejszą:
10000000
B
= -128
D
(najstarszy bit występuje w podwójnej roli – jest bitem znaku, ale także re-
prezentuje liczbę 128).
Sposoby interpretacji bitów w pamięci operacyjnej określają typ zmiennej. Przykładowo, pierw-
szy sposób interpretacji bitów bajta definiuje typ
Byte
, drugi –
SByte
. (Nazwy typów wyróżnione będą
czcionką pochyłą)
Widać wyraźnie, że nie wszystkie wartości typu
Byte
mogą być przechowywane w zmiennych
typu
SByte
(liczby większe niż 127), oraz, że nie wszystkie wartości typu
SByte
mogą być przechowy-
wane w zmiennych typu
Byte
(liczby mniejsze niż 0).
Należy podkreślić fakt, że bajt zarezerwowany na zmienną typu
Byte
, fizycznie nie różni się ni-
czym od bajta zarezerwowanego na zmienną typu
SByte
. Program „musi jednak pamiętać”, że
zmienne są różnych typów i dlatego interpretacja wartości każdorazowo musi być inna.
Podobnie jest z tekstami przechowywanymi w pamięci operacyjnej. Załóżmy, dla uproszczenia,
że każda litera może być przechowywana w jednym bajcie pamięci operacyjnej. Ale pamiętamy, że
bajt nie przechowuje znaków, tylko wartości ośmiu bitów – czyli liczbę. Skoro tak, to każdemu znako-
wi należy przyporządkować liczbę np.:
Znak
!
"
#
$
%
&
'
(
)
*
+
,
-
.
/
0
1
2
Liczba 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50
Jeśli dla zmiennej przechowującej znaki zarezerwujemy trzy bajty i będą one przechowywać
wartości:
Binarnie
00110001 00110000 00100100
Dziesiętnie
49
48
36
to ten łańcuch znaków będziemy interpretować jako 10$.
Aby początkujący programista nie zapominał o fakcie istnienia różnych typów danych postuluje
się wyłączenie mechanizmu automatycznej konwersji danych z jednych typów na inne. Aby wyłączyć
ten mechanizm należy posłużyć się opcją Strict. Jeśli opcja Strict jest włączona, to konieczne jest
użycie jednej z funkcji konwersji. Jeśli opcja jest wyłączona (Off), to kompilator automatycznie doda
do kodu wykonywalnego instrukcje konwertujące wartość jednego typu na inny. W nielicznych przy-
padkach może to prowadzić do błędów w działaniu aplikacji.
Drugim zaleceniem dotyczącym typów jest wymuszenie na ćwiczących jawnego deklarowania
zmiennych wraz z typami. Do uzyskania takiego efektu służy opcja Explicit. Jeśli jest wyłączona (Off),
to programista nie musi jawnie deklarować zmiennej. Włączenie opcji Strict oraz Explicit będzie za -
daniem kolejnego ćwiczenia.
Ćwiczenie 23
Włączyć opcję Strict oraz Explicit dla kodu pisanego w języku Visual Basic 2010.
1. Uruchom okno dialogowe Options (Tools\Options).
2. Rozwiń węzeł Projects and Solutions, a następnie wybierz podwęzeł VB Defaults
(domyślne dla Visual Basic).
3. Ustal wartość Strict oraz Explicit na On.
4. Zamknij okno dialogowe Options.
Stałe
Stała to miejsce w pamięci operacyjnej komputera, które przechowuje niezmienną wartość.
Wartość nie zmienia się od momentu utworzenia stałej, aż do momentu jej zniszczenia. Deklaracja
stałej składa się ze słowa kluczowego
Const
, nazwy stałej, określenia jej typu oraz przypisania war-
tości:
Const NazwaStałej As NazwaTypuStałej = WartośćStałej
Przypomnijmy, że pamięć operacyjna składa się z bajtów. Każdy bajt ma osiem pozycji binar-
nych – bitów. Może zatem reprezentować jedną z wartości przedziału <00000000
B
, 11111111
B
> (B po-
nownie oznacza, że liczby podane są w systemie dwójkowym – binarnym), w zapisie dziesiętnym
przedział ten przyjmie postać <0, 255>. Wartości spełniające warunek przynależności do takiego
przedziału, to wartości typu
Byte
. Nazwa
Byte
określa, że wszystkie stałe i zmienne tworzone w
oparciu o ten typ mogą przechowywać tylko wartości całkowite, nieujemne i mniejsze niż 256. Kolej-
ne ćwiczenie pokaże sposób definiowania stałej typu
Byte
.
Ćwiczenie 24
Zdefiniować w procedurze Main stałą o nazwie bytLiczbaSenatorów typu Byte o wartości
100.
1. Dodaj, przed wywołaniem Console.WriteLine, pusty wiersz i umieść w nim kursor teksto-
wy.
2. Wpisz tekst:
Const bytLiczbaSenatorów As Byte = 100
3. Skompiluj projekt.
Słowo kluczowe
Const
(skrót od angielskiego constant – stały) rozpoczyna deklarację stałej.
Nazwa stałej powinna odzwierciedlać jej typ oraz zastosowanie. Przyjęło się, że przedrostek wskazu -
je typ stałej (zmiennej) i składa się z małych liter, a reszta nazwy wskazuje zastosowanie stałej
(zmiennej) i składa się ze słów rozpoczynających się wielką literą. Jest to tzw. camelStyle. Nazwa
musi zaczynać się od litery i może zawierać cyfry oraz znak podkreślenia.
Przykłady poprawnych nazw.
bytAlaMaKota
bytKota_9
Po nazwie występuje określenie typu stałej (zmiennej) składające się ze słowa kluczowego
As
(Jako) i nazwy typu (np.
Byte
). Dalszy ciąg deklaracji to instrukcja przypisania składająca się z opera-
tora przypisania (znak równości) oraz wartości przypisywanej stałej.
Od momentu wykonania przez aplikację deklaracji stałej, aż do likwidacji stałej będzie ona po-
siadała przypisaną jej wartość. Oznacza to, że do „śmierci” stała bytLiczbaSenatorów posiadać bę-
dzie wartość 100. Wartość taką można wykorzystać w działaniach aplikacji. Kolejne ćwiczenie poka-
że użycie wartości stałej jako argumentu metody WriteLine konsoli.
Ćwiczenie 25
Użyć wartości stałej jako argumentu metody WriteLine.
1. Dodaj po deklaracji stałej bytLiczbaSenatorów pusty wiersz.
2. Wywołaj w nim metodę Write konsoli podając jako argument łańcuch tekstowy:
"Liczba senatorów w Senacie RP wynosi: "
3. Dodaj następny pusty wiersz i wywołaj w nim metodę WriteLine konsoli podając jako ar -
gument stałą bytLiczbaSenatorów.
Przykład.
Console.WriteLine(bytLiczbaSenatorów)
4. Skompiluj projekt i uruchom aplikację.
5. Zapoznaj się z zawartością konsoli i zakończ działanie aplikacji.
Widać, że stała bytLiczbaSenatorów przechowuje wartość 100. Programista nie musi pamiętać,
że Senat RP liczy stu członków, wystarczy, że dowie się ilu ich jest i utworzy stałą o odpowiedniej
wartości. Każdorazowo gdy napisze w kodzie źródłowym nazwę bytLiczbaSenatorów aplikacja pobie-
rze z pamięci operacyjnej wartość tej stałej i użyje konkretnej wartości.
Zmienne
Zmienne tworzone są podobnie jak stałe, ale ich wartość może być zmieniana w trakcie wyko-
nywania aplikacji. deklarację zmiennej wskazuje słowo kluczowe
Dim
(skrót od angielskiego dimen-
sion – wymiar, rozmiar). Kolejne ćwiczenie obrazuje deklarowanie zmiennej.
Ćwiczenie 26
Zdefiniować w procedurze Main zmienną bytKadencjaSenatora typu Byte.
1. Dodaj na początku procedury Main pusty wiersz i umieść w nim kursor tekstowy.
2. Wpisz tekst:
Dim bytKadencjaSenatora As Byte
3. Skompiluj projekt.
Deklaracja zmiennej może również zawierać instrukcję przypisania:
Dim bytKadencjaSenatora As Byte = 2
W takim przypadku liczba 2 jest wartością początkową zmiennej bytKadencjaSenatora. Jeśli in-
strukcja przypisania nie występuje, to dla zmiennych typu
Byte
domyślną wartością początkową
jest 0. Wartość zmiennej może być użyta w programie tak, jak wartość stałej, a dodatkowo może być
zmieniana przy użyciu instrukcji przypisania.
II.6.
Instrukcja przypisania
Instrukcja przypisania (ang. assignment) jest najczęściej, obok instrukcji wywołania (call), stoso-
waną instrukcją. Jej składnia jest następująca:
Zmienna = Wyrażenie
Rysunek 10: Nazwa stałej, zastąpiona została jej wartością.
Wykonanie instrukcji przypisania polega na obliczeniu wartości wyrażenia (może to być np. do-
dawanie) po prawej stronie znaku równości, a następnie umieszczenie obliczonej wartości w pamięci
operacyjnej przydzielonej zmiennej, której nazwa występuje po lewej stronie znaku równości
(np. Zmienna).
Przykład.
bytKadencjaSenatora = 1 + 1
Powyższa instrukcja przypisania zadziała w następujący sposób. Najpierw zostanie obliczona
wartość wyrażenia 1+1. Wynik wyrażenia, czyli 2, zostanie przypisany zmiennej bytKadencjaSenato-
ra. Niezależnie od tego jaka była poprzednia wartość zmiennej, po wykonaniu instrukcji przypisania
zmienna ma wartość 2. Kolejne ćwiczenie pokazuje wykorzystanie instrukcji przypisania do zmiany
wartości zmiennej.
Ćwiczenie 27
Użyć instrukcji przypisania do zmiany wartości zmiennej. Efekty zmian wyświetlić w
konsoli.
1. Dodaj po deklaracji zmiennej bytKadencjaSenatora pusty wiersz i umieść w nim kursor
tekstowy.
2. Wywołaj w dodanym wierszu metodę Write konsoli podając jako argument łańcuch tek-
stowy:
"Pan X nie był jeszcze senatorem. Liczba jego kadencji w Senacie to: "
3. Dodaj następny pusty wiersz i wywołaj w nim metodę WriteLine konsoli podając jako ar -
gument zmienną bytKadencjaSenatora.
Przykład.
Console.WriteLine(bytKadencjaSenatora)
4. Dodaj następny pusty wiersz i przypisz w nim zmiennej bytKadencjaSenatora wartość 1.
Przykład.
bytKadencjaSenatora = 1
5. Dodaj następny pusty wiersz i wywołaj w nim metodę Write konsoli podając jako argu-
ment łańcuch tekstowy:
"Pan Y był już senatorem. Liczba jego kadencji w Senacie to: "
6. Dodaj następny pusty wiersz i wywołaj w nim metodę WriteLine konsoli podając jako ar -
gument zmienną bytKadencjaSenatora.
7. Skompiluj projekt i uruchom aplikację.
8. Zapoznaj się z zawartością konsoli i zakończ działanie aplikacji.
II.7.
Typy danych
Stałe i zmienne mogą przechowywać wartości spotykane w rzeczywistych zadaniach. Typ
Byte
pozwala wprawdzie przechować liczbę senatorów, ale liczba posłów Sejmu RP wynosi 460, a to jest
liczba większa niż 255. Typ
Byte
nie nadaje się zatem do tworzenia zmiennych, które mają przecho-
wywać większe liczby całkowite. Długości skoków Adama Małysza nie przekroczyły 255 metrów, ale
wyznaczane są z dokładnością do 0,5 metra. Typ
Byte
pozwala przechowywać tylko liczby całkowite,
nie nadaje się zatem do przechowywania wyników skoków narciarskich.
Nie wyczerpując zagadnienia można napisać, że ogólnie typy dzielą się na liczbowe i tekstowe.
Dodatkowo występują typy do przechowywania wartości logicznych oraz dat. Wszystkie wymienione
typy zdefiniowane są w przestrzeni nazw System i są zawsze dostępne dla projektów.
Typy liczbowe
Do przechowywania liczb zdefiniowano typy całkowite i rzeczywiste.
Całkowite to:
Byte
Int16
Int32
Int64
Typy rzeczywiste dzielą się na zmiennoprzecinkowe i stałoprzecinkowe.
Zmiennoprzecinkowe to:
Single
Double
Stałoprzecinkowy –
Decimal
.
Każdy z wymienionych typów pozwala tworzyć stałe oraz zmienne przydatne do odmiennych
zastosowań i wymaganej dokładności obliczeń.
Typy tekstowe
Zdefiniowano dwa typy tekstowe:
Char
– do przechowywania pojedynczego znaku
String
– do przechowywania łańcucha znaków
Pozostałe typy
Zdefiniowano również typ
Boolean
służący do przechowywania wartości dwustanowych takich
jak Prawda/Fałsz, Włączone/Wyłączone, Tak/Nie itp.
Do przechowywania dat (chwil) z dokładnością do jednej milisekundy zdefiniowano typ
DateTi-
me
.
II.8.
Pobieranie danych od użytkownika
Aplikacja Projekt_016 nie pobiera danych z zewnątrz, wszystko czego potrzebuje do pracy za-
wiera w kodzie źródłowym. Użytkownik takiej aplikacji nie ma wpływu na działanie aplikacji i otrzymu-
je zawsze taki sam efekt.
Konsola zawiera metody-funkcje (ang. function) Read i ReadLine, które pozwalają na pobiera-
nie danych od użytkownika. Funkcje te odczytują znaki wprowadzone do monitora konsoli przy uży-
ciu klawiatury. Metody typu
Function
różnią się od metod typu
Sub
tym, że zwracają wynik, można
je zatem traktować jak wyrażenie i umieszczać po prawej stronie operatora przypisania. Kolejne ćwi-
czenie pokaże schemat postępowania przy pobieraniu danych.
Ćwiczenie 28
Utworzyć nowy projekt aplikacji konsolowej, której działanie polega na pobraniu
od użytkownika jego imienia i wyświetleniu go w konsoli.
1. Utwórz nowy Projekt_028 aplikacji konsolowej.
2. Użyj metody WriteLine konsoli, aby zachęcić użytkownika aplikacji do wpisania w konsoli
swojego imienia i zatwierdzenia go klawiszem Enter.
Przykładowy tekst zachęty.
"Wpisz swoje imię i naciśnij Enter."
3. Zadeklaruj zmienną strImię typu String.
Przykład.
Dim strImię As String
4. Wykorzystaj metodę ReadLine konsoli do pobrania tekstu wprowadzonego do konsoli
przez użytkownika. Wynik metody-funkcji ReadLine przypisz zmiennej strImię
Przykład.
strImię = Console.ReadLine()
5. Wykorzystaj metody Write i WriteLine konsoli tak, aby w konsoli pojawił się tekst:
Twoje imię to: ImięUżytkownika
Uwaga. Imię użytkownika symbolizuje zawartość zmiennej strImię.
6. Skompiluj projekt i uruchom aplikację. Po pojawieniu się zachęty wpisz swoje imię i naci-
śnij Enter.
7. Zapoznaj się z zawartością konsoli i zakończ działanie aplikacji.
Sekwencja instrukcji wykorzystanych w ćwiczeniu może być podobna do poniższej:
Console.WriteLine("Wpisz swoje imię i naciśnij Enter.")
Dim strImię As String
strImię = Console.ReadLine
Console.Write("Twoje imię to: ")
Console.WriteLine(strImię)
Działanie aplikacji stosunkowo łatwo prześledzić. Po pierwsze aplikacja wypisuje tekst zachęty.
Następnie tworzy zmienną, która zostanie użyta do przechowywania łańcucha tekstowego (imię jest
łańcuchem znaków). Instrukcja przypisania użyta w trzecim wierszu działa tak, jak to wcześniej opi-
sano. Najpierw wykonane jest obliczenie wartości wyrażenia po prawej stronie znaku przypisania –
w tym przypadku jest to funkcja ReadLine, która odczytuje z konsoli znaki, aż do końca bieżącego
wiersza, czyli imię użytkownika – następnie odczytany łańcuch tekstowy przypisywany jest zmiennej
strImię. Dalszy ciąg nie wnosi nic nowego. Aplikacja wypisuje w konsoli tekst, a następnie zawartość
zmiennej strImię.
Dwa ostatnie wiersze można zastąpić jednym o postaci:
Console.WriteLine("Twoje imię to: {0}", strImię)
W tym przypadku łańcuch tekstowy – pierwszy argument metody WriteLine – to tzw. format.
W formacie występują objęte nawiasami klamrowymi liczby. W chwili wykonywania metody nawias
wraz z liczbą zastępowany jest wartością następnego (lub następnych) argumentu (argumentów) me-
tody. Kolejne argumenty oddziela się przecinkami.
Przykład.
Console.WriteLine("Miejscowość {0} liczy {1} mieszkańców", strMiejscowość, intLudzi)
W przykładzie, znaki {0} zostaną zastąpione wartością zmiennej strMiejscowość, a znaki {1}
wartością zmiennej intLudzi.
Rysunek 11: Wprowadzanie danych przez użytkownika aplikacji.
II.9.
Operatory, funkcje konwersji oraz funkcje działające na łańcuchach znaków
Operatory
Po prawej stronie instrukcji przypisania występują wyrażenia służące do obliczenia wartości wy-
niku. Wyrażenia budowane są ze stałych, zmiennych i operatorów. W odniesieniu do liczb najczęściej
używane operatory to (strzałka wskazuje wynik operacji):
+
(plus) operator dodawania, 2 + 3 5
–
(minus) operator odejmowania, 5 – 3 2
*
(gwiazdka) operator mnożenia, 3 * 4 12
/
(slash) operator dzielenia rzeczywistego, 3 / 4 0,75
\
(backslash) operator dzielenia całkowitego, 18 \ 7 2 (wynik jest liczbą całkowitą)
^
(carret) operator potęgowania, 3 ^ 4 81
Mod
(modulo) operator reszty z dzielenia, 22 Mod 7 1
Do łączenia tekstów stosuje się operator konkatenacji
&
.
Przykład. Zakłada się, że zmienna strNazwisko przechowuje tekst "Kowalski".
"Pan " & strNazwisko "Pan Kowalski"
Funkcje konwersji
W trakcie wykonywania ćwiczenia 23. dla opcji Explicit oraz Strict została ustalona wartość On.
Włączenie tych opcji zostało podyktowane względami dydaktycznymi i pozwala zwrócić uwagę ćwi-
czących na istotne zagadnienia programowania. Opcja Explicit w stanie On powoduje, że każda
zmienna, przed pierwszym użyciem musi być jawnie zadeklarowana, to znaczy musi zostać określo-
ny jej typ.
Przykład.
Dim ZmiennaTypuByte As Byte
W ten sposób programista jawnie ogranicza zakres przechowywanych przez zmienną wartości
do liczb z przedziału <0, 255>. Dopiero po takiej deklaracji może nastąpić użycie zadeklarowanej
zmiennej.
Gdyby opcja Explicit została wyłączona (Off), to możliwe byłoby użycie zmiennej bez jej jawne-
go deklarowania. Wyłączenie opcji może spowodować powstanie w programie trudnych do wykrycia
błędów.
Opcja Strict w stanie On powoduje, że przypisanie zmiennej wartości wyrażenia, którego wynik
jest innego typu niż typ zmiennej może nastąpić jedynie w wyniku jawnej konwersji tego wyniku na
tym zmiennej. Jeśli konwersja jest niemożliwa wystąpi błąd.
Chcąc obliczyć średnią liczbę studentów w grupie na podstawie liczebności trzech grup dzieli
się sumaryczną liczbę studentów przez liczbę trzy. Jednak dzielenie może dać jako wynik liczbę rze-
czywistą, a oczekujemy, że średnia będzie liczbą całkowitą.
Przykład.
Dim ŚredniaLiczbaStudentówWGrupie As Integer
Dim SumarycznaLiczbaStudentów As Integer = 49
ŚredniaLiczbaStudentówWGrupie = SumarycznaLiczbaStudentów / 3
Wartość wyrażenia po prawej stronie operatora przypisania jest (w ogólności) liczbą rzeczywi-
stą. Zmienna, której wynik jest przypisywany, posiada typ całkowity. Podkreślone na czerwono przypi-
sanie zostanie uznane przez kompilator Visual Studio za błąd (przy włączonej opcji Strict). W takim
przypadku konieczne jest jawne użycie jednej z wielu funkcji konwersji:
CBool(wyrażenie) – konwertuje wartość wyrażenia do typu
Boolean
(logicznego),
CByte(wyrażenie) – do typu
Byte
,
CChar(wyrażenie) – do typu znakowego,
CDate(wyrażenie) – do daty,
CDbl(wyrażenie) –
Double
,
CDec(wyrażenie) –
Decimal
,
CInt(wyrażenie) –
Integer
,
CLng(wyrażenie) –
Long
,
CObj(wyrażenie) –
Object
,
CSByte(wyrażenie) –
SByte
,
CShort(wyrażenie) –
Short
,
CSng(wyrażenie) –
Single
,
CStr(wyrażenie) –
String
,
CUInt(wyrażenie) –
UInteger
(czterobajtowa całkowita bez znaku - <0, 4294967295>),
CULng(wyrażenie) –
Ulong
(szesnastobajtowa całkowita bez znaku – <0, 18446744073709551615>),
CUShort(wyrażenie) –
UShort
(dwubajtowa całkowita bez znaku – <0, 65535>).
Przy włączonej opcji Strict należy jawnie użyć jednej z wymienionych funkcji. Błędne przypisa -
nie z powyższego przykładu należy zastąpić następującym:
ŚredniaLiczbaStudentówWGrupie = CInt(SumarycznaLiczbaStudentów / 3)
Przy wyłączonej opcji Strict (Off) konwersja nastąpi niejawnie i może powodować trudne do wy-
chwycenia błędy.
Funkcje działające na łańcuchach znaków
Wiele zadań polega na przetwarzaniu ciągów znaków – tekstów. Przykładowo, może być ko-
nieczne połączenie jednego łańcucha znaków z innym. Do tego celu stosuje się operator konkatena-
cji (łączenia łańcuchów) – „&”. Jeśli jednak potrzebny jest tylko fragment łańcucha tekstowego, nale-
ży zastosować jedną z funkcji łańcuchowych. Poniżej wymienione zostaną te z nich, które są najczę-
ściej wykorzystywane na etapie zapoznawania się z językiem programowania.
Funkcje, o których mowa zadeklarowane są w module Strings przestrzeni nazw VisualBasic
przechowywanej w zestawie Microsoft (biblioteka Microsoft.VisualBasic.dll).
W przykładach zakłada się, że zadeklarowano zmienne:
Dim strWynik as String
Dim intWynik as Integer
LCase
Funkcja zamienia wszystkie znaki łańcucha tekstowego na małe litery. Przykładowo, wywołanie:
strWynik = LCase("John Travolta")
spowoduje, że zmienna strWynik przechowywać będzie łańcuch „john travolta”.
Left
Funkcja zwraca określoną liczbę znaków z lewej strony łańcucha tekstowego. Przykładowo, wy-
wołanie:
strWynik = Left("John Travolta", 6)
spowoduje, że zmienna strWynik przechowywać będzie łańcuch „John T”.
Len
Funkcja zwraca długość łańcucha tekstowego (liczbę znaków – liczone są również spacje,
z których się składa). Przykładowo, wywołanie:
intWynik = Len("John Travolta")
spowoduje, że zmienna intWynik przechowywać będzie liczbę 13.
LSet
Funkcja zwraca łańcuch tekstowy o określonej długości rozpoczynający się od znaków łańcu-
cha podanego jako parametr. Jeśli w argumencie jest za mało znaków, to wynik uzupełniany jest po
prawej stronie spacjami, a jeżeli argument jest zbyt długi, to następuje obcięcie. Przykładowo, wywo -
łanie:
strWynik = LSet("John Travolta", 15)
spowoduje, że zmienna strWynik przechowywać będzie łańcuch „John Travolta··” (kropki ozna-
czają spacje dodane, aby łańcuch miał 15 znaków). Natomiast, wywołanie:
strWynik = LSet("John Travolta", 6)
spowoduje, że zmienna strWynik przechowywać będzie łańcuch „John T”.
LTrim
Funkcja zwraca łańcuch tekstowy podany jako argument po usunięciu z niego spacji występują-
cych po lewej stronie. Przykładowo, wywołanie:
strWynik = LTrim(" John Travolta") 'Przed literą J występują dwie spacje
spowoduje, że zmienna strWynik przechowywać będzie łańcuch „John Travolta” (bez dwóch spacji
przed literą J).
Mid
Funkcja zwraca łańcuch tekstowy. Składa się on ze znaków łańcucha podanego jako argument.
Znaki pobierane są z argumentu od miejsca o określonym numerze. Przykładowo, wywołanie:
strWynik = Mid("John Travolta", 7)
spowoduje, że zmienna strWynik przechowywać będzie łańcuch tekstowy „ravolta”. Można również
określić ile znaków powinien zawierać wynik. Przykładowo, wywołanie:
strWynik = Mid("John Travolta", 7, 3)
spowoduje, że zmienna strWynik przechowywać będzie łańcuch tekstowy „rav”.
Replace
Funkcja zwraca łańcuch tekstowy powstający z argumentu przez zastąpienie określonych frag-
mentów tekstu innym ciągiem znaków. Przykładowo, wywołanie:
strWynik = Replace("John Travolta", "a", "es")
spowoduje, że zmienna strWynik przechowywać będzie łańcuch „John Tresvoltes” (litera „a” została
zastąpiona przez litery „es”).
Right
Funkcja zwraca określoną liczbę znaków z prawej strony łańcucha tekstowego. Przykładowo,
wywołanie:
strWynik = Right("John Travolta", 6)
spowoduje, że zmienna strWynik przechowywać będzie łańcuch „avolta”.
Rset
Funkcja zwraca łańcuch tekstowy o określonej długości kończący się ostatnimi znakami łańcu-
cha podanego jako parametr. Jeśli w argumencie jest za mało znaków, to wynik uzupełniany jest po
lewej stronie spacjami, a jeżeli argument jest zbyt długi, to następuje obcięcie. Przykładowo, wywoła-
nie:
strWynik = RSet("John Travolta", 15)
spowoduje, że zmienna strWynik przechowywać będzie łańcuch „··John Travolta” (kropki oznaczają
spacje dodane, aby łańcuch miał 15 znaków). Natomiast, wywołanie:
strWynik = RSet("John Travolta", 6)
spowoduje, że zmienna strWynik przechowywać będzie łańcuch „avolta”.
Rtrim
Funkcja zwraca łańcuch tekstowy podany jako argument po usunięciu z niego spacji występują-
cych po prawej stronie. Przykładowo, wywołanie:
strWynik = RTrim("John Travolta ") 'Po słowie Travolta występują dwie spacje
spowoduje, że zmienna strWynik przechowywać będzie łańcuch „John Travolta” (bez dwóch spacji
kończących argument funkcji).
Space
Funkcja zwraca łańcuch tekstowy złożony ze spacji. Jest ich tyle, ile wynosi argument funkcji.
StrReverse
Funkcja zwraca łańcuch tekstowy złożony ze znaków łańcucha podanego jako argument funk-
cji, ale w odwrotnej kolejności. Przykładowo, wywołanie:
strWynik = StrReverse("John Travolta")
spowoduje, że zmienna strWynik przechowywać będzie łańcuch „atlovarT nhoJ”.
Trim
Funkcja zwraca łańcuch tekstowy podany jako argument po usunięciu z niego spacji występują-
cych tak po lewej, jak i po prawej stronie. Przykładowo, wywołanie:
strWynik = Trim(" John Travolta ")
spowoduje, że zmienna strWynik przechowywać będzie łańcuch „John Travolta”.
UCase
Funkcja zamienia wszystkie znaki łańcucha tekstowego na wielkie litery. Przykładowo, wywoła-
nie:
strWynik = UCase("John Travolta")
spowoduje, że zmienna strWynik przechowywać będzie łańcuch „JOHN TRAVOLTA”.
Wywołania funkcji można zagnieżdżać, aby uzyskać określony sposób przetwarzania łańcucha
tekstowego.
II.10.
Komentarze
Dobrym zwyczajem programisty jest opisywanie tworzonego kodu źródłowego. W tym celu w
treści umieszcza się komentarze. Komentarz rozpoczyna się od znaku „'” (apostrof) i ciągnie się do
końca wiersza.
Przykład.
‘To jest komentarz, jest on ignorowany przez kompilator