You are on page 1of 30

Visual Basic .NET.

Alchemia programowania
Autor: Jack Purdum
Tumaczenie: Radosaw Wroski,
Magorzata Dbkowska-Kowalik
ISBN: 978-83-246-0292-6
Tytu oryginau: Visual Basic .NET Primer Plus
Stron: 712

Utwrz wasne aplikacje dla systemu Windows


Poznaj zasady projektowania obiektowego.
Wykorzystaj komponenty platformy .NET.
Zastosuj zaawansowane techniki programowania.

Visual Basic to jeden z najpowszechniej uywanych jzykw programowania. Ostatnie


badania potwierdzaj jego popularno korzysta z niego ponad 5 milionw
programistw z caego wiata. Jego ostatnia wersja, zintegrowana z platform .NET, to
w peni obiektowy jzyk, ktry jednak nadal zachowa charakterystyczne dla siebie cechy,
czyli prost i czyteln skadni, atwo tworzenia nawet najbardziej rozbudowanych
aplikacji oraz ogromn elastyczno. Za jego pomoc mona budowa dla systemu
Windows wydajne aplikacje, korzystajce z baz danych oraz pocze internetowych.
Ksika Visual Basic .NET. Alchemia programowania to podrcznik wprowadzajcy
w tajniki tworzenia aplikacji w tym jzyku. Dziki niemu poznasz jzyk Visual Basic .NET
i nauczysz si pisa wasne programy przeznaczone dla systemu Windows, opierajce
si na mechanizmach oferowanych przez platform .NET. Zanim jednak przystpisz
do pisania aplikacji, dowiesz si, na czym polega programowanie obiektowe, poznasz
elementy jzyka Visual Basic .NET i technologie, jakie moesz wykorzysta w swoich
aplikacjach. Zdobdziesz wiedz niezbdn do tego, aby budowa zoone aplikacje
oparte o bazy danych i mechanizmy sieciowe.

Wydawnictwo Helion
ul. Kociuszki 1c
44-100 Gliwice
tel. 032 230 98 63
e-mail: helion@helion.pl

Podstawy programowania obiektowego


Typy danych w Visual Basicu
Operatory
Podprogramy i funkcje
Przetwarzanie tablic
Stosowanie komponentw .NET
Poczenia z bazami danych

Docz do grona milionw fanw jzyka Visual Basic

SPIS TRECI

SPIS TRECI
O autorze .......................................................................................................................................... 17
Wprowadzenie ................................................................................................................................. 19
Rozdzia 1. Zaczynamy prac w Visual Studio .Net ................................................................. 25
Instalacja Visual Studio .NET ............................................................................................ 26
Kontrola poprawnoci dziaania zainstalowanego Visual Basic .NET ....................... 35
Uruchamianie Visual Studio .NET ............................................................................. 35
Zintegrowane rodowisko programistyczne Visual Basic .NET ............................ 37
Przenoszenie obiektu z przybornika na formularz .................................................. 38
Zmienianie wartoci waciwoci ................................................................................ 39
Uruchamianie pierwszego programu .............................................................................. 39
Konsolidacja a kompilacja ............................................................................................ 39
Inne sposoby uruchomienia programu ..................................................................... 40
Koczenie sesji programowania w Visual Basic .NET .................................................... 40
Podsumowanie .................................................................................................................... 41
Pytania kontrolne ................................................................................................................ 41
Rozdzia 2. Podstawy programowania obiektowego ................................................................ 43
Krtka historia programowania komputerowego ......................................................... 44
Jzyki programowania .................................................................................................. 44
Programowanie strukturalne ...................................................................................... 51
Programowanie obiektowe .......................................................................................... 52
Przykad programu obiektowego ..................................................................................... 56
Okno projektu (Design Window) ............................................................................... 58
Okno waciwoci (Properties Window) ................................................................... 58
Umieszczanie na formularzu innych obiektw ........................................................ 61
Kompilacja pierwszego programu ................................................................................... 63
Uruchamianie programu w Visual Basic .NET ............................................................... 65

VISUAL BASIC .NET. ALCHEMIA PROGRAMOWANIA

Pisanie kodu programu ...................................................................................................... 66


Operator kropki ............................................................................................................. 68
Wywoywanie metody obiektu ................................................................................... 69
Sowo kluczowe Me ...................................................................................................... 71
Eksperymenty z przykadowym programem .......................................................... 72
Podsumowanie .................................................................................................................... 73
Pytania kontrolne ................................................................................................................ 74
Rozdzia 3. Jak zaprojektowa program ...................................................................................... 77
Po co si tym w ogle zajmowa? ..................................................................................... 77
Algorytmy ............................................................................................................................. 78
Algorytmy makro i mikro ............................................................................................. 78
Pi krokw programowania ............................................................................................ 79
Krok inicjalizacji ............................................................................................................. 79
Krok wprowadzania danych ....................................................................................... 80
Krok przetwarzania ....................................................................................................... 80
Krok prezentacji wyniku .............................................................................................. 81
Krok porzdkowania .................................................................................................... 81
Pi krokw w kadym programie? ........................................................................... 82
Ucilanie .............................................................................................................................. 82
Ucilanie kroku inicjalizacji ........................................................................................ 83
Pseudokod ...................................................................................................................... 83
Co to jest UML? ................................................................................................................... 84
Krtka historia UML ..................................................................................................... 84
Diagramy UML .............................................................................................................. 85
OOA, OOD i OOP ........................................................................................................ 85
Diagramy klas UML ............................................................................................................ 87
Waciwoci (atrybuty) klasy ....................................................................................... 88
Metody (operacje) klasy ............................................................................................... 88
Podsumowanie .................................................................................................................... 91
Pytania kontrolne ................................................................................................................ 91
Rozdzia 4. Typy danych i zmienne liczbowe ............................................................................ 93
Typy danych w jzyku Visual Basic .NET ....................................................................... 93
Ktrego typu danych uy? ......................................................................................... 94
Szczegowe omwienie typw danych jzyka Visual Basic .NET ............................ 96
Typ Boolean .................................................................................................................... 96
Typ Byte .......................................................................................................................... 97
Typ Char ......................................................................................................................... 97
Typ Decimal ................................................................................................................... 98
Typy danych Double i Single ...................................................................................... 99
Typy danych Integer, Long i Short ............................................................................ 99
Typ Object .................................................................................................................... 100
Typ danych String ....................................................................................................... 100
Typ User Defined (zdefiniowany przez uytkownika) ........................................ 101

SPIS TRECI

Zmienne .............................................................................................................................. 101


Nazwa zmiennej .......................................................................................................... 102
Sowa kluczowe ........................................................................................................... 103
Polecnie Dim: definiowanie zmiennych .................................................................. 104
Za kurtyn: tablica symboli Visual Basic .NET ............................................................. 105
Tablica symboli ............................................................................................................ 105
lvalue i rvalue ............................................................................................................... 106
Argumenty i operatory ............................................................................................... 107
W jaki sposb Visual Basic .NET przetwarza instrukcj przypisania? ............... 108
Program Inspector ............................................................................................................. 108
Bdy w programach w Visual Basic .NET .................................................................... 111
Bdy semantyczne ..................................................................................................... 112
Prosty program matematyczny ....................................................................................... 113
Konwersje typw danych .......................................................................................... 114
Biblioteki Visual Basic .NET ....................................................................................... 115
Liczby binarne .................................................................................................................... 116
Podsumowanie .................................................................................................................. 118
Pytania kontrolne .............................................................................................................. 119
Rozdzia 5. Podprogramy i funkcje ............................................................................................ 121
Podprogramy ..................................................................................................................... 121
Dlaczego uywa si podprogramw? ...................................................................... 122
Piszemy prosty podprogram ..................................................................................... 122
Wywoywanie podprogramu .................................................................................... 124
Parametry podprogramw ........................................................................................ 125
Przykadowy program z parametrami podprogramu .......................................... 125
Funkcje ................................................................................................................................ 137
Podsumowanie .................................................................................................................. 139
Pytania kontrolne .............................................................................................................. 139
Rozdzia 6. Zmienne tekstowe .................................................................................................... 143
acuchy znakw ............................................................................................................. 143
Pola tekstowe i acuchy znakw ............................................................................. 144
Operacje na danych znakowych w Visual Basic .NET .......................................... 144
czenie acuchw znakw ..................................................................................... 145
Dugo tekstu .............................................................................................................. 147
Operacje na fragmentach acuchw znakw ....................................................... 148
Funkcja InStr() ............................................................................................................. 152
Bezporednie operowanie na danych typu String ................................................ 153
Korzystanie z klasy String jzyka Visual Basic .NET ................................................... 153
Metoda Length ............................................................................................................ 153
Metoda Concat ............................................................................................................. 154
Metoda SubString ........................................................................................................ 156
Imitowanie funkcji Left() i Right() przy uyciu metody SubString .................... 158
Szukanie fragmentw cigw znakw .................................................................... 159

VISUAL BASIC .NET. ALCHEMIA PROGRAMOWANIA

Sprawdzanie, co jest zapisane na danej pozycji w cigu znakw


metoda Chars .................................................................................................... 160
Porwnywanie tekstw metoda Compare ........................................................ 161
Metoda Insert klasy String ......................................................................................... 163
Metoda Replace klasy String ..................................................................................... 164
Inne metody klasy String ................................................................................................. 165
Podsumowanie .................................................................................................................. 165
Pytania kontrolne .............................................................................................................. 166
Rozdzia 7. Tablice ......................................................................................................................... 169
Organizacja danych przy uyciu tablic ......................................................................... 169
Elementy tablicy .......................................................................................................... 170
Indeksy tablicy ............................................................................................................. 171
Prosty program przykadowy korzystajcy
z tablicy elementw typu String ......................................................................... 171
Udoskonalanie programu .......................................................................................... 173
Zmiana podstawowego indeksu tablicy ........................................................................ 174
Tablice dynamiczne ........................................................................................................... 176
Korzystanie z subtelnej waciwoci instrukcji ReDim
w czasie dziaania programu ............................................................................... 178
Wymuszanie bdu ..................................................................................................... 179
Sowo kluczowe Preserve ........................................................................................... 179
Tablice wielowymiarowe ................................................................................................. 180
Tablice wielowymiarowe o wicej ni dwch wymiarach ......................................... 184
Dynamiczne tablice wielowymiarowe ..................................................................... 184
Poznawanie rozmiaru tablicy .......................................................................................... 185
Podsumowanie .................................................................................................................. 186
Pytania kontrolne .............................................................................................................. 187
Rozdzia 8. Zasig i czas ycia zmiennych ................................................................................ 191
Co to jest zasig? ................................................................................................................ 191
Zasig lokalny (proceduralny) .................................................................................. 192
Zasig blokowy .................................................................................................................. 196
Ta sama nazwa zmiennej na rnych poziomach zasigu ................................... 197
Zasig moduowy .............................................................................................................. 198
Definicja klasy .............................................................................................................. 199
Dim, Private i zasig moduowy ............................................................................... 200
Przestrzenie nazw ............................................................................................................. 200
Przeznaczenie przestrzeni nazw ............................................................................... 201
Zasig przestrzeni nazw ............................................................................................. 202
Wspdzielenie zmiennych pomidzy formularzami ........................................... 204
Czasy ycia ......................................................................................................................... 206
Klasa pamici Static ..................................................................................................... 207
Podsumowanie .................................................................................................................. 207
Pytania kontrolne .............................................................................................................. 208

SPIS TRECI

Rozdzia 9. Operatory arytmetyczne i przypisania ................................................................. 211


Operatory arytmetyczne .................................................................................................. 211
Unarny plus i unarny minus ..................................................................................... 213
Przykadowy program ilustrujcy wykorzystanie operatorw
arytmetycznych ........................................................................................................... 213
Operatory skrcone .......................................................................................................... 218
Priorytet operatorw ......................................................................................................... 219
Wizanie ....................................................................................................................... 220
Zmienianie kolejnoci wykonywania dziaa ........................................................ 221
Podsumowanie .................................................................................................................. 222
wiczenie ............................................................................................................................ 222
Pytania kontrolne .............................................................................................................. 223
Rozdzia 10. Operatory relacyjne i logiczne ............................................................................. 225
Operatory relacyjne .......................................................................................................... 225
Proste wyraenie If-Then-Else .................................................................................. 226
Operatory logiczne ............................................................................................................ 229
Operator logiczny And ............................................................................................... 230
Operator logiczny Or .................................................................................................. 231
Operator logiczny Xor ................................................................................................ 232
Operacje poziomu bitowego wykonywane
za pomoc operatorw logicznych ..................................................................... 233
Priorytety operatorw ...................................................................................................... 237
Podsumowanie .................................................................................................................. 239
Pytania kontrolne .............................................................................................................. 239
Rozdzia 11. Podejmowanie decyzji ........................................................................................... 243
Proste wyraenia z instrukcj If ...................................................................................... 244
Korzystanie z debugera Visual Basic .NET do ledzenia przepywu
sterowania w programie ...................................................................................... 246
Upraszczanie programu ............................................................................................. 248
Wywoania funkcji a testy If ...................................................................................... 249
Konstrukcja If-Then-Else .................................................................................................. 251
Blok instrukcji If, blok instrukcji Then i blok instrukcji Else ................................ 252
Wybr jednej z wielu moliwoci przy uyciu instrukcji If ....................................... 252
Instrukcja ElseIf ........................................................................................................... 253
Konstrukcja Select Case .................................................................................................... 254
Odmiany instrukcji Select Case ................................................................................ 255
Instrukcje Select Case z zakresami wartoci ........................................................... 256
Instrukcje Select Case z ograniczonymi zakresami ............................................... 256
Wyliczanie: poprawianie czytelnoci blokw Select Case .......................................... 258
Operatory skrtowe .......................................................................................................... 259
Operator AndAlso ....................................................................................................... 259
Operator OrElse ........................................................................................................... 260
Podsumowanie .................................................................................................................. 261
Pytania kontrolne .............................................................................................................. 261

10

VISUAL BASIC .NET. ALCHEMIA PROGRAMOWANIA

Rozdzia 12. Ptle .......................................................................................................................... 267


Struktura ptli .................................................................................................................... 267
Prosta ptla w programie ................................................................................................. 268
Czy jest to dobrze zachowujca si ptla? .............................................................. 271
Ptla For-Next .................................................................................................................... 272
Instrukcja Next ............................................................................................................. 273
Zastosowanie ptli For-Next w implementacji algorytmu ......................................... 274
Alternatywny format definiowania zmiennych ..................................................... 276
ledzenie kodu ............................................................................................................. 276
Dyskomfort mylowy ................................................................................................. 277
Ktra wersja jest lepsza? ............................................................................................ 278
Ptle For i tablice ................................................................................................................ 279
Typy danych Structure ............................................................................................... 279
Zdarzenie btnAdd_Click ............................................................................................ 281
Zdarzenie btnDone_Click .......................................................................................... 283
Exit For wczeniejsze opuszczenie ptli ................................................................... 284
Zagniedone ptle For .................................................................................................... 285
Podsumowanie .................................................................................................................. 287
Pytania kontrolne .............................................................................................................. 287
Rozdzia 13. Ptle While ............................................................................................................... 293
Ptle While-End While ..................................................................................................... 293
Reguy skadniowe dotyczce bloku While-End While ........................................ 294
Program do konwersji liczb binarnych .......................................................................... 295
To, czego nie wida goym okiem ............................................................................. 295
Funkcja ConvertToBinary() ....................................................................................... 296
Funkcja ConvertToDecimal() .................................................................................... 299
Ptle Do While odmiana pierwsza ............................................................................ 301
Ptle Do While odmiana druga .................................................................................. 303
Ptle Until ........................................................................................................................... 305
Do Until ......................................................................................................................... 305
Loop Until ..................................................................................................................... 306
Wczeniejsze wychodzenie z ptli Do ........................................................................... 306
Zagniedone ptle Do i Exit Do .............................................................................. 307
Wartownicy ........................................................................................................................ 307
Podsumowanie .................................................................................................................. 309
Pytania kontrolne .............................................................................................................. 310
Rozdzia 14. Zaawansowane przetwarzanie tablic .................................................................. 313
Deklarowanie i definiowanie tablic ................................................................................ 313
Skalary tablic ................................................................................................................ 314
Indeksowanie tablic .................................................................................................... 314
Sortowanie tablicy ............................................................................................................. 315
Przeszukiwanie tablicy ..................................................................................................... 318
Przeszukiwanie sekwencyjne .................................................................................... 319
Przeszukiwanie binarne ............................................................................................. 319

SPIS TRECI

11

Inne waciwoci i metody dotyczce tablic .................................................................. 323


Length ........................................................................................................................... 323
Rank ............................................................................................................................... 323
Clear ............................................................................................................................... 323
Copy .............................................................................................................................. 324
GetLength ..................................................................................................................... 324
Reverse .......................................................................................................................... 325
Tablice jako obiekty ........................................................................................................... 325
Zmienne referencyjne ................................................................................................. 326
Listy inicjalizujce obiektw tablic ........................................................................... 329
Przykadowy program korzystajcy z obiektu tablicy ................................................ 330
Kolekcje ............................................................................................................................... 334
Magiczne kwadraty ..................................................................................................... 334
Podsumowanie .................................................................................................................. 339
Pytania kontrolne .............................................................................................................. 339
Rozdzia 15. Hermetyzacja .......................................................................................................... 343
Tworzenie wasnych klas ................................................................................................. 344
Krok 1. Tworzenie oglnego szkicu projektu ......................................................... 344
Krok 2. Analiza opcji tworzenia klasy ...................................................................... 345
Ucilenie projektu ...................................................................................................... 346
Dodawanie klasy do projektu ......................................................................................... 349
Dodawanie skadnikw do klas ................................................................................ 351
Dodawanie konstruktorw do klasy ........................................................................ 352
Dodawanie do klasy nowego uytkownika ............................................................ 355
Procedury publiczne i interfejs klasy ....................................................................... 357
Procedury pomocnicze klasy ..................................................................................... 359
Dodawanie reszty kodu klasy CPassword .............................................................. 360
Testowanie kodu klasy CPassword ................................................................................ 364
Kod TestPassword ....................................................................................................... 365
Sprawdzanie uytkownika i hasa ............................................................................ 367
Stopniowe zwalnianie obiektw ............................................................................... 368
Tworzenie wasnej biblioteki klasy ................................................................................. 369
Korzystanie z plikw bibliotecznych ....................................................................... 371
Podsumowanie .................................................................................................................. 371
Pytania kontrolne .............................................................................................................. 372
Rozdzia 16. Waciwoci klasy ................................................................................................... 375
Tworzenie projektu programu ........................................................................................ 375
Metody akcesora waciwoci .................................................................................... 377
Kod klasy COven ......................................................................................................... 378
Testowanie klasy COven .................................................................................................. 382
Kod do testowania klasy COven .............................................................................. 383
Waciwoci ReadOnly i WriteOnly ............................................................................... 389
Podsumowanie .................................................................................................................. 390
Pytania kontrolne .............................................................................................................. 390

12

VISUAL BASIC .NET. ALCHEMIA PROGRAMOWANIA

Rozdzia 17. Dziedziczenie .......................................................................................................... 393


Klasy bazowe i pochodne ................................................................................................ 394
Relacja Is a ................................................................................................................. 394
Po co nam klasa bazowa i klasy pochodne? ............................................................ 395
Klasa bazowa Building ..................................................................................................... 396
Specyfikator dostpu Protected ................................................................................ 399
Klasy pochodne Apartment, Commercial i Home ....................................................... 400
Dane skadowe i akcesory waciwoci .................................................................... 403
Metody klas pochodnych ........................................................................................... 403
Zdefiniowa a zadeklarowa ........................................................................................... 404
Czym metody rni si od funkcji i podprogramw? ........................................ 404
Testowanie klasy Building ............................................................................................... 406
Uycie pl kombi ......................................................................................................... 406
Dane skadowe klasy pochodnej .............................................................................. 407
Proste zmiany ulepszajce program do testowania klasy Building .................... 412
Klasy wirtualne .................................................................................................................. 413
Sowo kluczowe MustInherit ..................................................................................... 413
Sowa kluczowe, ktre dotycz dziedziczenia ....................................................... 414
Podsumowanie .................................................................................................................. 419
Pytania kontrolne .............................................................................................................. 419
Rozdzia 18. Polimorfizm ............................................................................................................. 423
Czym jest polimorfizm? .................................................................................................... 423
Przykad dziedziczenia i polimorfizmu ......................................................................... 424
Konstruktor klasy bazowej ........................................................................................ 424
Konstruktory z list inicjalizujc ............................................................................. 425
Testowanie polimorfizmu ................................................................................................ 435
Praca z klasami wirtualnymi ..................................................................................... 437
Uycie konstrukcji For Each dla obiektw tabeli ................................................... 437
Tworzenie interfejsu ......................................................................................................... 439
Deklaracje interfejsu ................................................................................................... 439
Implementowanie interfejsu ..................................................................................... 440
Podsumowanie .................................................................................................................. 444
Pytania kontrolne .............................................................................................................. 444
Rozdzia 19. Obsuga bdw i debugowanie .......................................................................... 447
Typy bdw ...................................................................................................................... 448
Bdy skadniowe ........................................................................................................ 448
Bdy semantyczne ..................................................................................................... 449
Bdy logiczne .............................................................................................................. 451
Przykadowy program do testowania debugera .......................................................... 451
Uycie debugera jzyka Visual Basic .NET ................................................................... 454
Ustawianie punktu przerwania ................................................................................ 455
Okno Locals .................................................................................................................. 456
Okno Autos .................................................................................................................. 456

SPIS TRECI

13

Okno Watch ................................................................................................................. 458


Licznik trafie .............................................................................................................. 459
Okno Command .......................................................................................................... 460
Wartoci graniczne ...................................................................................................... 460
Inne okna ...................................................................................................................... 461
Niestrukturalna obsuga bdw .................................................................................... 462
Instrukcja On Error Goto ........................................................................................... 462
Me.Update() ................................................................................................................. 464
Exit Sub .......................................................................................................................... 465
Resume Next ................................................................................................................ 465
Resume .......................................................................................................................... 465
On Error Goto 0 ........................................................................................................... 465
Strukturalna obsuga bdw .......................................................................................... 466
Blok instrukcji Try ....................................................................................................... 467
Blok instrukcji Catch ................................................................................................... 467
Blok instrukcji Finally ................................................................................................. 469
Instrukcja End Try ....................................................................................................... 469
Przykad programu z obsug wyjtkw ...................................................................... 470
Zdarzenie kliknicia btnCalc ..................................................................................... 473
Funkcja StandardDeviation() .................................................................................... 473
Sowo kluczowe Throw .............................................................................................. 475
Blok instrukcji Finally ................................................................................................. 476
Podsumowanie .................................................................................................................. 476
Pytania kontrolne .............................................................................................................. 477
Rozdzia 20. Formanty w Visual Basic .NET ............................................................................. 481
Formant Form .................................................................................................................... 482
Zdarzenie Load() formantu Form ............................................................................. 482
Waciwoci sterujce formantem Form .................................................................. 484
Metody formantu Form .............................................................................................. 490
Przykadowy program z obiektami formantw ........................................................... 491
Pole kombi .................................................................................................................... 492
Przyciski radiowe ........................................................................................................ 498
Uruchomienie przykadowego programu .................................................................... 499
Zdarzenie Load() formularza .................................................................................... 501
Zdarzenie Click() obiektu btnCheck ........................................................................ 501
Podsumowanie .................................................................................................................. 503
Pytania kontrolne .............................................................................................................. 504
Rozdzia 21. Tworzenie wasnych formantw ......................................................................... 507
Formant PhoneSSN ........................................................................................................... 508
Rozpoczynanie projektu ............................................................................................ 510
Formularz UserControl .............................................................................................. 510
Nadawanie nazwy formantowi ................................................................................ 511
Umieszczanie pl tekstowych w formancie ............................................................ 511

14

VISUAL BASIC .NET. ALCHEMIA PROGRAMOWANIA

Dodawanie kodu do niestandardowego formantu PhoneSSN ........................... 512


Atrybuty komponentu ................................................................................................ 513
Uycie typw danych Enum do wyboru waciwoci .......................................... 515
Opisywanie i okrelanie kategorii procedury waciwoci .................................. 515
Kod procedury waciwoci InputType ................................................................... 516
Dodawanie nowej zakadki do przybornika .......................................................... 517
Pozostay kod klasy PhoneSSN ................................................................................. 517
Kod zdarzenia Resizing() ........................................................................................... 520
Zmiana rozmiaru pl tekstowych ............................................................................. 520
Testowanie formantu PhoneSSN .............................................................................. 521
Dodawanie projektu TestPS ...................................................................................... 521
Dodawanie formantu PhoneSSN do przybornika ................................................. 522
Obsuga zdarze ................................................................................................................ 524
Sygnatury programw obsugi zdarze .................................................................. 524
Nadawcy, delegaty i procedury obsugi zdarze .................................................. 526
Podsumowanie .................................................................................................................. 527
Pytania kontrolne .............................................................................................................. 527
Rozdzia 22. Grafika w Visual Basic .NET ................................................................................. 529
Ekran komputera ............................................................................................................... 530
Ukad wsprzdnych graficznych w Visual Basic .NET ...................................... 531
Formant PictureBox .................................................................................................... 532
Rozmiar pamici obrazu ............................................................................................. 532
Projekt ImageViewer ........................................................................................................ 533
Formant OpenFileDialog ........................................................................................... 534
Metoda ShowDialog() ................................................................................................. 537
Procedura CalculateControlSize() ............................................................................ 537
Wspczynnik ksztatu ............................................................................................... 538
Tworzenie wasnych obiektw graficznych ................................................................. 540
Kod formantu Gauge .................................................................................................. 540
Ustawianie czcionki .......................................................................................................... 549
Uycie wasnoci Yellowline i Redline ........................................................................... 551
Testowanie formantu Gauge ........................................................................................... 556
Podsumowanie .................................................................................................................. 557
Pytania kontrolne .............................................................................................................. 557
Rozdzia 23. Dyskowe pliki danych ........................................................................................... 561
Wprowadzenie do plikw danych ................................................................................. 561
Sekwencyjne dyskowe pliki danych ........................................................................ 562
Zapisywanie pliku tekstowego ................................................................................. 566
Pliki danych o dostpie swobodnym ....................................................................... 573
Kod klasy frmRandom ................................................................................................ 576
Podsumowanie .................................................................................................................. 590
Pytania kontrolne .............................................................................................................. 590

SPIS TRECI

15

Rozdzia 24. Podstawy baz danych ............................................................................................ 593


Czym jest baza danych? ................................................................................................... 593
Co zawiera baza danych? ........................................................................................... 594
SQL ................................................................................................................................ 594
Struktura organizacyjna nowoczesnej bazy danych ............................................. 595
Po co te wszystkie tabele? .......................................................................................... 598
ADO.NET ............................................................................................................................ 600
Uycie ADO.NET ........................................................................................................ 600
Korzystanie z jzyka SQL ................................................................................................ 601
SELECT ......................................................................................................................... 601
Predykat WHERE ........................................................................................................ 603
Klauzula ORDER BY ................................................................................................... 605
Uywanie jzyka SQL ...................................................................................................... 606
Dodawanie predykatu WHERE ................................................................................ 608
Uycie klauzuli ORDER BY ....................................................................................... 609
Podsumowanie .................................................................................................................. 611
Pytania kontrolne .............................................................................................................. 611
Rozdzia 25. Programowanie baz danych w Visual Basic .NET ............................................ 613
Wykorzystanie kreatorw Visual Basic .NET do wsppracy z baz danych .............614
Dodawanie obiektu DataSet ............................................................................................ 621
Dodawanie formantu DataGrid ................................................................................ 623
ycie bez kreatorw .......................................................................................................... 625
Konfigurowanie formularza ...................................................................................... 625
Dodawanie kodu ......................................................................................................... 627
acuch poczenia ..................................................................................................... 629
Korzystanie z ADO ..................................................................................................... 629
Wybieranie nazw pl do zapytania .......................................................................... 631
Dodawanie predykatu WHERE ................................................................................ 632
Przekazywanie zapytania do wykonania ................................................................ 635
Poruszanie si po bazie danych ................................................................................ 636
Modyfikowanie bazy danych .......................................................................................... 642
Dygresja na temat kasowania .................................................................................... 642
Projekt ModifyDB ........................................................................................................ 643
Podsumowanie .................................................................................................................. 649
Pytania kontrolne .............................................................................................................. 649
Rozdzia 26. Programowanie WWW w Visual Basic .NET ..................................................... 653
Wprowadzenie ................................................................................................................... 653
HTML i statyczne strony WWW ............................................................................... 653
Jak dziaa strona WWW? ............................................................................................ 654
Konfigurowanie wasnego serwera WWW ............................................................. 656
Dynamiczny HTML .......................................................................................................... 661
Przetwarzanie po stronie klienta i po stronie serwera .......................................... 661

16

VISUAL BASIC .NET. ALCHEMIA PROGRAMOWANIA

Strona WWW powicona kredytom hipotecznym .................................................... 662


Rnice w IDE dla WWW .......................................................................................... 663
Kalkulator kredytu hipotecznego ............................................................................. 664
Skrypt HTML kalkulatora kredytu hipotecznego .................................................. 667
Podsumowanie .................................................................................................................. 673
Pytania kontrolne .............................................................................................................. 673
Dodatek A Tabela ASCII .............................................................................................................. 677
Skorowidz ..................................................................................................................................... 681

10
OPERATORY RELACYJNE
I LOGICZNE
W tym rozdziale dowiesz si:
z
z

Co to s operatory relacyjne
i jak je wykorzystywa
Co to s operatory logiczne
i jak ich uywa

z
z

Jak stosowa operatory poziomu


bitowego
Jakie priorytety maj operatory
relacyjne i logiczne

ednym z podstawowych zada niemal kadego programu komputerowego


jest zdolno podejmowania decyzji na podstawie dostarczonych danych.
Kluczowe znaczenie dla tej zdolnoci maj operatory relacyjne i logiczne.
W programach su one do podejmowania decyzji na podstawie porwnania jednych
wartoci z innymi. W tym rozdziale zajmiemy si takimi operatorami dostpnymi
w jzyku Visual Basic .NET.

Operatory relacyjne
Operatory relacyjne (relational operators) su do porwnywania wartoci. Tabela 10.1
przedstawia ich zestawienie.
Wszystkie operatory relacyjne s binarne, to znaczy, e (jak przypominamy sobie
z poprzednich rozdziaw) wymagaj dwch argumentw. Oglna skadnia grupy
operatorw relacyjnych wyglda nastpujco:
Argument1 OperatorRelacyjny Argument2

226

VISUAL BASIC .NET. ALCHEMIA PROGRAMOWANIA

TABELA 10.1. Operatory relacyjne jzyka Visual Basic .NET


Operator relacyjny

Znaczenie

Rwne

<>

Rne

<

Mniejszy od

>

Wikszy od

<=

Mniejszy lub rwny

>=

Wikszy lub rwny

Gdy w jakim wyraeniu wykorzystywany jest operator relacyjny, mwi si, e


pomidzy dwiema wartociami (to jest argumentami) wykonywany jest test relacyjny
(relational test). Test taki moe da tylko jeden z dwch wynikw: logiczn prawd
(warto True) lub logiczny fasz (warto False).

Proste wyraenie If-Then-Else


Testy relacyjne s czsto wykonywane przy uyciu wyrae If-Then-Else. Mimo
i uywalimy ich ju w poprzednich rozdziaach, nie zapoznalimy si do tej pory
z ich skadni:
If Wyraenie1 Then
Wykonaj, jeli Wyraenie1 jest prawdziwe
Else
Wykonaj, jeli Wyraenie1 nie jest prawdziwe
End If

Blok wyraenia If rozpoczyna si od sowa kluczowego If, a koczy instrukcj End


If. Wyraenie1 jest zwykle testem logicznym, ktrego wynikiem moe by jedna
z wartoci: True lub False. Jeli w wyniku przeprowadzenia testu Wyraenie1 otrzymamy warto True, wykonywana jest druga linia bloku If. Jeli otrzymamy warto
False, wykonywana jest linia znajdujca si po sowie kluczowym Else.

Porada dla programistw


Wyraenia do wykonania w wyniku przeprowadzenia testu logicznego w bloku
If-Then-Else, zgodnie z obowizujc konwencj, s wcite o jeden tabulator. Wicej na temat wyraenia If-Then-Else powiemy w rozdziale 11.

Napiszemy teraz prosty program, ktry pozwoli przewiczy zarwno skadni If,
jak i operatory relacyjne. Rozpocznijmy nowy projekt i nazwijmy go RelationalOperators (Operatory relacyjne). Dodajmy do jego formularza pola tekstowe i przyciski
pokazane na rysunku 10.1. (Mona wykorzysta program napisany w rozdziale 9.
w celu testowania operatorw arytmetycznych).

Rozdzia 10. OPERATORY RELACYJNE I LOGICZNE

227

RYSUNEK 10.1.
Program
do wykonywania
testw relacyjnych

Na rysunku 10.1 widzimy pola tekstowe przeznaczone na oba argumenty: txtArgument1 i txtArgument2, oraz trzecie pole tekstowe suce do pokazania caego
sprawdzanego wyraenia. W polu o nazwie txtExpression wida bdzie cae
Wyraenie1 z przedstawionej przed chwil skadni bloku If-Then-Else. U dou
formularza widocznego na rysunku 10.1 znajduje si pole grupy zawierajce dwa pola
wyboru. Bd one suy do prezentacji wyniku przeprowadzanego testu logicznego.
Kod programu jest bardzo prosty. Pole grupy o nazwie Operator zawiera sze
przyciskw opcji, po jednym dla kadego operatora relacyjnego. Poniej przedstawiony jest kod zwizany z pierwszym przyciskiem opcji:
Private Sub RadioButton1_CheckedChanged(ByVal sender As System.Object, _
ByVal e As System.EventArgs) Handles RadioButton1.CheckedChanged
WhichOne = 1
End Sub

W wyniku kliknicia okrelonego przycisku opcji zmienna WhichOne przyjmuje warto odpowiadajc temu przyciskowi. WhichOne jest zmienn typu Integer zdefiniowan z zasigiem moduowym.
Po wpisaniu argumentw do pl tekstowych i wybraniu operatora relacyjnego uytkownik klika przycisk Test. Peny kod obsugi zdarzenia Click() obiektu btnTest
jest pokazany na listingu 10.1.
LISTING 10.1. Kod obsugi zdarzenia Click() obiektu btnTest
Private Sub btnTest_Click(ByVal sender As System.Object, _
ByVal e As System.EventArgs) _
Handles btnTest.Click
ckbTrue.Checked = False
' Rozpoczynamy od ustawienia wartoci False
ckbFalse.Checked = False

228

VISUAL BASIC .NET. ALCHEMIA PROGRAMOWANIA

Select Case WhichOne


Case 1
txtExpression.Text = txtArgument1.Text & " = " & txtArgument2.Text
If txtArgument1.Text = txtArgument2.Text Then ' A1 rwna si A2
ckbTrue.Checked = True
Else
ckbFalse.Checked = True
End If
Case 2
txtExpression.Text = txtArgument1.Text & " <> " & txtArgument2.Text
If txtArgument1.Text <> txtArgument2.Text Then 'A1 jest rny od A2
ckbTrue.Checked = True
Else
ckbFalse.Checked = True
End If
Case 3
txtExpression.Text = txtArgument1.Text & " > " & txtArgument2.Text
If txtArgument1.Text > txtArgument2.Text Then 'A1 jest wikszy od A2
ckbTrue.Checked = True
Else
ckbFalse.Checked = True
End If
Case 4
txtExpression.Text = txtArgument1.Text & " < " & txtArgument2.Text
If txtArgument1.Text < txtArgument2.Text Then 'A1 jest mniejszy
'od A2
ckbTrue.Checked = True
Else
ckbFalse.Checked = True
End If
Case 5
txtExpression.Text = txtArgument1.Text & " >= " & txtArgument2.Text
If txtArgument1.Text >= txtArgument2.Text Then 'A1 jest wikszy
'lub rwny A2
ckbTrue.Checked = True
Else
ckbFalse.Checked = True
End If
Case 6
txtExpression.Text = txtArgument1.Text & " <= " & txtArgument2.Text
If txtArgument1.Text <= txtArgument2.Text Then 'A1 jest mniejszy
'lub rwny A2
ckbTrue.Checked = True
Else
ckbFalse.Checked = True
End If
End Select
End Sub

Kod procedury rozpoczyna si od nadania obu polom wyboru wartoci False. Nastpnie wykorzystywany jest blok Select Case sucy do wybrania waciwego
fragmentu kodu na podstawie wartoci zmiennej WhichOne. W kadym z wariantw

Rozdzia 10. OPERATORY RELACYJNE I LOGICZNE

229

wyraenia Select budujemy cig znakw txtExpression poprzez zczenie argumentw z pl txtArgument1 oraz txtArgument2. Pomidzy nimi umieszczana jest
staa tekstowa reprezentujca wybrany operator. Na kocu, za pomoc prostej instrukcji If decydujemy, czy ma by zaznaczone pole wyboru True, czy False. Wszystkie
bloki Case zawieraj kod dziaajcy na tej samej zasadzie.
Przykadowe wykonanie naszego programu widzimy na rysunku 10.2.
RYSUNEK 10.2.
Przykadowe
wykonanie programu
RelationalOperators

Warto zauway, e operatory relacyjne mona wykorzystywa rwnie do porwnywania danych tekstowych. Przykad pokazuje, e wyraenie testowe
"A" > "B"

daje logiczn warto False. Dlaczego wyraenie to jest nieprawdziwe? Przypomnijmy


sobie, e porwnywanie znakw odbywa si na podstawie liczbowych wartoci kodw
liter A i B. Kod litery A wynosi 65, a kod litery B wynosi 66, zatem cae wyraenie nie jest prawdziwe. Oczywicie, jako argumenty do porwnania mona poda
wartoci liczbowe.
Warto przetestowa dziaanie programu, aby dobrze zapozna si z funkcjonowaniem
operatorw relacyjnych. Do testw powinnimy wykorzysta zarwno dane liczbowe, jak i tekstowe. Zmienne tekstowe mog przy tym zawiera wicej ni jeden
znak. Jaki na przykad bdzie wynik porwnania napisw JOYCE i Joyce i jak
mona go uzasadni?

Operatory logiczne
Operator logiczny (logical operator) suy do porwnywania argumentw typu Boolean i zwraca warto True lub False (wynik typu Boolean). W tabeli 10.2 przedstawiona jest lista operatorw logicznych dostpnych w jzyku Visual Basic .NET.
Jak wida w tabeli 10.2, wszystkie operatory logiczne z wyjtkiem negacji s binarne.
W kolejnym podrozdziale omwimy dokadnie kady z nich.

230

VISUAL BASIC .NET. ALCHEMIA PROGRAMOWANIA

TABELA 10.2. Operatory logiczne jzyka Visual Basic .NET


Operator Logiczny

Typ

Znaczenie

And

Binarny

Logiczne i

Or

Binarny

Logiczne lub

Xor

Binarny

Logiczne lub wyczajce

Not

Unarny

Logiczna negacja

AndAlso

Binarny

Warunkowe i

OrElse

Binarny

Warunkowe lub

Operator logiczny And


Operator logiczny And (logiczne i) porwnuje dwa argumenty i zwraca logiczn
warto True wtedy i tylko wtedy, gdy oba argumenty maj logiczn warto True.
Relacj t mona zobaczy w tabeli prawdy operatora And. Tabela prawdy (truth table)
pokazuje list moliwych kombinacji wartoci argumentw i wynik wykonania na
nich operacji logicznego dodawania. Takie zestawienie przedstawia tabela 10.3.
TABELA 10.3. Tabela prawdy operatora logicznego And
Argument1

Argument2

Wynik

True

True

True

True

False

False

False

True

False

False

False

False

Zwrmy uwag, e wynik True dla operatora logicznego And uzyskujemy tylko
wtedy, gdy oba argumenty maj warto True. Kada inna kombinacja daje wynik
False. Przyjrzyjmy si nastpujcemu wyraeniu:
Result = 10 > 5 And 100 > 60

Jeli wykonamy wszystkie testy relacyjne, otrzymamy:


Result = 10 > 5 And 100 > 60
Result = True And True ' kolumny 1. i 2. w wierszu 1. tabeli 10.3
Result = True
' wiersz 1., kolumna 3. tabeli 10.3

Ze wzgldu na to, e 10 jest wiksze od 5, pierwszy test relacyjny daje wynik True.
Rwnie 100 jest wiksze od 60, wic drugi test take daje wynik True. Z tabeli 10.3
dla wartoci True obu argumentw odczytujemy wynik True.
Sprbujmy zmodyfikowa nasze wyraenie, odwracajc drugi operator relacyjny:
Result = 10 > 5 And 100 < 60
Result = True And False ' kolumny 1. i 2. w wierszu 3. tabeli 10.3
Result = False
' wiersz 3., kolumna 3. tabeli 10.3

Rozdzia 10. OPERATORY RELACYJNE I LOGICZNE

231

Oto jeszcze kilka przykadw wraz z wynikami pokazanymi jako komentarze na


kocu linii:
Result
Result
Result
Result
Result
Result

=
=
=
=
=
=

10
10
10
10
10
10

= 5 And 100 > 60


>= 5 And 100 <> 60
<> 5 And 100 <> 60
> 5 And 100 <= 60
> 5 And 100 > 60 And 20 < 80
> 5 And 100 < 60 And 20 < 80

'
'
'
'
'
'

False
True
True
False
True
False

Prosz przeanalizowa wszystkie przykady, aby nabra przekonania o poprawnoci


pokazanych wynikw. W ostatnich dwch przykadach wida, e w wyraeniu moe
si znajdowa wicej ni jeden operator logicznego i.

Operator logiczny Or
Operator logicznego lub porwnuje dwa argumenty i zwraca wynik True, jeli ktrykolwiek z nich ma warto True. Poniej przedstawiona jest jego tabela prawdy.
TABELA 10.4. Tabela prawdy operatora Or
Argument1

Argument2

Wynik

True

True

True

True

False

True

False

True

True

False

False

False

Test logiczny Or daje wynik True zawsze wtedy, gdy ktrykolwiek z argumentw ma
warto True. Wynik False uzyskujemy tylko wtedy, gdy oba argumenty maj warto False. Uyjmy tych samych przykadw, co poprzednio, wykonujc na nich
tym razem logiczny test lub:
Result
Result
Result
Result
Result
Result

=
=
=
=
=
=

10
10
10
10
10
10

= 5 Or 100 > 60
>= 5 Or 100 <> 60
<> 5 Or 100 <> 60
> 5 Or 100 <= 60
> 5 Or 100 > 60 Or 20 < 80
> 5 Or 100 < 60 Or 20 < 80

'
'
'
'
'
'

True
True
True
True
True
True

Ze wzgldu na to, e w kadym przykadzie przynajmniej jedno wyraenie jest prawdziwe, w kadym uzyskujemy wynik True. Cennym wiczeniem moe by porwnanie wynikw uzyskanych przy uyciu operatorw And i Or, gdy uatwi to zrozumienie rnicy midzy nimi.

232

VISUAL BASIC .NET. ALCHEMIA PROGRAMOWANIA

Operator logiczny Xor


Operator Xor wykonuje test logiczny wyczajcego lub. Zwraca on warto True
wtedy i tylko wtedy, gdy tylko jeden z argumentw ma warto True. Gdy oba argumenty maj warto True lub oba maj warto False, uzyskujemy wynik False.
Poniej przedstawiona jest tabela prawdy logicznego operatora Xor.
TABELA 10.5. Tabela prawdy logicznego operatora Xor
Argument1

Argument2

Wynik

True

True

False

True

False

True

False

True

True

False

False

False

Uyjmy znowu tych samych przykadw, stosujc w nich operator logiczny Xor:
Result
Result
Result
Result
Result
Result

=
=
=
=
=
=

10
10
10
10
10
10

= 5 Xor 100 > 60


>= 5 Xor 100 <> 60
<> 5 Xor 100 <> 60
> 5 Xor 100 <= 60
> 5 Xor 100 > 60 Xor 20 < 80
> 5 Xor 100 < 60 Xor 20 < 80

'
'
'
'
'
'

True
False
False
True
True
False

Pierwsze cztery przykady s atwe do zrozumienia, ale ostatnie dwa wymagaj wyjanie. Przyjrzyjmy si pierwszemu z nich:
Result
Result
Result
Result

=
=
=
=

10 > 5 Xor 100 > 60 Xor 20 < 80


True Xor True Xor True
False Xor True
True

' True

Gwna trudno pojawia si w kroku 2. Poniewa rozwizujemy wyraenie z dwoma


operatorami Xor, obie operacje maj taki sam priorytet. Dlatego te trzeba spojrze
na ten krok tak, jakby by zapisany w nastpujcy sposb:
Result = (True Xor True) Xor True

' True

W tabeli 10.5 widzimy, e gdy oba argumenty maj warto True, test Xor daje wynik
False. W ostatnim kroku False Xor True daje wynik True.
Drugie zoone wyraenie jest obliczane w taki sposb:
Result
Result
Result
Result

=
=
=
=

10 > 5 Xor 100 < 60 Xor 20 < 80


(True Xor False) Xor True
True Xor True
False

' False

Ostatecznym wynikiem jest warto False, gdy w ostatnim kroku wykonujemy test
na dwch wyraeniach o wartoci True.

Rozdzia 10. OPERATORY RELACYJNE I LOGICZNE

233

Prawdopodobnie nie bdziemy zbyt czsto wykorzystywa operatora Xor. Jest on


jednak bardzo przydatny w niektrych zastosowaniach, na przykad przy operowaniu
na obrazach.

Operacje poziomu bitowego wykonywane


za pomoc operatorw logicznych
Czasami pojawia si konieczno zejcia na poziom bitw pewnych danych. Przykady zastosowa takiego postpowania mona znale w dekodowaniu zakodowanych danych, w oprogramowaniu komunikacyjnym i graficznym. Aby przyjrze
si operacjom na poziomie bitowym, wykorzystamy kod programu pokazanego
na rysunku 10.1. Musimy uzupeni procedur obsugi zdarzenia Click() obiektu
btnTest zgodnie z listingiem 10.2. Pokazanych jest tu tylko kilka pierwszych linii,
poniewa reszta pozostaa niezmieniona w stosunku do listingu 10.1.
LISTING 10.2. Czciowy listing kodu procedury obsugi zdarzenia Click() obiektu btnTest
Private Sub btnTest_Click(ByVal sender As System.Object, ByVal e As _
System.EventArgs) Handles btnTest.Click
ckbTrue.Checked = False
' Rozpoczynamy od ustawienia wartoci False
ckbFalse.Checked = False
Dim Result As Boolean
' Tu jest nowa linia kodu!
Result = CBool(5 And 4)

' Ostatnia linia nowego kodu!

Select Case WhichOne


Case 1
' Pozostaa cz kodu procedury

W powyszym listingu zwrmy uwag na dwie nowe linie, w ktrych zdefiniowana


jest zmienna o nazwie Result i typie danych Boolean. W kolejnej linii wykonywany
jest test logiczny And na wartociach 5 i 4. Skompilujmy program, ale poczekajmy
jeszcze z jego uruchamianiem.

Ustawianie punktu przerwania w debugerze


Widzc w oknie Form kod procedury obsugi zdarzenia Click() obiektu btnTest,
kliknijmy lewy margines linii, w ktrej znajduje si polecenie Select Case. Powinna
si pojawi brzowoczerwona linia podobna do pokazanej na rysunku 10.3. Nosi
ona nazw linii punktu przerwania (breakpoint line) i oznacza, e w tym miejscu zosta
ustanowiony punkt przerwania programu.
Punkt przerwania (breakpoint) jest waciwoci debugera Visual Basic .NET umoliwiajc zatrzymanie wykonywania programu na wybranej linii. Po jej osigniciu
dziaanie programu zostaje wstrzymane. Mona wtedy skontrolowa wartoci wszelkich zmiennych istniejcych w danym momencie.

234

VISUAL BASIC .NET. ALCHEMIA PROGRAMOWANIA

RYSUNEK 10.3.
Ustawianie punktu
przerwania
w procedurze obsugi
zdarzenia Click()
obiektu btnTest

Po ustawieniu punktu przerwania i skompilowaniu programu naley nacisn klawisz


<F5>. (Przypomnijmy, e nacinicie <F5> jest jednym ze sposobw uruchamiania
programu). Po tym naley klikn przycisk Test. Na rysunku 10.4 pokazany jest stan
programu po osigniciu punktu przerwania.
RYSUNEK 10.4.
Osignicie punktu
przerwania podczas
wykonywania procedury

W momencie wstrzymania wykonywania programu w wyznaczonej linii zmienia


ona swj kolor z brzowoczerwonego na ty, aby wskaza miejsce, w ktrym znajduje si sterowanie. W lewym dolnym rogu rysunku 10.4 widzimy zakadki zatytuowane: Autos, Locals i Watch. Kliknijmy zakadk Locals. Ekran powinien wyglda

Rozdzia 10. OPERATORY RELACYJNE I LOGICZNE

235

podobnie do tego z rysunku 10.5. (Moemy zatrzyma dziaanie debugera, wybierajc z menu polecenie Debug, Stop Debugging lub naciskajc niebieski kwadracik na pasku narzdzi).
RYSUNEK 10.5.
Okno zakadki Locals
dla procedury obsugi
zdarzenia Click()
obiektu btnTest

Na rysunku 10.5 widzimy, e w oknie Locals pokazane s zmienne o zasigu lokalnym. Jest wrd nich zmienna Result majca warto True. Tak wic test logiczny
And przeprowadzony na wartociach 5 i 4 daje wynik True. Dlaczego wynik jest wanie taki? Wartoci 5 i 4 s niezerowe, przez co s widziane jako argumenty o wartoci logicznej True, std wynik testu ma warto typu Boolean True.
Teraz zmienimy definicj zmiennej Result z typu Boolean na Integer:
Dim Result As Integer

Nastpnie skompilujemy i uruchomimy program. Wynik powinien wyglda podobnie


do przedstawionego na rysunku 10.6.
Result ma teraz warto 4 zamiast True. Wynika to ze zdefiniowania tej zmiennej
jako typu danych Integer, a nie Boolean. Gdy bya ona typu Boolean, moga przyjmowa tylko jedn z dwch wartoci: True lub False. Teraz Result jest w stanie
przyj wynik operacji And wykonanej na poziomie bitowym na wartociach 5 i 4.
Na czym polega taka operacja?

Operacja And poziomu bitowego polega na porwnaniu dwch wartoci bit po bicie,
czyli wykonaniu logicznego testu And ich poszczeglnych bitw. Oto binarne reprezentacje argumentw:
5 = 00000101
4 = 00000100

236

VISUAL BASIC .NET. ALCHEMIA PROGRAMOWANIA

RYSUNEK 10.6.
Zmienna Result
przedstawiajca wynik
operacji And wykonanej
na poziomie bitowym

Pamitamy, e pierwszym bitem liczby jest ten, ktry znajduje si najbardziej po


prawej stronie. W przypadku liczby 5 bit ten ma warto 1. W przypadku liczby
4 pierwszy bit ma warto 0. Z rozdziau 4. przypominamy sobie, e jedynk mona
traktowa jako logiczn warto True, a zero jako logiczn warto False. Tak wic
pierwszy bit liczby 5 ma warto True, a pierwszy bit liczby 4 warto False.
Spjrzmy teraz na tabel 10.3 przedstawiajc wyniki testu logicznego And, gdzie True
And False daje wynik False, czyli 0.
Jeli zastosujemy operator And dla wszystkich bitw obu liczb, uzyskamy nastpujcy
wynik:
5 = 00000101
4 = 00000100
-----------00000100 = operacja poziomu bitowego And dla argumentw 5 i 4

Zauwamy, e w wyniku przeprowadzenia operacji And na wszystkich bitach tylko na


pozycji 3. uzyskujemy wynik 1. Jest tak dlatego, e na pozycji 3. oba bity maj warto
logiczn True. Jeli przekonwertujemy wynik na liczb dziesitn, otrzymamy warto 4.
Dokadnie tak warto zmiennej Result widzimy w oknie Locals na rysunku 10.6.
Zobaczmy, co si bdzie dziao dla innych wartoci. Sprbujmy zmieni argumenty
na 16 i 4, zrekompilujmy program i obejrzyjmy wyniki. Oto one:
16 = 00010000
4 = 00000100
------------00000000 = operacja poziomu bitowego And dla argumentw 16 i 4

W tym przypadku, ze wzgldu na brak wartoci 1 jednoczenie dla bitw obu liczb
na ktrejkolwiek z pozycji, wynik wynosi 0.

Rozdzia 10. OPERATORY RELACYJNE I LOGICZNE

237

Operacje poziomu bitowego Or i Xor


Na poziomie bitowym mona te wykorzystywa funkcje Or i Xor. Aby zobaczy
ich dziaanie, zmiemy instrukcj z operatorem And z listingu 10.2 na nastpujc:
Result = 5 Or 4

Po skompilowaniu i uruchomieniu programu zobaczymy wynik. Na podstawie tabeli


10.4 moemy na poziomie poszczeglnych bitw oczekiwa nastpujcych wynikw:
5 = 00000101
4 = 00000100
-----------00000101 = operacja poziomu bitowego Or dla argumentw 5 i 4

Jest to warto 5. Logiczna operacja Or daje wynik True, gdy ktrykolwiek z argumentw ma warto True. Jaki bdzie wynik operacji 16 Or 4?
16 = 00010000
4 = 00000100
------------00010100 = operacja poziomu bitowego Or dla argumentw 16 i 4

Jeli przekonwertujemy t warto binarn, otrzymamy liczb 20.


Teraz wykonajmy operacj Xor na liczbach 5 i 4, odczytujc wynik z tabeli 10.5:
5 = 00000101
4 = 00000100
-----------00000001 = operacja poziomu bitowego Xor dla argumentw 5 i 4

Ze wzgldu na to, e Xor zwraca logiczn warto True tylko wtedy, gdy oba bity
rni si, tylko dla pierwszego bitu otrzymujemy wynik True. W systemie dziesitnym jest to liczba 1. Jaki bdzie wynik dla argumentw 16 i 4?
16 = 00010000
4 = 00000100
------------00010100 = operacja poziomu bitowego Xor dla argumentw 16 i 4

Wynik wynosi 20.


Raczej rzadko bdziemy korzysta w swoich programach z operacji na poziomie
bitowym. S one przydatne w pewnych zastosowaniach, takich jak oprogramowanie
telekomunikacyjne (na przykad oprogramowanie modemw), przetwarzanie obrazw
i algorytmy kodowania czy dekodowania.

Priorytety operatorw
Omwilimy do tej pory operatory arytmetyczne, relacyjne i logiczne dostpne
w jzyku Visual Basic .NET. W skomplikowanych wyraeniach mog si znale ich
wszystkie trzy typy jednoczenie. W jaki sposb Visual Basic .NET okrela kolejno

238

VISUAL BASIC .NET. ALCHEMIA PROGRAMOWANIA

wykonywania poszczeglnych operacji w takich zoonych instrukcjach? O kolejnoci


decyduj priorytety operatorw.
W tabeli 10.6 przedstawiona jest kolejno wykonywania wszystkich operatorw
jzyka Visual Basic .NET, poczwszy od posiadajcych najwyszy priorytet do tych
o coraz niszych priorytetach. (Tabela 10.6 zawiera take kilka operatorw, ktre
bd omwione dopiero w dalszych rozdziaach).
TABELA 10.6. Priorytety operatorw w jzyku Visual Basic .NET
Operator

Nazwa

Typ

Potga

Arytmetyczny

Negacja

Arytmetyczny

*, /

Mnoenie, dzielenie

Arytmetyczny

Dzielenie cakowitoliczbowe

Arytmetyczny

Mod

Modulo

Arytmetyczny

+, -

Dodawanie, odejmowanie

Arytmetyczny

&

czenie tekstw

czenie tekstw

Rwno

Relacyjny

<>

Nierwno

Relacyjny

<, >

Mniejszy, wikszy

Relacyjny

>=

Wikszy lub rwny

Relacyjny

<=

Mniejszy lub rwny

Relacyjny

Like

Porwnywanie tekstw

Porwnywanie tekstw

Is

Porwnywanie obiektw

Porwnywanie obiektw

TypeOf...Is

Porwnywanie typw

Porwnywanie typw

Not

Negacja

Logiczny

And, AndAlso

i, take

Logiczny

Or, Xor,
OrElse

lub, wyczajce lub, w przeciwnym


razie

Logiczny

Przypisanie

Przypisanie

Oglna zasada jest taka, e najwyszy priorytet maj operatory arytmetyczne, nastpnie relacyjne, a pniej logiczne. Chyba warto zagi naronik tej strony, aby atwo znale powysz tabel, gdy zaczniemy omawia bardziej zoone przykady
programw.
Naley rwnie pamita, e kolejno wykonywania operatorw mona zmieni,
stosujc nawiasy (patrz rozdzia 9).

Rozdzia 10. OPERATORY RELACYJNE I LOGICZNE

239

Podsumowanie
W tym rozdziale powiedzielimy, w jaki sposb w programach mona uywa operatorw relacyjnych i logicznych. Zobaczylimy te, jak mona posugiwa si tabelami
prawdy do sprawdzania wynikw operacji logicznych. Omwilimy wpyw priorytetw na oba typy operatorw. Na kocu nauczylimy si stosowania operatorw
logicznych do wykonywania operacji na poziomie bitowym. Mimo i niektrych
omwionych tu technik nie bdziemy w tej chwili potrzebowa w pisanych programach, warto zachowa w pamici te informacje, gdy w przyszoci moe si okaza,
e pomog nam one elegancko rozwiza jaki trudny problem.

Pytania kontrolne
Porada dla programistw
Testujc krtkie programy przedstawione w tej czci, mona wpisa ich kod
do procedury obsugi zdarzenia Load() formularza. Nie potrzeba te uywa pl
tekstowych ani adnych innych formantw. W celach testowych wystarczy umieci
punkt przerwania w linii End Sub tej procedury. Mona, oczywicie, analizowa
wartoci wszelkich zmiennych, umieszczajc nad nimi kursor.

1. Do czego su operatory relacyjne?


O: Su one do porwnywania wartoci. Ze wzgldu na to, e porwnywane s
zawsze dwie wartoci, s to operatory binarne wymagajce dwch argumentw.
Operatory te s podstaw wszelkiego podejmowania decyzji w programach na
podstawie wartoci danych.
2. Przypumy, e mamy zmienn o nazwie Gender (pe), przyjmujc warto 0
dla kobiet i 1 dla mczyzn. Jak napisa kod programu sprawdzajcego warto
zmiennej Gender i na tej podstawie wywietlajcego napis Mczyzna lub
Kobieta w oknie komunikatu?
O: Kod moe wyglda nastpujco:
Dim Gender As Integer ' Pe: 0 Kobieta, 1 - Mczyzna
Gender = 0
If Gender = 0 Then
MessageBox.Show("Kobieta")
' Wywietl komunikat, jeli to kobieta
Else
MessageBox.Show("Mczyzna") ' Wywietl komunikat, jeli to mczyzna
End If

W tym przykadzie wykonujemy test If przy uyciu operatora rwnoci, na podstawie wyniku okrelamy, ktr pe wywietli, wywoujc metod MessageBox().

240

VISUAL BASIC .NET. ALCHEMIA PROGRAMOWANIA

3. Jak warto przyjmie zmienna Result po wykonaniu nastpujcej instrukcji?


Result = 10 > 5

O: Mona odpowiedzie na to pytanie, wykonujc nastpujcy kod:


Dim Result As Integer
Result = 10 > 5
MessageBox.Show(CStr(Result))

Jak warto wyniku przewidujemy i dlaczego wanie tak? Jeli po uruchomieniu programu otrzymamy wynik inny od oczekiwanego, sprbujmy ustali,
jaka jest tego przyczyna. (Wskazwka: w jzyku Visual Basic .NET logiczna warto True jest reprezentowana przez liczb 1, a warto False liczb 0).
4. Jak warto przyjmie zmienna Result po wykonaniu nastpujcej instrukcji?
Result = (10 > 5) And (5 > 7)

O: Odpowied mona sprawdzi za pomoc nastpujcego kodu:


Dim Result As Integer
Result = (10 > 5) And (5 > 7)
MessageBox.Show(CStr(Result))

Gdyby uzyskana odpowied bya inna od oczekiwanej, gdzie popenilimy bd?


5. Jak warto przyjmie zmienna Result po wykonaniu nastpujcej instrukcji?
Result = (10 > 5) Or (5 > 7)

O: Odpowied mona sprawdzi za pomoc nastpujcego kodu:


Dim Result As Integer
Result = (10 > 5) Or (5 > 7)
MessageBox.Show(CStr(Result))

Powinnimy umie wyjani, dlaczego zmienna Result przyjmuje wanie tak


warto. Wane jest to, aby odrni t odpowied od odpowiedzi na pytanie kontrolne numer 4.
6. Jak warto przyjmie zmienna Result po wykonaniu nastpujcej instrukcji?
Result = Not 3

O: Odpowied mona sprawdzi za pomoc nastpujcego kodu:


Dim Result As Integer
i = 3
Result = Not 3
MessageBox.Show(CStr(Result))

Wynikiem unarnej operacji Not jest bitowe uzupenienie negowanego wyraenia


w tym przypadku liczby 3. Oto binarna reprezentacja liczby 3:
00000011

Bitowe uzupenienie polega na odwrceniu kadego bitu wyraenia, tak wic po


wykonaniu operacji Not otrzymamy w zapisie bitowym:
11111100

Rozdzia 10. OPERATORY RELACYJNE I LOGICZNE

241

Zauwamy, e wszystkie jedynki staj si zerami i odwrotnie. Jednak ze wzgldu


na wczenie bitu znaku wynik jest liczb ujemn. Ze wzgldu na sposb interpretacji bitu znaku odpowied brzmi wic 4.
7. Wyobramy sobie funkcj o nazwie IsItOdd() zwracajc wynik niezerowy,
gdy przekazana do niej warto jest nieparzysta, oraz wynik 0, gdy warto ta
jest parzysta. Co zostanie wywietlone w oknie komunikatu po uruchomieniu
programu?
Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As _
System.EventArgs) Handles MyBase.Load
Dim Result As Integer, TestValue As Integer
TestValue = 55 < 100 ' liczbowa warto testu logicznego
If IsItOdd(TestValue) Then
MessageBox.Show("Witaj")
Else
MessageBox.Show("Do zobaczenia")
End If
End Sub
Private Function IsItOdd(ByVal num As Integer) As Integer
num = num Mod 2
Return num
End Function

O: Interesujc czci kodu jest test If. Pierwszy test sprawdzajcy, czy 55 jest mniejsze od 100 daje logiczny wynik True, czyli przypisanie do zmiennej TestValue
wartoci 1. Funkcja IsItOdd() wywoywana jest z parametrem 1, czyli liczb
nieparzyst (ujemn). Funkcja zwraca zatem wynik 1. Po wyjciu z funkcji testujemy za pomoc instrukcji If zwracan warto 1, a poniewa kada liczba
niezerowa jest uznawana za logiczn warto True, program wywietla w oknie
komunikatu napis Witaj.
8. Warto biec przepywu rodkw pieninych mona obliczy za pomoc
nastpujcego rwnania:
PV = Dochd / (1.0 + Oprocentowanie) ^ Lata

Jeli na przykad Dochd wynosi 100 dolarw, oprocentowanie 5% a liczba lat 2,


warto bieca wynosi 90,70. Oznacza to, e jeli zainwestujemy 90,70 na 2 lata
w aktywa o stopie zwrotu 5%, po upywie tych dwch lat bdziemy mie 100.
Prosz napisa kod do obliczenia wartoci biecej dla 200 dolarw zainwestowanych na 3 lata ze stop zwrotu 5%.
O: Oto kod:
Dim Value As Double
Value = 200 / (1.05) ^ 3

Wynik wynosi 172,77 dolarw. Czy nawiasy s potrzebne? Dlaczego? Mona


sprbowa uoglni ten program, uywajc pl tekstowych do wprowadzania
oprocentowania, kwoty i liczby lat oraz wywietlania wyniku.

You might also like