You are on page 1of 58

Id do

Spis treci
Przykadowy rozdzia
Katalog ksiek
Katalog online
Zamw drukowany
katalog
Twj koszyk
Dodaj do koszyka
Cennik i informacje
Zamw informacje
o nowociach
Zamw cennik
Czytelnia
Fragmenty ksiek
online

Kontakt
Helion SA
ul. Kociuszki 1c
44-100 Gliwice
tel. 32 230 98 63
e-mail: helion@helion.pl
Helion 19912010

Visual Basic 2010.


Od podstaw
Autorzy: Thearon Willis, Bryan Newsome
Tumaczenie: Tomasz Walczak
ISBN: 978-83-246-2827-8
Tytu oryginau: Beginning Visual Basic 2010
Format: 172245, stron: 736

Zosta specjalist jzyka Visual Basic 2010!


Szczegowy opis tworzenia aplikacji
Programowanie obiektowe z pomoc jzyka Visual Basic 2010
Debugowanie oraz obsuga bdw
Wsppraca z bazami danych
Visual Basic 2010 to najnowsza wersja jzyka programowania Visual Basic .NET, jednego z jzykw
wsppracujcych ze rodowiskiem Visual Studio 2010. Jego najwiksze zalety to atwo stosowania
i szybko tworzenia szerokiego wachlarza aplikacji, od tych przeznaczonych dla systemu Windows,
poprzez aplikacje internetowe, a po te zaprojektowane dla urzdze mobilnych. Platforma .NET
daje programistom jzyka Visual Basic 2010 moliwo tworzenia w peni obiektowych programw,
napisanych za pomoc klas bazowych wsplnych dla wszystkich jzykw obsugiwanych przez
Visual Studio 2010.
Dziki tej ksice poznasz zagadnienia potrzebne do tworzenia wasnych programw w jzyku
Visual Basic 2010. Naucz si podstaw budowania aplikacji Windows Forms, obsugi bdw oraz
debugowania wasnego kodu. Poznaj sposoby programowania obiektowego i zastosuj je w swoich
aplikacjach. Dowiedz si, jak wsppracowa z zewntrznymi bazami danych, tworzy aplikacje
sieciowe oraz uywa jzyka XML w swoich programach. Zdobd wiedz niezbdn do tego, aby
budowa profesjonalne aplikacje, ktre wykorzystuj wszystkie moliwoci jzyka Visual Basic 2010.
Aplikacje Windows Forms
Podstawowe komendy
Programowanie obiektowe
Platforma .NET
Technologia ASP.NET
Struktury danych
Wykorzystanie jzyka XML
Wdraanie aplikacji
Wsppraca z bazami danych
Obsuga bdw
Docz do grona najlepszych programistw jzyka Visual Basic 2010!

Spis treci

Podzikowania .............................................................................................. 14
O autorach ..................................................................................................... 15
O redaktorze merytorycznym ...................................................................... 17
Wprowadzenie .............................................................................................. 19
Rozdzia 1.

Wprowadzenie do jzyka Visual Basic 2010 ............................................... 23


Programowanie oparte na zdarzeniach .....................................................................24
Instalacja Visual Basic 2010 ........................................................................................25
rodowisko programistyczne Visual Basic 2010 ......................................................28
Ustawianie profilu ..................................................................................................29
Menu ........................................................................................................................29
Paski narzdzi .........................................................................................................30
Tworzenie prostej aplikacji .........................................................................................31
Okna rodowiska Visual Studio 2010 ..................................................................32
Okno narzdzi .........................................................................................................35
Zmodyfikowana notacja wgierska ......................................................................39
Edytor kodu .............................................................................................................40
Uywanie systemu pomocy .........................................................................................43
Podsumowanie ..............................................................................................................43

Rozdzia 2.

Platforma .NET .............................................................................................. 47


Zaleno Microsoftu od systemu Windows ............................................................47
MSN 1.0 ...................................................................................................................48
Wizja .NET ..............................................................................................................49
Czy nie przypomina to Javy? .................................................................................50
Co dalej? ...................................................................................................................51
Pisanie oprogramowania dla systemu Windows .....................................................51
Klasy platformy .NET ............................................................................................52
Wykonywanie kodu ...............................................................................................53
Wsplne rodowisko uruchomieniowe .....................................................................54
adowanie i wykonywanie kodu ..........................................................................55
Izolacja aplikacji .....................................................................................................55
Bezpieczestwo .......................................................................................................55
Wspdziaanie .......................................................................................................56
Obsuga wyjtkw ..................................................................................................56
Wsplny system typw i specyfikacja wsplnego jzyka ........................................57
Podsumowanie ..............................................................................................................57

6 VISUAL BASIC 2010. OD PODSTAW


Rozdzia 3.

Pisanie programw ....................................................................................... 61


Informacje i dane ..........................................................................................................61
Algorytmy ................................................................................................................62
Czym jest jzyk programowania? .........................................................................63
Zmienne .........................................................................................................................63
Komentarze i odstpy ..................................................................................................66
Komentarze .............................................................................................................66
Odstpy ....................................................................................................................68
Typy danych ..................................................................................................................68
Uywanie liczb ........................................................................................................68
Podstawowe operacje matematyczne na liczbach cakowitych ........................69
Skrcone operatory matematyczne ......................................................................71
Arytmetyka na liczbach zmiennoprzecinkowych ..............................................73
Uywanie cigw znakw .....................................................................................76
Uywanie dat ...........................................................................................................84
Zmienne logiczne ...................................................................................................90
Przechowywanie zmiennych .......................................................................................90
System dwjkowy ...................................................................................................91
Bity i bajty ................................................................................................................91
Reprezentowanie wartoci .....................................................................................92
Przeksztacanie wartoci ........................................................................................93
Metody ...........................................................................................................................95
Dlaczego warto uywa metod? ............................................................................95
Metody z tego rozdziau ........................................................................................96
Tworzenie metod ....................................................................................................99
Nazwy metod ........................................................................................................102
Zasig .....................................................................................................................103
Podsumowanie ............................................................................................................105

Rozdzia 4.

Sterowanie przebiegiem programu ..........................................................109


Podejmowanie decyzji ................................................................................................109
Instrukcja If .................................................................................................................110
Instrukcja Else .......................................................................................................112
Obsuga wielu alternatyw za pomoc instrukcji ElseIf ....................................113
Zagniedone instrukcje If ..................................................................................114
Jednowierszowe instrukcje If ..............................................................................114
Operatory porwnania ........................................................................................114
Porwnywanie cigw znakw ...........................................................................124
Wyraenie Select Case ................................................................................................125
Uywanie wyraenia Select Case bez uwzgldniania wielkoci liter .............129
Warunki z wieloma wartociami ........................................................................132
Wyraenie Case Else ............................................................................................133
Uywanie rnych typw danych w wyraeniach Select Case .......................134
Ptle ..............................................................................................................................134
Ptle For Next ..................................................................................................134
Ptle Do Loop ..................................................................................................140

Spis treci 7

Ptle zagniedone ...............................................................................................145


Wczesne wychodzenie z ptli ..............................................................................147
Ptle nieskoczone ...............................................................................................149
Podsumowanie ............................................................................................................150
Rozdzia 5.

Struktury danych ........................................................................................153


Wprowadzenie do korzystania z tablic ....................................................................153
Definiowanie i uywanie tablic ...........................................................................153
Uywanie ptli For Each Next .......................................................................156
Przekazywanie tablic jako parametrw .............................................................159
Sortowanie tablic ..................................................................................................161
Przechodzenie w odwrotnym kierunku ............................................................162
Inicjowanie tablicy ...............................................................................................163
Wyliczenia ...................................................................................................................165
Uywanie wylicze ...............................................................................................165
Okrelanie stanu ...................................................................................................168
Ustawianie niepoprawnych wartoci .................................................................170
Stae ...............................................................................................................................171
Uywanie staych ..................................................................................................171
Stae rnych typw .............................................................................................173
Struktury ......................................................................................................................174
Tworzenie struktur ...............................................................................................174
Dodawanie waciwoci do struktur ..................................................................177
Tablice ArrayList ........................................................................................................178
Uywanie klasy ArrayList ....................................................................................178
Usuwanie elementw z listy ArrayList ..............................................................182
Wywietlanie elementw tablic ArrayList ........................................................185
Uywanie kolekcji .......................................................................................................186
Tworzenie kolekcji CustomerCollection ...........................................................187
Dodawanie waciwoci Item ..............................................................................188
Wyszukiwanie elementw za pomoc kolekcji Hashtable ....................................190
Uywanie kolekcji Hashtable ..............................................................................190
Usuwanie elementw metody Remove, RemoveAt i Clear .......................193
Wraliwo na wielko znakw ........................................................................195
Zaawansowane techniki manipulacji tablicami ......................................................197
Tablice dynamiczne ..............................................................................................197
Sowo kluczowe Preserve .....................................................................................199
Podsumowanie ............................................................................................................200

Rozdzia 6.

Jzyk XAML ..................................................................................................203


Czym jest XAML? .......................................................................................................203
Skadnia jzyka XAML ...............................................................................................205
Technologia WPF .......................................................................................................208
Tworzenie bogatych interfejsw uytkownika w aplikacjach WPF ......................208
Uywanie standardowych kontrolek technologii WPF ..................................214
Podczanie zdarze .............................................................................................218
Podsumowanie ............................................................................................................222

8 VISUAL BASIC 2010. OD PODSTAW


Rozdzia 7.

Tworzenie aplikacji dla systemu Windows ...............................................225


Reagowanie na zdarzenia ...........................................................................................225
Ustawianie zdarze przycisku ............................................................................226
Tworzenie prostych aplikacji ....................................................................................233
Tworzenie formularza ..........................................................................................233
Zliczanie liter ...............................................................................................................236
Zliczanie sw ..............................................................................................................239
Bardziej zoone aplikacje .........................................................................................244
Aplikacja do edycji tekstu ....................................................................................245
Tworzenie paska narzdzi .........................................................................................246
Tworzenie paska stanu ...............................................................................................250
Tworzenie pola edycji ................................................................................................252
Usuwanie zawartoci pola edycji ..............................................................................254
Obsuga dziaania przyciskw paska narzdzi ........................................................256
Uywanie wielu formularzy ......................................................................................262
Okno z informacjami o programie ....................................................................262
Podsumowanie ............................................................................................................265

Rozdzia 8.

Okna dialogowe ..........................................................................................269


Okno komunikatu ......................................................................................................269
Ikony okna komunikatu ......................................................................................270
Przyciski okna komunikatu ................................................................................271
Ustawianie przycisku domylnego .....................................................................271
Inne opcje ..............................................................................................................271
Skadnia metody Show .........................................................................................271
Przykadowe okna komunikatu ..........................................................................273
Kontrolka OpenFileDialog ........................................................................................276
Kontrolka OpenFileDialog ..................................................................................277
Waciwoci kontrolki OpenFileDialog ............................................................277
Metody kontrolki OpenFileDialog .....................................................................279
Uywanie kontrolki OpenFileDialog .................................................................279
Kontrolka SaveFileDialog ..........................................................................................283
Waciwoci kontrolki SaveFileDialog ..............................................................284
Metody kontrolki SaveFileDialog .......................................................................285
Uywanie kontrolki SaveFileDialog ...................................................................285
Kontrolka FontDialog ................................................................................................288
Waciwoci kontrolki FontDialog ....................................................................288
Metody kontrolki FontDialog .............................................................................288
Uywanie kontrolki FontDialog .........................................................................288
Kontrolka ColorDialog ..............................................................................................291
Waciwoci kontrolki ColorDialog ...................................................................292
Uywanie kontrolki ColorDialog .......................................................................293
Kontrolka PrintDialog ...............................................................................................294
Waciwoci kontrolki PrintDialog ....................................................................295
Uywanie kontrolki PrintDialog ........................................................................296

Spis treci 9

Klasa PrintDocument ..........................................................................................296


Drukowanie dokumentu .....................................................................................296
Kontrolka FolderBrowserDialog ..............................................................................303
Waciwoci kontrolki FolderBrowserDialog ...................................................303
Uywanie kontrolki FolderBrowserDialog .......................................................304
Podsumowanie ............................................................................................................306
Rozdzia 9.

Tworzenie menu ..........................................................................................309


Waciwoci menu ......................................................................................................309
Rysunki ..................................................................................................................310
Klawisze dostpu ..................................................................................................310
Klawisze skrtu .....................................................................................................310
Znacznik wyboru ..................................................................................................310
Okno waciwoci .................................................................................................311
Tworzenie menu .........................................................................................................312
Projektowanie menu ............................................................................................312
Dodawanie paskw narzdzi i kontrolek ..........................................................314
Kod obsugujcy menu ........................................................................................316
Dodawanie kodu obsugujcego menu Widok oraz paski narzdzi .............320
Testowanie kodu ...................................................................................................321
Menu kontekstowe .....................................................................................................324
Tworzenie menu kontekstowego .......................................................................324
Wczanie i wyczanie opcji menu oraz przyciskw paska narzdzi ...........327
Podsumowanie ............................................................................................................331

Rozdzia 10. Debugowanie i obsuga bdw ................................................................333


Gwne rodzaje bdw .............................................................................................334
Bdy skadni .........................................................................................................334
Bdy wykonania ...................................................................................................337
Bdy logiczne .......................................................................................................338
Debugowanie ...............................................................................................................339
Tworzenie przykadowego programu ................................................................339
Ustawianie punktw przerwania ........................................................................355
Debugowanie za pomoc okien Watch i QuickWatch ...................................362
Uywanie okna Autos ..........................................................................................364
Uywanie okna Locals .........................................................................................364
Obsuga bdw ..........................................................................................................366
Uywanie ustrukturalizowanej obsugi bdw ...............................................367
Podsumowanie ............................................................................................................369
Rozdzia 11. Tworzenie obiektw ...................................................................................373
Wprowadzenie do podejcia obiektowego ..............................................................373
Hermetyzacja ........................................................................................................375
Metody i waciwoci ...........................................................................................375
Zdarzenia ...............................................................................................................375
Widoczno ...........................................................................................................376
Czym jest klasa? ....................................................................................................377

10 VISUAL BASIC 2010. OD PODSTAW


Tworzenie klas ............................................................................................................377
Powtrne wykorzystanie kodu .................................................................................378
Projektowanie klasy ....................................................................................................379
Stan .........................................................................................................................380
Dziaanie ................................................................................................................380
Zapisywanie stanu ................................................................................................381
Prawdziwe waciwoci ........................................................................................383
Waciwoci do odczytu i zapisu ........................................................................386
Metoda IsMoving .................................................................................................389
Konstruktory ...............................................................................................................391
Dziedziczenie ...............................................................................................................393
Dodawanie nowych metod i waciwoci ..........................................................394
Dodawanie metody GetPowerToWeightRatio ................................................397
Zmiana ustawie domylnych ............................................................................398
Polimorfizm trudne sowo, atwe pojcie ....................................................400
Przesanianie innych metod ................................................................................401
Dziedziczenie po klasie Object ...........................................................................403
Obiekty i struktury .....................................................................................................403
Klasy platformy .NET ................................................................................................404
Przestrzenie nazw .................................................................................................404
Instrukcja Imports ................................................................................................406
Tworzenie wasnych przestrzeni nazw ..............................................................407
Dziedziczenie na platformie .NET .....................................................................410
Podsumowanie ............................................................................................................411
Rozdzia 12. Zaawansowane techniki programowania obiektowego ........................413
Tworzenie przegldarki ulubionych stron internetowych ....................................413
Skrty internetowe i adresy ulubionych stron .................................................414
Uywanie klas .......................................................................................................416
Przegldanie skrtw do ulubionych stron ......................................................422
Otwieranie stron ...................................................................................................429
Inna wersja przegldarki ulubionych .......................................................................431
Dostp do ulubionych stron za pomoc zasobnika .........................................431
Wywietlanie listy ulubionych stron ..................................................................433
Uywanie wspdzielonych waciwoci i metod ...................................................436
Uywanie procedur wspdzielonych ................................................................437
Uywanie metod wspdzielonych ....................................................................441
Programowanie obiektowe i zarzdzanie pamici ...............................................442
Przywracanie pamici ..........................................................................................444
Zwalnianie zasobw .............................................................................................444
Defragmentacja i kompaktowanie .....................................................................445
Podsumowanie ............................................................................................................446
Rozdzia 13. Tworzenie bibliotek klas ............................................................................449
Biblioteki klas ..............................................................................................................450
Tworzenie biblioteki klas .....................................................................................450
Tworzenie biblioteki klas dla projektu Favorites Viewer ...............................452

Spis treci 11

Aplikacje wielowarstwowe ..................................................................................455


Uywanie silnych nazw ..............................................................................................456
Podpisywanie podzespow ................................................................................457
Wersje podzespou ...............................................................................................459
Rejestrowanie podzespow ......................................................................................460
Narzdzie Gacutil .................................................................................................460
Dlaczego utworzonego podzespou
nie wida w oknie dialogowym References? ..................................................461
Projektowanie bibliotek klas .....................................................................................461
Uywanie gotowych bibliotek klas ...........................................................................462
Podgldanie klas za pomoc przegldarki obiektw .............................................463
Podsumowanie ............................................................................................................464
Rozdzia 14. Tworzenie wasnych kontrolek formularzy Windows .............................467
Kontrolki formularzy Windows ...............................................................................468
Tworzenie i testowanie kontrolek uytkownika .....................................................468
Udostpnianie waciwoci kontrolek uytkownika ..............................................472
Dodawanie waciwoci .......................................................................................472
Udostpnianie metod kontrolki uytkownika ..................................................474
Udostpnianie zdarze kontrolki uytkownika ...............................................475
Etap projektowania a czas wykonywania programu .............................................479
Tworzenie kontrolki CommandLink .......................................................................481
Tworzenie kontrolki CommandLink ................................................................482
Uywanie kontrolki CommandLink ..................................................................490
Podsumowanie ............................................................................................................493
Rozdzia 15. Dostp do baz danych ................................................................................495
Czym s bazy danych? ................................................................................................496
Obiekty bazodanowe Microsoft Access .............................................................496
Tabele .....................................................................................................................496
Kwerendy ...............................................................................................................497
Instrukcja SELECT jzyka SQL ................................................................................497
Kwerendy w bazie danych Access ............................................................................499
Komponenty dostpu do danych .............................................................................503
DataSet ...................................................................................................................503
DataGridView .......................................................................................................504
BindingSource .......................................................................................................504
BindingNavigator .................................................................................................504
TableAdapter .........................................................................................................504
Wizanie danych .........................................................................................................505
Podsumowanie ............................................................................................................511
Rozdzia 16. Programowanie baz danych przy uyciu SQL Server i ADO.NET ............515
ADO.NET ....................................................................................................................517
Przestrzenie nazw ADO.NET .............................................................................517
Klasa SqlConnection ............................................................................................518
Klasa SqlCommand ..............................................................................................520

12 VISUAL BASIC 2010. OD PODSTAW


Klasa SqlDataAdapter ..........................................................................................522
Klasa DataSet .........................................................................................................526
Klasa DataView .....................................................................................................527
Klasy ADO.NET w praktyce .....................................................................................529
Przykad zastosowania obiektu DataSet ............................................................530
Wizanie danych .........................................................................................................538
Obiekty BindingContext i CurrencyManager ..................................................538
Wizanie kontrolek ..............................................................................................539
Podsumowanie ............................................................................................................567
Rozdzia 17. Witryny w technologii Dynamic Data .........................................................571
Tworzenie witryny typu Dynamic Data Linq to SQL ............................................571
Zmienianie projektu witryn typu Dynamic Data ............................................577
Podsumowanie ............................................................................................................583
Rozdzia 18. ASP.NET .......................................................................................................585
Architektura typu uproszczony klient .....................................................................586
Formularze WWW a formularze Windows ...........................................................587
Zalety formularzy Windows ...............................................................................587
Zalety formularzy WWW ...................................................................................587
Aplikacje sieciowe podstawowe elementy ..........................................................588
Serwery WWW .....................................................................................................588
Przegldarki ...........................................................................................................588
Hipertekstowy jzyk znacznikw .......................................................................588
Jzyk JavaScript .....................................................................................................589
Kaskadowe arkusze stylw (CSS) .......................................................................589
Technologia Active Server Pages ..............................................................................589
Zalety ......................................................................................................................590
Specjalne pliki witryn internetowych ................................................................590
Tworzenie aplikacji ..............................................................................................590
Kontrolki okno narzdzi ................................................................................591
Tworzenie witryn ........................................................................................................591
Tworzenie formularzy WWW oraz przetwarzanie
po stronie klienta i po stronie serwera ............................................................591
Lokalizacje witryn internetowych w rodowisku Visual Studio 2010 ...........597
Przekazywanie danych i sprawdzanie ich poprawnoci ..................................599
Projektowanie wygldu i stylu witryny .............................................................604
Uywanie kontrolki GridView
do tworzenia formularzy WWW sterowanych danymi ...............................609
Podsumowanie ............................................................................................................614
Rozdzia 19. Visual Basic 2010 i XML ..............................................................................619
Wprowadzenie do XML ............................................................................................619
Jak wyglda jzyk XML? ......................................................................................620
XML dla osb poznajcych Visual Basic ...........................................................622
Reguy .....................................................................................................................623

Spis treci 13

Ksika adresowa ........................................................................................................623


Tworzenie projektu ..............................................................................................623
Klasa SerializableData ..........................................................................................624
Wczytywanie plikw XML ..................................................................................630
Modyfikowanie danych .......................................................................................633
Wysyanie poczty elektronicznej ........................................................................634
Tworzenie listy adresw ......................................................................................635
Pomijanie wybranych skadowych .....................................................................639
Wczytywanie danych adresowych .....................................................................641
Dodawanie nowych adresw ..............................................................................642
Poruszanie si po danych ....................................................................................644
Usuwanie adresw ................................................................................................646
Integracja z ksik adresow ...................................................................................648
Zasady integracji ...................................................................................................648
Wczytywanie ksiki adresowej w innej aplikacji ............................................650
Podsumowanie ............................................................................................................655
Rozdzia 20. Wdraanie aplikacji .....................................................................................657
Czym jest wdraanie? .................................................................................................657
Wdraanie typu ClickOnce .................................................................................658
Wdraanie typu XCOPY ......................................................................................663
Tworzenie aplikacji instalacyjnych przy uyciu Visual Studio 2010 ...................663
Edytor interfejsu uytkownika ..................................................................................667
Wdraanie innych rozwiza ...................................................................................670
Podzespoy prywatne ...........................................................................................671
Podzespoy wspdzielone ...................................................................................671
Wdraanie aplikacji dla komputerw stacjonarnych ......................................672
Wdraanie aplikacji sieciowych ..........................................................................672
Wdraanie usug WWW ......................................................................................673
Przydatne narzdzia ..............................................................................................673
Podsumowanie ...................................................................................................................674
Dodatek A

Rozwizania wicze ...................................................................................677

Dodatek B

Co dalej? .......................................................................................................691
Skorowidz ....................................................................................................697

3
Pisanie programw

CZEGO NAUCZYSZ SI W TYM ROZDZIALE?

Dziaania algorytmw.
Stosowania zmiennych.
Dziaania rnych typw danych, w tym liczb cakowitych, liczb zmiennoprzecinkowych,
cigw znakw i dat.
Okrelania zasigu kodu.
Usuwania bdw z aplikacji.
Przechowywania danych w pamici komputera.

Po zainstalowaniu i uruchomieniu rodowiska Visual Basic 2010, a nawet po napisaniu prostego,


ale dziaajcego programu, pora przyjrze si podstawowym informacjom dotyczcym pisania programw. Dziki temu bdziesz mg samodzielnie zacz tworzy bardziej rozbudowane aplikacje.

Informacje i dane
Informacje opisuj fakty i mona je przedstawia oraz wyszukiwa w dowolnym formacie, niezalenie od tego, czy dany format bardziej nadaje si dla ludzi, czy dla komputerw. Na przykad, jeli
cztery osoby bd miay za zadanie mierzy natenie ruchu na czterech rnych skrzyowaniach,
po zakoczeniu pracy przedstawi cztery rcznie zapisane listy z liczb samochodw, ktre przejechay w danym okresie (moe to by jedna lista na kad godzin).
Pojcie dane suy do opisu informacji, ktre zostay zestawione, uporzdkowane i sformatowane
w taki sposb, aby moliwe byo ich bezporednie wykorzystanie przez program komputerowy.
Komputer nie moe bezporednio uy informacji zebranych przez osoby mierzce natenie
ruchu w postaci zestawu kartek penych odrcznych zapiskw. Kto musi najpierw przeksztaci
te zapiski na dane. Na przykad mona przepisa liczby do arkusza programu Excel, ktry mona
nastpnie bezporednio wykorzysta w programie zaprojektowanym do analizy wynikw.

62 ROZDZIA 3. PISANIE PROGRAMW

Algorytmy
Zmiany w przemyle komputerowym zachodz z niesamowit szybkoci. Wikszo profesjonalnych programistw musi cay czas uczy si czego nowego, aby ich umiejtnoci byy aktualne.
Jednak niektre aspekty tworzenia programw nie zmieniy si od czasu ich wymylenia i prawdopodobnie nie zmieni si w najbliszym czasie. Dobrym przykadem aspektu technologii komputerowej, ktrego istota nie zmienia si od pocztku, jest proces i dyscyplina tworzenia oprogramowania.
Aby program dziaa, musi mie dane, na ktrych moe pracowa. Nastpnie program bierze takie
dane i przeksztaca je na inn posta. Na przykad aplikacja moe pobiera baz z danymi klientw
zapisan w pamici komputera jako zestaw jedynek i zer, a nastpnie przeksztaca j na posta
moliw do odczytania na ekranie monitora. Komputer pokadowy w samochodzie nieustannie
analizuje informacje dotyczce rodowiska oraz stanu pojazdu i przystosowuje mieszank paliwa
tak, aby zapewni jak najwydajniejsz prac silnika. Dostawca usug telekomunikacyjnych zapisuje
wykonane telefony i na podstawie tych informacji generuje rachunki.
Wspln podstaw tych programw s algorytmy. Przed napisaniem programu rozwizujcego dany
problem, trzeba rozbi go na pojedyncze kroki opisujce rozwizanie problemu. Algorytm jest niezaleny od jzyka programowania, dlatego moesz zapisa go zarwno za pomoc jzyka naturalnego,
jak i diagramw lub w inny sposb uatwiajcy wizualizacj problemu. Wyobra sobie, e pracujesz
dla firmy telekomunikacyjnej i masz za zadanie wygenerowa rachunki na podstawie telefonw
wykonanych przez klientw. Poniszy algorytm opisuje jedno z moliwych rozwiza:
1. Pierwszego dnia miesica musisz utworzy rachunki dla wszystkich klientw.
2. Z kadym klientem powizana jest lista pocze wykonanych w ubiegym miesicu.
3. Znasz dugo kadej rozmowy, a take por jej przeprowadzenia. Na podstawie tych
informacji moesz obliczy koszt kadego poczenia.
4. Kady rachunek to czna suma wszystkich pocze.
5. Jeli klient rozmawia duej, ni wynosi ustalony limit, musi zapaci okrelon kwot
za kad dodatkow minut.
6. Do kadego rachunku dodajesz podatek.
7. Po przygotowaniu rachunku trzeba go wydrukowa i wysa poczt.
Tych siedem punktw opisuje do wyczerpujco algorytm programu generujcego rachunki
za poczenia wychodzce w systemie operatora telefonii komrkowej. Nie jest istotne, czy gotowe
rozwizanie napisane bdzie w jzyku C++, Visual Basic 2010, C#, Java, czy w innym podstawowy algorytm programu nie zmieni si. Warto jednak pamita, e poszczeglne punkty powyszego
algorytmu mona rozbi na mniejsze, bardziej szczegowe algorytmy.
Dobr wiadomoci dla osb uczcych si programowa jest to, e zwykle utworzenie takiego algorytmu jest do proste. Bardzo atwo zrozumie dziaanie powyszego algorytmu. Algorytmy zawsze
tworzy si, wykorzystujc zdrowy rozsdek, cho moe si okaza, e trzeba napisa kod dla algorytmu zawierajcego skomplikowane rozumowanie matematyczne lub naukowe. Moliwe, e nie
uznasz tego za algorytm zdroworozsdkowy, jednak bdzie on taki dla jego autora. Za wiadomo
jest taka, e proces przeksztacania algorytmu na kod moe by trudny. Dla programisty nauczenie
si tworzenia algorytmw to kluczowa umiejtno.
Wszyscy dobrzy programici uwzgldniaj to, e wybr jzyka programowania nie jest zbyt istotny.
Rne jzyki s dobre do wykonywania odmiennych zada. Jzyk C++ daje programistom du
kontrol nad dziaaniem programw, jednak pisanie aplikacji w tym jzyku jest trudniejsze ni na
przykad w Visual Basic 2010, podobnie jak tworzenie interfejsu uytkownika. Niektre z problemw
zwizanych z jzykiem C++ rozwizuje jego zarzdzana wersja udostpniana przez platform .NET,

Zmienne 63

dlatego powysze stwierdzenia s mniej prawdziwe dzi ni jeszcze kilka lat temu. Jako programista
musisz nauczy si wykorzystywa rne jzyki do rozwizywania rnych problemw w jak
najwydajniejszy sposb. Cho na pocztku wikszo programistw koncentruje si na jednym
jzyku, warto pamita, e rne jzyki pozwalaj tworzy najlepsze rozwizania dla odmiennych
problemw. W pewnym momencie do napisania programu w nowym jzyku moe okaza si konieczne uycie podstawowych umiejtnoci zwizanych z projektowaniem algorytmw i kodowaniem.

Czym jest jzyk programowania?


W pewnym sensie moesz postrzega jako jzyk programowania cokolwiek, co potrafi podejmowa
decyzje w rodowisku komputera. Komputery potrafi doskonale podejmowa decyzje, te jednak
musz by stosunkowo proste, na przykad czy dana liczba jest wiksza od trzech? lub czy ten
samochd jest niebieski?.
Jeli chcesz podj skomplikowan decyzj, proces jej podejmowania naley rozbi na mniejsze
elementy zrozumiae dla komputera. Do rozbijania zoonych decyzji na proste su algorytmy.
Dobrym przykadem problemu, z ktrym komputery radz sobie niezbyt dobrze, jest rozpoznawanie
ludzkich twarzy. Nie mona po prostu zada komputerowi pytania czy to zdjcie Kasi?. W zamian
trzeba rozbi pytanie na seri prostszych pyta zrozumiaych dla komputera.
Decyzja podejmowana przez komputer to jedna z dwch moliwych odpowiedzi: tak lub nie. Te
moliwoci okrela si take jako prawd i fasz lub 1 i 0. Uywajc poj obecnych w programie,
nie mona kaza komputerowi podj decyzji na podstawie pytania o ile wiksza jest liczba 10
w porwnaniu z liczb 4?. Poprawnie zadane pytanie brzmi: czy liczba 10 jest wiksza od 4?.
Rnica nie jest dua, ale istotna pierwsze pytanie nie pozwala udzieli odpowiedzi tak lub nie, podczas gdy drugie to umoliwia. Komputer oczywicie potrafi udzieli odpowiedzi na pierwsze z tych
pyta, ale wymaga to wykonania pewnych operacji. Mwic inaczej, aby odpowiedzie na pierwsze
pytanie, naley odj 4 od 10 i uy wyniku tego dziaania w odpowiednim miejscu algorytmu.
Wymg stawiania pyta pozwalajcych na udzielenie odpowiedzi tak lub nie moe Ci si wydawa
pewnym ograniczeniem, jednak nie naley tak go traktowa. Decyzje podejmowane w yciu codziennym wygldaj tak samo. Kiedy podejmujesz jak decyzj, moesz co zaakceptowa (tak,
prawda, 1) lub odrzuci (nie, fasz, 0).
Ta ksika opisuje jzyk Visual Basic 2010, ale istotne aspekty programowania s w duym stopniu
niezalene od jzyka. Kluczowe jest zrozumienie, e kady program, niezalenie od naszpikowania
nowinkami i jzyka, w ktrym zosta napisany, skada si z metod (funkcji i procedur, ktre s wierszami kodu sucymi do implementacji algorytmu) oraz zmiennych (miejsc przechowywania danych,
ktrymi manipuluj metody).

Zmienne
Zmienna to co, w czym przechowywana jest warto uywana w algorytmie. Na podstawie tych
wartoci mona podejmowa decyzje (na przykad czy dana zmienna rwna si 7? lub czy dana
zmienna jest wiksza od 4?), mona te wykonywa na nich operacje i przeksztaca je na inne
wartoci (na przykad dodaj 2 do tej zmiennej lub pomn dan zmienn przez 6 i tak dalej).
Przed napisaniem kodu przyjrzyj si kolejnemu algorytmowi:
1. Utwrz zmienn o nazwie intNumber i przypisz do niej liczb 27.
2. Dodaj 1 do wartoci zmiennej o nazwie intNumber i zapisz now warto w tej samej zmiennej.
3. Wywietl zmienn intNumber uytkownikowi aplikacji.

64 ROZDZIA 3. PISANIE PROGRAMW


W tym algorytmie tworzysz zmienn o nazwie intNumber i przypisujesz do niej liczb 27. Oznacza
to, e program uywa fragmentu pamici komputera do przechowywania wartoci 27. Ten fragment pamici przechowuje t warto do czasu jej zmiany lub poinformowania programu, e
warto nie jest ju potrzebna.
Drugi krok polega na wykonaniu dodawania. Do wartoci zmiennej intNumber zostaje dodana
liczba 1. Po wykonaniu tej operacji fragment pamici przechowujcy zmienn intNumber zawiera
warto 28.
Na koniec program ma wywietli uytkownikowi warto zmiennej intNumber. Naley wczyta t
warto z pamici i wywietli j na ekranie.
Take ten algorytm jest prosty i zrozumiay. Opiera si jedynie na zdrowym rozsdku. Jednak kod
tego algorytmu w jzyku Visual Basic 2010 jest nieco bardziej tajemniczy.

SPRBUJ SAM

Uywanie zmiennych
Plik z kodem projektu Variables mona pobra z witryny helion.pl.

W tym wiczeniu Sprbuj sam nauczysz si, jak uywa zmiennych.


1. Utwrz nowy projekt w rodowisku Visual Studio 2010, wybierajc z menu opcj
File/New/Project. W oknie dialogowym New Project wybierz aplikacj typu Windows
Forms Application z panelu znajdujcego si po prawej stronie, wpisz nazw projektu,
Variables, a nastpnie kliknij przycisk OK (rysunek 3.1).

Rysunek 3.1. Tworzenie projektu Variables

Zmienne 65

2. Zmniejsz nieco formularz Form1 i dodaj do niego przycisk z okna narzdzi. Ustaw
waciwo Text przycisku na Dodaj 1 do intNumber, a waciwo Name na btnAdd.
Formularz powinien wyglda tak jak na rysunku 3.2.

Rysunek 3.2. Gwny formularz projektu Variables

3. Kliknij dwukrotnie przycisk, aby otworzy metod obsugi zdarzenia btnAdd_Click.


Dodaj do tej metody kod wyrniony pogrubieniem:
Private Sub btnAdd_Click(ByVal sender As System.Object, _
ByVal e As System.EventArgs) Handles btnAdd.Click
Dim intNumber As Integer
intNumber = 27
intNumber = intNumber + 1
MessageBox.Show("Warto zmiennej intNumber + 1 = " & intNumber.ToString, _
"Zmienne")
End Sub

4. Kliknij przycisk Save All na pasku narzdzi, aby zapisa projekt.


5. Uruchom projekt i kliknij przycisk Dodaj 1 do intNumber. Pojawi si okno komunikatu
przedstawione na rysunku 3.3.

Rysunek 3.3. Wynik dodawania

Jak to dziaa?
Po klikniciu przycisku przez uytkownika program wywouje metod obsugi zdarzenia btnAdd_
Click, rozpoczyna dziaanie od gry kodu i wykonuje kolejne wiersze. Pierwszy wiersz definiuje
now zmienn o nazwie intNumber:
Dim intNumber As Integer

to sowo kluczowe. Jak opisano to w rozdziale 1., sowa kluczowe maj w jzyku Visual Basic
2010 specjalne znaczenie i su midzy innymi do wydawania polece. Sowo Dim informuje jzyk,
e dalej znajduje si definicja zmiennej.

Dim

Ta dziwna nazwa pochodzi z pierwszych wersji jzyka BASIC. Jzyk BASIC musia mie
informacje opisujce ilo miejsca rezerwowanego dla tablic (opisanych w rozdziale 5.),
dlatego znajdowao si w nim polecenie informujce o wymiarach (ang. dimensions)
tablicy, ktre w skrcie nazwano Dim. W jzyku Visual Basic rozszerzono to polecenie
na inne rodzaje zmiennych i obecnie oznacza ono mniej wicej przygotuj miejsce na.

66 ROZDZIA 3. PISANIE PROGRAMW


Nastpnie pojawia si nazwa zmiennej intNumber. Zauwa, e zmienna nazwana jest zgodnie ze
zmodyfikowan notacj wgiersk opisan w rozdziale 1. W tym przypadku przedrostek int to
skrt od Integer. Integer to typ danych reprezentujcy zmienn intNumber, co opisuje nastpny
akapit. Po przedrostku znajduje si nazwa zmiennej w tym przypadku jest to Number. Jeli w kodzie natrafisz na tak zmienn, wiesz, e jest to zmienna reprezentujca liczb typu Integer.
Nazwa Integer informuje jzyk Visual Basic 2010 o rodzaju wartoci przechowywanej przez zmienn. Rodzaj wartoci to typ danych. Na razie wystarczy zapamita, e ta instrukcja informuje jzyk,
i zmienna ma przechowywa wartoci typu Integer (liczby cakowite).
Kolejny wiersz przypisuje warto do zmiennej intNumber:
intNumber = 27

Oznacza to, e powysza instrukcja zapisuje w zmiennej intNumber liczb 27.


Kolejna instrukcja dodaje do zmiennej intNumber liczb 1:
intNumber = intNumber + 1

Powyszy wiersz oznacza: pobierz aktualn warto zmiennej intNumber i dodaj do niej 1.
Ostatni wiersz powoduje wywietlenie okna dialogowego z tekstem Warto zmiennej intNumber
oraz aktualn wartoci tej zmiennej. Ta sama instrukcja ustawia take nagwek okna
dialogowego na Zmienne, aby odzwierciedla przeznaczenie projektu. Przy korzystaniu z wartoci liczbowych w tekcie warto zastosowa metod ToString do zrzutowania liczby na cig znakw.
Uatwia to czytanie i rozumienie kodu, poniewa wiadomo, e uyto w nim cigu znakw:
+ 1 =

MessageBox.Show("Warto zmiennej intNumber + 1 = " & intNumber.ToString, _


"Zmienne")

Komentarze i odstpy
Kiedy piszesz kod programu, zawsze pamitaj, e w przyszoci kto inny moe musie wprowadza
w nim zmiany. Dlatego powiniene stara si jak najbardziej uatwi innym programistom odczytanie
kodu. Komentarze i odstpy to dwa podstawowe rodki do poprawiania czytelnoci kodu.

Komentarze
Komentarze to elementy programu ignorowane przez kompilator jzyka Visual Basic 2010, co oznacza, e moesz w nich zapisa dowolne informacje w dowolnym jzyku po polsku, w C#, w Perl,
w FORTRAN czy po chisku. Te komentarze maj pomc programistom czytajcym kod w zrozumieniu dziaania danego fragmentu.
Wszystkie jzyki programowania umoliwiaj dodawanie komentarzy. Nie jest to cecha dostpna
wycznie w jzyku Visual Basic 2010. Jeli na przykad przyjrzysz si kodowi w jzyku C#, zauwaysz, e komentarze rozpoczynaj si w nim od podwjnego ukonika (//).
Kiedy wiadomo, e warto doda komentarz? Zaley to od sytuacji, ale dobr praktyczn wskazwk
jest zastanowienie si nad algorytmem. Program z poprzedniego wiczenia Sprbuj sam dziaa
wedug nastpujcego algorytmu:
1. Zdefiniuj warto zmiennej intNumber.
2. Dodaj 1 do wartoci zmiennej intNumber.
3. Wywietl now warto zmiennej intNumber uytkownikowi.

Komentarze i odstpy 67

Moesz doda do przykadowego kodu komentarze opisujce wszystkie kroki algorytmu:


'

Definicja zmiennej intNumber.

Dim intNumber As Integer


'

Ustawianie pocztkowej wartoci.

intNumber = 27
'

Dodanie 1 do wartoci zmiennej intNumber.

intNumber = intNumber + 1
'

Wywietlenie nowej wartoci zmiennej intNumber.

MessageBox.Show("Warto zmiennej intNumber + 1 = " & intNumber.ToString, _


"Zmienne")

W jzyku Visual Basic 2010 komentarze rozpoczynaj si od apostrofu ('). Tekst znajdujcy si
w wierszu poprzedzonym apostrofem to komentarz. Mona take dodawa komentarze w tym
samym wierszu, w ktrym znajduje si kod, na przykad:
intNumber = intNumber + 1 '

Dodanie 1 do wartoci zmiennej intNumber.

Takie rozwizanie jest poprawne, poniewa po apostrofie znajduje si jedynie komentarz, a nie kod.
Zauwa, e komentarze w powyszym kodzie mniej wicej opisuj dziaanie algorytmu. Dobr
praktyk zwizan z komentowaniem kodu jest dodawanie krtkiego opisu tego etapu algorytmu,
ktry jest wykonywany przez dany fragment kodu.
rodowisko Visual Studio 2010 udostpnia take komentarze XML, ktre pozwalaj utworzy bloki
komentarzy stanowice dokumentacj metod. Aby uy tej waciwoci, umie kursor w pustym
wierszu powyej definicji metody i wpisz trzy nastpujce po sobie apostrofy. rodowisko automatycznie doda wtedy blok komentarza widoczny w poniszym fragmencie kodu:
'''

<summary>

'''
'''

</summary>
<param name="sender"></param>
''' <param name="e"></param>
''' <remarks></remarks>
'''

Private Sub btnAdd_Click(ByVal sender As System.Object, _


ByVal e As System.EventArgs) Handles btnAdd.Click

Najciekawsz waciwoci komentarzy XML jest to, e rodowisko Visual Studio 2010 automatycznie uzupenia nazwy parametrw w bloku komentarzy na podstawie parametrw zdefiniowanych
w metodzie. Jeli dana metoda nie przyjmuje adnych parametrw, rodowisko nie dodaje elementu
<param> do bloku komentarzy.
Po wstawieniu bloku komentarzy moesz doda krtki opis dziaania metody oraz dodatkowe uwagi,
ktre naley uwzgldni, wywoujc t metod, a take specjalne wymagania stawiane przez metod.
Jeli metoda zwraca warto, rodowisko dodaje do bloku komentarzy element <returns>, a programista moe poda zwracan warto oraz jej opis.
Komentarze maj przede wszystkim uatwi zrozumienie kodu, zarwno programistom, ktrzy
stykaj si z nim po raz pierwszy, jak i autorowi, ktry wraca do niego po duszej przerwie. Komentarze maj wskazywa co, co moe nie by oczywiste na pierwszy rzut oka, lub stanowi krtki
opis dziaania fragmentu kodu, dziki czemu programista nie musi analizowa dziaania kadego wiersza, aby zrozumie jego zastosowanie.

68 ROZDZIA 3. PISANIE PROGRAMW


Programici maj pewne zasady pisania komentarzy. Jeli pracujesz dla duej firmy programistycznej lub Twj przeoony albo nauczyciel zwraca du uwag na standardy kodowania, na pewno dowiesz si, w jakiej postaci powiniene dodawa komentarze, a take kiedy powiniene je
umieszcza.

Odstpy
Kolejny istotny aspekt pisania czytelnego kodu to dodawanie wielu odstpw. Odstpy, czyli miejsca
na ekranie lub na stronie pozbawione znakw, poprawiaj czytelno kodu, podobnie jak odstpy
w zwykym tekcie napisanym po polsku. W ostatnim przykadzie przed kadym komentarzem
wystpuje pusty wiersz. Dziki temu osoba czytajca kod wie, e kady wyrniony w ten sposb
blok kodu stanowi cao.
Wicej o odstpach dowiesz si w nastpnym rozdziale, gdzie opisane jest sterowanie przepywem
programu za pomoc specjalnych blokw kodu. Jednak w praktyce zauwaysz, e rni programici
uywaj odstpw w odmienny sposb. Na razie zapamitaj, e nie naley ba si dodawa odstpy
do kodu, poniewa zwiksza to czytelno programw, szczeglnie jeli aplikacja skada si z dugich
fragmentw kodu.
Kompilator ignoruje odstpy i komentarze, dlatego kod z du liczb komentarzy i odstpw jest
rwnie wydajny jak kod cakowicie pozbawiony tych elementw.

Typy danych
Kiedy uywasz zmiennych, powiniene z gry wiedzie, jakie wartoci zamierzasz w nich przechowywa. Na razie spotkae si ze zmienn suc do przechowywania liczb cakowitych.
Kiedy definiujesz zmienn, musisz poinformowa jzyk Visual Basic 2010 o typie danych przechowywanych w tej zmiennej. Jak si ju moe domylasz, jest to typ danych, a wszystkie znaczce
jzyki programowania udostpniaj wiele rnych typw danych. Typ danych zmiennej ma istotny
wpyw na uruchamianie kodu przez komputer. W tym punkcie poznasz dziaanie zmiennych oraz
wpyw uytego typu na wydajno programu.

Uywanie liczb
Uywajc liczb w jzyku Visual Basic 2010, moesz korzysta z dwch ich rodzajw: z liczb cakowitych oraz zmiennoprzecinkowych. Oba te rodzaje maj specyficzne zastosowania. Liczby cakowite
s mao uyteczne do obliczania iloci, na przykad iloci pienidzy na rachunku czy czasu zapeniania basenu wod. Do operacji tego typu lepiej jest uywa liczb zmiennoprzecinkowych,
poniewa mona za ich pomoc przedstawi czci uamkowe, co nie jest moliwe w przypadku liczb
cakowitych.
Z drugiej strony w przypadku wikszoci codziennych czynnoci bardziej przydatne s liczby cakowite. Wikszo programw uywa liczb raczej do kontroli swojego dziaania za pomoc zliczania
jednostek, ni do obliczania iloci.
Wyobra sobie, e masz napisa program wywietlajcy na ekranie szczegy dotyczce klienta.
Baza danych zawiera 100 klientw. Kiedy program rozpoczyna dziaanie, wywietla na ekranie dane
pierwszego klienta. Program musi kontrolowa, ktry klient jest aktualnie wywietlany, aby mc
wywietli nastpnego klienta, gdy otrzyma takie polecenie od uytkownika.

Typy danych 69

Poniewa komputer doskonale radzi sobie z liczbami, zwykle kady klient ma niepowtarzalny numer. Ten numer to w prawie wszystkich przypadkach liczba cakowita. W tym przypadku oznacza to,
e kady klient ma przypisan niepowtarzaln liczb cakowit z przedziau od 1 do 100. W programie mona take umieci zmienn przechowujc identyfikator aktualnie wywietlanego klienta.
Kiedy uytkownik poprosi o wywietlenie danych kolejnego klienta, program musi tylko doda
1 do tego identyfikatora (inkrementacja o jeden) i moe wywietli nastpnego klienta.
Dziaanie mechanizmw tego typu poznasz przy okazji analizy bardziej zaawansowanych zagadnie.
Na razie zapamitaj, e liczb cakowitych uywa si duo czciej ni liczb zmiennoprzecinkowych.
Przyjrzyj si teraz czsto wykonywanym operacjom.

Podstawowe operacje matematyczne na liczbach cakowitych


W tym punkcie utworzysz now aplikacj wykonujc operacje matematyczne. W poniszym wiczeniu Sprbuj sam zobaczysz, jak dodawa, odejmowa, mnoy i dzieli liczby cakowite.

SPRBUJ SAM

Podstawowe operacje matematyczne


Plik z kodem projektu Integer Math mona pobra z witryny helion.pl.

1. Utwrz nowy projekt w rodowisku Visual Studio 2010, wybierajc z menu opcj
File/New/Project. W oknie dialogowym New Project wybierz aplikacj typu Windows
Forms Application z prawego panelu (zobacz rysunek 3.1), wpisz nazw projektu,
Integer Math, a nastpnie kliknij przycisk OK.
2. Dodaj do formularza nowy przycisk z okna narzdzi. Ustaw jego waciwo Name
na btnIntMath, a waciwo Text na Test. Kliknij dwukrotnie ten przycisk i dodaj
wyrniony pogrubieniem kod do utworzonej przez rodowisko metody obsugi
zdarzenia Click:
Private Sub btnIntMath_Click(ByVal sender As System.Object, _
ByVal e As System.EventArgs) Handles btnIntMath.Click
' Deklaracja zmiennej.
Dim intNumber As Integer
' Przypisanie liczby, dodanie do niej wartoci i wywietlenie wyniku.
intNumber = 16
intNumber = intNumber + 8
MessageBox.Show("Test dodawania... " & intNumber.ToString, _
"Arytmetyka liczb cakowitych")
' Przypisanie liczby, odjcie od niej wartoci i wywietlenie wyniku.
intNumber = 24
intNumber = intNumber - 2
MessageBox.Show("Test odejmowania... " & intNumber.ToString, _
"Arytmetyka liczb cakowitych")
' Przypisanie liczby, pomnoenie jej i wywietlenie wyniku.
intNumber = 6
intNumber = intNumber * 10
MessageBox.Show("Test mnoenia... " & intNumber.ToString, _
"Arytmetyka liczb cakowitych")
' Przypisanie liczby, podzielenie jej i wywietlenie wyniku.
intNumber = 12

70 ROZDZIA 3. PISANIE PROGRAMW


intNumber = Ctype(intNumber / 6, Integer)
MessageBox.Show("Test dzielenia... " & intNumber.ToString, _
"Arytmetyka liczb cakowitych")
End Sub

3. Zapisz projekt przez kliknicie przycisku Save All na pasku narzdzi.


4. Uruchom projekt i kliknij przycisk Test. Pojawi si kolejno cztery okna dialogowe widoczne
na rysunku 3.4.

Rysunek 3.4. Operacje arytmetyczne

Jak to dziaa?
Na szczcie aden z przedstawionych fragmentw kodu nie powinien by niezrozumiay. Z operatorem dodawania spotkae si ju w jednym z wczeniejszych przykadw. Tu pojawia si on
ponownie:
'

Przypisanie liczby, dodanie do niej wartoci i wywietlenie wyniku.

intNumber = 16
intNumber = intNumber + 8
MessageBox.Show("Test dodawania... " & intNumber.ToString, _
"Arytmetyka liczb cakowitych")

Program przypisuje do zmiennej intNumber liczb 16.


Nastpnie program przypisuje do zmiennej intNumber sum jej aktualnej wartoci (16) oraz liczby 8.
Jak wida w oknie dialogowym przedstawionym na rysunku 3.4, operacja dodawania daje 24, co jest
poprawnym wynikiem.
Operator odejmowania to znak minus (-). Oto, jak dziaa on w praktyce:
'

Przypisanie liczby, odjcie od niej wartoci i wywietlenie wyniku.

intNumber = 24
intNumber = intNumber - 2
MessageBox.Show("Test odejmowania... " & intNumber.ToString, _
"Arytmetyka liczb cakowitych")

Dziaanie tego fragmentu kodu jest podobne:


Program przypisuje do zmiennej intNumber liczb 24.
Nastpnie program przypisuje do zmiennej intNumber rnic jej aktualnej wartoci (24) oraz liczby 2.
Operator mnoenia to gwiazdka (*). Naley go stosowa w nastpujcy sposb:

Typy danych 71

'

Przypisanie liczby, pomnoenie jej i wywietlenie wyniku.

intNumber = 6
intNumber = intNumber * 10
MessageBox.Show("Test mnoenia... " & intNumber.ToString, _
"Arytmetyka liczb cakowitych")

Ten fragment kodu dziaa w nastpujcy sposb:


Przypisuje do zmiennej intNumber liczb 6.
Nastpnie przypisuje do zmiennej intNumber iloczyn jej aktualnej wartoci (6) oraz liczby 10.
Ostatni z przedstawionych operatorw, operator dzielenia, to ukonik (/). Dziaa on w nastpujcy
sposb:
'

Przypisanie liczby, podzielenie jej i wywietlenie wyniku.

intNumber = 12
intNumber = Ctype(intNumber / 6, Integer)
MessageBox.Show("Test dzielenia... " & intNumber.ToString, _
"Arytmetyka liczb cakowitych")

Ten fragment kodu wykonuje nastpujce operacje:


Przypisuje do zmiennej intNumber liczb 12.
Przypisuje do zmiennej intNumber iloraz jej aktualnej wartoci (12) oraz liczby 6.
Operacja dzielenia wartoci zmiennej intNumber przez liczb 6 znajduje si w funkcji CType.
Funkcja ta zwraca wynik po przeksztaceniu wyraenia na okrelony typ danych. Tu jest to liczba
cakowita, o czym informuje nazwa typu Integer. Poniewa dzielenie dwch wartoci moe
prowadzi do uzyskania liczby zmiennoprzecinkowej, naley uy funkcji CType do utworzenia
wyniku jako liczby cakowitej.
Ta bezporednia konwersja nie jest potrzebna, jeli ustawienie Option Strict ma warto Off. Z techniki tej trzeba jednak korzysta, jeeli opcja ta ma warto On. Ustawienie to pozwala wczy lub
wyczy powiadomienia kompilatora dotyczce konwersji na mniej pojemny typ w operacjach na
liczbach, co pozwala unikn takich konwersji i zapobiec bdom w czasie wykonywania programu.
Aby zmieni warto ustawienia Option Strict, wybierz opcj Tools/Options w rodowisku Visual Studio 2010. W oknie dialogowym Options rozwi wze Projects and Solutions, a nastpnie kliknij opcj
VB Defaults. W tym miejscu moesz wczy lub wyczy opcj Option Strict.

Skrcone operatory matematyczne


W nastpnym wiczeniu Sprbuj sam wykonasz te same operacje za pomoc mniejszej iloci kodu.
Su do tego operatory skrcone. Cho na pocztku nie s tak oczywiste jak ich bardziej rozwleke
odpowiedniki, szybko je polubisz.

SPRBUJ SAM

Uywanie operatorw skrconych

W tym wiczeniu Sprbuj sam zmodyfikujesz kod z poprzedniego wiczenia i wykorzystasz operatory skrcone do dodawania, odejmowania i mnoenia liczb cakowitych.
1. Ponownie otwrz w edytorze kodu rodowiska Visual Studio 2010 plik Form1.vb i wprowad
w nim wyrnione pogrubieniem zmiany:

72 ROZDZIA 3. PISANIE PROGRAMW


Private Sub btnIntMath_Click(ByVal sender As System.Object, _
ByVal e As System.EventArgs) Handles btnIntMath.Click
' Deklaracja zmiennej.
Dim intNumber As Integer
' Przypisanie liczby, dodanie do niej wartoci i wywietlenie wyniku.
intNumber = 16
intNumber += 8
MessageBox.Show("Test dodawania. " & intNumber.ToString, _
"Arytmetyka liczb cakowitych")
' Przypisanie liczby, odjcie od niej wartoci i wywietlenie wyniku.
intNumber = 24
intNumber -= 2
MessageBox.Show("Test odejmowania. " & intNumber.ToString, _
"Arytmetyka liczb cakowitych")
' Przypisanie liczby, pomnoenie jej i wywietlenie wyniku.
intNumber = 6
intNumber *= 10
MessageBox.Show("Test mnoenia. " & intNumber.ToString, _
"Arytmetyka liczb cakowitych")
' Przypisanie liczby, podzielenie jej i wywietlenie wyniku.
intNumber = 12
intNumber = CType(intNumber / 6, Integer)
MessageBox.Show("Test dzielenia. " & intNumber.ToString, _
"Arytmetyka liczb cakowitych")
End Sub

2. Uruchom projekt i kliknij przycisk Test. Pojawi si te same okna dialogowe co


w poprzednim wiczeniu.
Jak to dziaa?
Uywajc skrconej wersji operatorw, naley pomin drugie wystpienie zmiennej intNumber
i umieci operator po lewej stronie znaku rwnoci. Pierwotna wersja wyglda tak:
intNumber = intNumber + 8

Wersja skrcona wyglda tak:


intNumber += 8

Operatory skrcone dziaaj dobrze przy dodawaniu, odejmowaniu i mnoeniu liczb cakowitych.
Nie mona ich jednak uywa przy dzieleniu, poniewa wynikiem moe by liczba z czci
uamkow.

Problemy z arytmetyk liczb cakowitych


Gwny problem z arytmetyk liczb cakowitych polega na tym, e nie mona wykonywa adnych
operacji na liczbach zawierajcych czci uamkowe. Na przykad ponisza operacja jest niepoprawna:
'

Prba pomnoenia liczb.

intNumber = 6
intNumber = intNumber * 10.23

Wprawdzie powyszy kod mona uruchomi, ale wyniki bd inne od oczekiwanych. Poniewa
zmienna intNumber moe zawiera jedynie liczby cakowite, wynik jest zaokrglany w gr lub w d
do najbliszej liczby cakowitej. W tym przypadku dokadny wynik mnoenia to 61,38, ale warto
zmiennej intNumber to 61. Gdyby wynik wynosi 61,73, program przypisaby do zmiennej warto 62.

Typy danych 73

UWAGA
Przy opcji Option Strict ustawionej na On powyszy kod spowoduje bd w rodowisku IDE,
a program si nie skompiluje. Przy ustawieniu Off mona skompilowa ten fragment.

Podobny problem wystpuje w przypadku dzielenia. Przyjrzyj si poniszemu fragmentowi kodu:


'

Prba dzielenia liczb.

intNumber = 12
intNumber = intNumber / 7

Tym razem dokadna odpowied to 1,71. Jednak poniewa wynik musi zosta zaokrglony w celu
zapisania go w zmiennej intNumber, program przypisze do tej zmiennej liczb 2. Jak moesz sobie
wyobrazi, gdyby chcia napisa program obliczajcy dokadne wartoci, miaby duy problem,
poniewa kady krok oblicze byby obciony bdem zwizanym z zaokrglaniem.
Nastpny punkt opisuje, jak mona wykona tego typu obliczenia za pomoc liczb zmiennoprzecinkowych.

Arytmetyka na liczbach zmiennoprzecinkowych


Ju wiesz, e liczby cakowite nie s odpowiednie do wikszoci oblicze matematycznych, poniewa
wikszo takich oblicze obejmuje czci uamkowe. W dalszej czci tego rozdziau nauczysz si
wykorzystywa liczby zmiennoprzecinkowe na przykadzie obliczania powierzchni koa. Ponisze
wiczenie Sprbuj sam stanowi proste wprowadzenie do uywania liczb zmiennoprzecinkowych.

SPRBUJ SAM

Arytmetyka zmiennoprzecinkowa
Plik z kodem projektu Floating Point Math mona pobra z witryny helion.pl.

W tym wiczeniu Sprbuj sam utworzysz projekt, ktry mnoy i dzieli liczby zmiennoprzecinkowe.
1. Utwrz nowy projekt typu Windows Forms Application w rodowisku Visual Studio 2010
i nazwij go Floating Point Math. Nastpnie umie na formularzu przycisk, zmie jego
nazw na btnFloatMath, a waciwo Text na Test.
2. Kliknij dwukrotnie przycisk btnFloatMath i dodaj wyrniony pogrubieniem kod:
Private Sub btnFloatMath_Click(ByVal sender As System.Object, _
ByVal e As System.EventArgs) Handles btnFloatMath.Click
' Deklaracja zmiennej.
Dim dblNumber As Double
' Przypisanie wartoci, operacja mnoenia i wywietlenie wyniku.
dblNumber = 45.34
dblNumber *= 4.333
MessageBox.Show("Test mnoenia. " & dblNumber.ToString, _
"Liczby zmiennoprzecinkowe")
' Przypisanie wartoci, operacja dzielenia i wywietlenie wyniku.
dblNumber = 12
dblNumber /= 7

74 ROZDZIA 3. PISANIE PROGRAMW


MessageBox.Show("Test dzielenia. " & dblNumber.ToString, _
"Liczby zmiennoprzecinkowe")
End Sub

3. Zapisz projekt przez kliknicie przycisku Save All na pasku narzdzi.


4. Uruchom projekt. Powiniene zobaczy okna przedstawione na rysunku 3.5.

Rysunek 3.5. Operacje arytmetyczne na liczbach zmiennoprzecinkowych

Jak to dziaa?
Prawdopodobnie najwaniejsz zmian w porwnaniu z wczeniejszym przykadem jest sposb
deklaracji zmiennej:
'

Deklaracja zmiennej.

Dim dblNumber As Double

Zamiast zwrotu As Integer powysza deklaracja zawiera zwrot As Double. Informuje to jzyk
Visual Basic 2010, e zmienna ma przechowywa liczby zmiennoprzecinkowe o podwjnej precyzji,
a nie liczby cakowite. Oznacza to, e wszystkie operacje wykonywane na zmiennej dblNumber to
operacje zmiennoprzecinkowe, a nie cakowitoliczbowe. Zwr take uwag na inny przedrostek
w zmodyfikowanej notacji wgierskiej, informujcy, e zmienna przechowuje liczby typu Double.
Kod sucy do wykonywania operacji arytmetycznych jest taki sam jak w przypadku liczb cakowitych. Poniszy kod przypisuje do zmiennej dblNumber liczb uamkow i mnoy j przez inn
liczb tego typu:
'

Przypisanie wartoci, operacja mnoenia i wywietlenie wyniku.

dblNumber = 45.34
dblNumber *= 4.333
MessageBox.Show("Test mnoenia. " & dblNumber.ToString, _
"Liczby zmiennoprzecinkowe")

Wynik tej operacji to liczba 196,45822, ktra zawiera szereg cyfr po przecinku. Nastpnie mona
uy tej liczby do dalszych oblicze.
Oczywicie przypisujc warto do liczby zmiennoprzecinkowej, nie trzeba jawnie podawa cyfr
znajdujcych si po przecinku:
'

Przypisanie wartoci, operacja dzielenia i wywietlenie wyniku.

dblNumber = 12
dblNumber /= 7
MessageBox.Show("Test dzielenia. " & dblNumber.ToString, _
"Liczby zmiennoprzecinkowe")

Wynik tego dziaania to take liczba zmiennoprzecinkowa, poniewa zmienna dblNumber ma


typ umoliwiajcy przechowywanie wynikw tego typu. wiadczy o tym wywietlany wynik
1,71428571428571. Tego samego wyniku moge si spodziewa, wykonujc t sam operacj na
liczbach cakowitych.

Typy danych 75

Tu kod umoliwia zastosowanie operatora skrconego do dzielenia liczb, poniewa zmienna na


wynik moe przechowywa wartoci zmiennoprzecinkowe. Dlatego nie trzeba stosowa funkcji
CType do przeksztacania wynikw na liczb cakowit.
Liczby zmiennoprzecinkowe nazywaj si tak ze wzgldu na sposb zapisu, przypominajcy notacj
naukow. W notacji naukowej liczba skada si z potgi liczby 10 pomnoonej przez liczb z przedziau od 1 do 10. Wynik tego mnoenia to pierwotna liczba. Na przykad 10001 w notacji naukowej
to 1,0001 * 104, a 0,0010001 to 1,0001 * 10-3. Pozycja przecinka zmienia si tak, aby w obu przypadkach znajdowaa si po pierwszej cyfrze. Zaleta notacji tego typu polega na tym, e due i mae liczby
mona przedstawi z tak sam dokadnoci (w tym przypadku z dokadnoci do jednej dziesiciotysicznej). Zmienne zmiennoprzecinkowe s przechowywane w pamici komputera w ten sam
sposb, ale ich podstaw jest liczba dwa, a nie 10. Wicej na ten temat dowiesz si w podrozdziale
Przechowywanie zmiennych w dalszej czci rozdziau.

Inne stany
Zmienne zmiennoprzecinkowe mog reprezentowa kilka innych wartoci, nie tylko liczby uamkowe. S to midzy innymi stany:
NaN,

co jest skrtem od angielskiego not a number, czyli to nie jest liczba.


Dodatni nieskoczono.
Ujemn nieskoczono.

Ta ksika nie przedstawia sposobw dochodzenia do takich wynikw, ale matematycy na pewno stwierdz, e platforma .NET spenia ich zaawansowane potrzeby.

Liczby zmiennoprzecinkowe o pojedynczej precyzji


Nieco wczeniej pojawio si pojcie liczba zmiennoprzecinkowa o podwjnej precyzji. Platforma .NET
udostpnia dwa sposoby reprezentowania liczb zmiennoprzecinkowych, ktrych mona uywa
w zalenoci od potrzeb. W niektrych przypadkach cz uamkowa liczby moe cign si w nieskoczono (liczba pi jest szczeglnie znanym przykadem), ale komputer nie ma nieskoczonej
iloci pamici, w ktrej mgby przechowywa nieskoczon ilo cyfr, dlatego musi istnie jakie
ograniczenie liczby cyfr po przecinku uwzgldnianych przez komputer. To ograniczenie zwizane
jest z rozmiarem zmiennej to zagadnienie opisane jest duo bardziej szczegowo pod koniec
rozdziau. Wystpuj take ograniczenia wielkoci skadnika znajdujcego si po lewej stronie od
przecinka.
Liczby zmiennoprzecinkowe o podwjnej precyzji mog przechowywa liczby od -1,7*10308 do
1,7*10308 z wielk dokadnoci (do jednego grosza na 45 miliardw zotych). Liczby zmiennoprzecinkowe o pojedynczej precyzji przechowuj wartoci od -3,4*1038 do 3,4*1038. Take te liczby mog
by bardzo due, ale przechowuj mniej dokadne wartoci (do jednego grosza na 330 tysicy zotych). Liczby zmiennoprzecinkowe o pojedynczej precyzji potrzebuj za to mniejszej iloci pamici,
dziki czemu na niektrych komputerach obliczenia wykorzystujce liczby tego typu wykonywane
s szybciej od oblicze wykorzystujcych liczby o podwjnej precyzji.
Powiniene unika uywania liczb o podwjnej precyzji, dopki naprawd nie potrzebujesz dokadnoci wikszej ni zapewniana przez liczby o pojedynczej precyzji. Jest to szczeglnie istotne
w przypadku duych systemw, gdzie uycie zmiennych o podwjnej precyzji zamiast liczby o pojedynczej precyzji moe znacznie pogorszy wydajno programu.

76 ROZDZIA 3. PISANIE PROGRAMW


Wykonywane obliczenia zwykle daj wskazwk co do typu liczb zmiennoprzecinkowych, ktrego
naley uy. Jeli chcesz uy liczby o pojedynczej precyzji, powiniene zadeklarowa zmienn typu
Single zamiast Double:
Dim sngNumber As Single

Uywanie cigw znakw


Cig znakw (ang. string) to sekwencja znakw, ktr umieszcza si w cudzysowach. Widziae ju,
jak uywa cigw znakw do wywietlania na ekranie wynikw dziaania prostych programw.
Cigi znakw su gwnie do tego, informujc uytkownika, co si stao, oraz o dalszym przebiegu
programu. Innym czstym zastosowaniem cigw znakw jest zapisywanie w nich fragmentw
tekstu w celu pniejszego wykorzystania ich w algorytmie. W ksice zobaczysz wiele cigw znakw. Do tej pory uywae cigw znakw takiego typu:
MessageBox.Show("Test mnoenia. " & dblNumber.ToString, _
"Liczby zmiennoprzecinkowe")

"Test mnoenia. " i "Liczby zmiennoprzecinkowe" to cigi znakw. Informuj o tym otaczajce
je cudzysowy ("). Co jednak oznacza w tym kontekcie dblNumber? Warto przechowywana
w zmiennej dblNumber jest przeksztacana za pomoc metody ToString na cig znakw, ktry
mona wywietli na ekranie. ToString to metoda struktury Double definiujcej typ zmiennej.
Na przykad, aby wywietli zmienn dblNumber przechowujc warto 27, naley przeksztaci
t warto na cig o dugoci dwch znakw. Wanie w ten sposb dziaa metoda ToString.

SPRBUJ SAM

Uywanie cigw znakw


Plik z kodem projektu Strings mona pobra z witryny helion.pl.

To wiczenie Sprbuj sam ilustruje niektre operacje, jakie mona wykona na cigach znakw.
1. Utwrz now aplikacj typu Windows Forms Application, uywajc opcji menu
File/New/Project. Nazwij ten projekt Strings.
2. Za pomoc okna narzdzi dodaj do formularza przycisk, nadaj mu nazw btnStrings oraz
zmie jego waciwo Text na Cigi znakw. Kliknij dwukrotnie ten przycisk, a nastpnie
dodaj wyrniony pogrubieniem kod.
Private Sub btnStrings_Click(ByVal sender As System.Object, _
ByVal e As System.EventArgs) Handles btnStrings.Click
' Deklaracja zmiennej.
Dim strResults As String
' Przypisywanie wartoci do cigu znakw.
strResults = "Witaj, wiecie!"
' Wywietlanie tekstu.
MessageBox.Show(strResults, "Cigi znakw")
End Sub

3. Zapisz projekt przez kliknicie przycisku Save All na pasku narzdzi.


4. Uruchom projekt i kliknij przycisk Cigi znakw. Pojawi si okno komunikatu
przedstawione na rysunku 3.6.

Typy danych 77

Rysunek 3.6. Wywietlanie cigu znakw

Jak to dziaa?
Do definiowania zmiennych przechowujcych cigi znakw uywa si podobnego zapisu co w przypadku zmiennych liczbowych, jednak tym razem naley uy instrukcji As String:
'

Deklaracja zmiennej.

Dim strResults As String

Podobnie jak w przypadku zmiennych liczbowych do cigw znakw mona przypisa warto:
'

Przypisywanie wartoci do cigu znakw.

strResults = "Witaj, wiecie!"

Trzeba uy cudzysoww wok tekstu, aby ograniczy cig znakw, czyli oznaczy jego pocztek
i koniec. Jest to istotne, poniewa te cudzysowy informuj kompilator jzyka Visual Basic 2010, e
nie powinien kompilowa tekstu znajdujcego si w cigu znakw. Jeli zapomnisz o cudzysowach,
jzyk Visual Basic 2010 potraktuje warto zmiennej jako cz kodu programu i sprbuje j skompilowa. Poniewa jest to niemoliwe, kompilacja programu zakoczy si niepowodzeniem.
Po zapisaniu wartoci Witaj, wiecie! w zmiennej strResults mona przekaza t zmienn do
okna komunikatu, ktre pobiera warto zmiennej i wywietla j. Definiowanie i uywanie zmiennych zawierajcych cigi znakw nie rni si wic od definiowania i uywania zmiennych liczbowych. Poniej opisane s operacje, ktre mona wykonywa na cigach znakw.

czenie
czenie (ang. concatenation) oznacza wizanie czego w acuch lub szereg. Jeli uywasz dwch cigw znakw, a nastpnie doczasz jeden do drugiego, cigi s poczone.

SPRBUJ SAM

czenie cigw znakw

Moesz traktowa czenie jak dodawanie cigw znakw. W tym wiczeniu Sprbuj sam dowiesz si, jak przeprowadza takie operacje.
1. Wykorzystaj utworzony wczeniej projekt Strings, otwrz okno projektowe z formularzem
Form1 i dodaj nowy przycisk. Nazwij go btnConcatenation i ustaw jego waciwo Text
na czenie. Kliknij dwukrotnie ten przycisk i dodaj wyrniony kod:
Private Sub btnConcatenation_Click(ByVal sender As System.Object, _
ByVal e As System.EventArgs) Handles btnConcatenation.Click
' Deklaracja zmiennych.
Dim strResults As String
Dim strOne As String
Dim strTwo As String
' Przypisanie wartoci do zmiennych.
strOne = "Witaj,"

78 ROZDZIA 3. PISANIE PROGRAMW


strTwo = " wiecie!"
' czenie cigw znakw.
strResults = strOne & strTwo
' Wywietlanie wyniku.
MessageBox.Show(strResults, "Cigi znakw")
End Sub

2. Uruchom projekt i kliknij przycisk czenie. Pojawi si okno znane ju z rysunku 3.6.
Jak to dziaa?
To wiczenie Sprbuj sam rozpoczyna si od deklaracji trzech zmiennych przechowujcych dane
typu String:
'

Deklaracja zmiennych.

Dim strOne As String


Dim strTwo As String
Dim strResults As String

Nastpnie program przypisuje wartoci do dwch pierwszych zmiennych:


'

Przypisanie wartoci do zmiennych.

strOne = "Witaj,"
strTwo = " wiecie!"

Po przypisaniu wartoci do dwch pierwszych cigw znakw program czy je za pomoc operatora & i zapisuje wynik czenia w trzeciej zmiennej o nazwie strResults:
'

czenie cigw znakw.

strResults = strOne & strTwo

Uywanie operatora czenia inline


Nie musisz definiowa zmiennych, aby uy operatora czenia. Moesz uy go w locie, jak ilustruj to projekty Floating Point Math, Integer Math i Variables. We wczeniejszych przykadach zobaczye ju, jak korzysta z operatora czenia w ten sposb. Kod przeksztaca w nich
warto zapisan w zmiennej dblNumber na cig znakw, aby mona go wywietli na ekranie.
Przyjrzyj si nastpujcemu fragmentowi kodu:
MessageBox.Show("Test dzielenia. " & dblNumber.ToString, _
"Liczby zmiennoprzecinkowe")

"Test dzielenia. " to cig znakw, jednak nie trzeba go definiowa jako zmiennej tego typu.
W sownictwie specyficznym dla jzyka Visual Basic 2010 jest to tak zwany litera, co oznacza, e ma
on posta widoczn w kodzie i jest niezmienny. Przy stosowaniu operatora czenia dla tego cigu
i wyraenia dblNumber.ToString program przeksztaca warto zmiennej dblNumber na cig znakw
i umieszcza j za cigiem "Test dzielenia. ". Warto pamita, e metoda ToString przeksztaca warto zmiennej na cig znakw. Wynik caej operacji to cig przekazywany do metody
MessageBox.Show. Cig ten obejmuje zarwno podstawowy tekst, jak i obecn warto zmiennej
dblNumber.

Typy danych 79

Inne operacje na cigach znakw


Na cigach znakw mona przeprowadza take wiele innych operacji. Niektre z nich opisuje nastpne wiczenie Sprbuj sam.

SPRBUJ SAM

Zwracanie dugoci cigu znakw

1. Najpierw nauczysz si sprawdza dugo cigu znakw za pomoc sucej do tego


waciwoci.
2. W projekcie Strings otwrz formularz Form1 w oknie projektowym, dodaj do niego
pole tekstowe i nazwij je txtString. Nastpnie dodaj nowy przycisk, nazwij go btnLength
i zmie jego waciwo Text na Dugo. Uporzdkuj kontrolki tak, aby wyglday
podobnie jak na rysunku 3.7.

Rysunek 3.7. Formularz programu do wykonywania operacji na cigach znakw

3. Kliknij dwukrotnie przycisk Dugo, aby utworzy metod obsugi zdarzenia Click.
Nastpnie dodaj do tej metody wyrniony pogrubieniem kod:
Private Sub btnLength_Click(ByVal sender As System.Object, _
ByVal e As System.EventArgs) Handles btnLength.Click
' Deklaracja zmiennej.
Dim strResults As String
' Pobranie tekstu z pola tekstowego.
strResults = txtString.Text
' Wywietlenie dugoci cigu znakw.
MessageBox.Show(strResults.Length.ToString & " znakw", _
"Cigi znakw")
End Sub

4. Uruchom projekt i wpisz dowolny tekst w pole tekstowe.


5. Kliknij przycisk Dugo pojawi si okno podobne do tego na rysunku 3.8.

Rysunek 3.8. Wywietlanie dugoci cigu znakw

Jak to dziaa?
Na pocztku metoda deklaruje zmienn na cig znakw. Nastpnie pobiera tekst wpisany przez
uytkownika w pole tekstowe i zapisuje go w zmiennej strResults.

80 ROZDZIA 3. PISANIE PROGRAMW


'

Deklaracja zmiennej.

Dim strResults As String


'

Pobranie tekstu z pola tekstowego.

strResults = txtString.Text

Po pobraniu cigu znakw mona uy waciwoci Length do pobrania wartoci okrelajcej liczb
znakw w tym cigu. Pamitaj, e komputer liczy jako znaki take odstpy oraz znaki przestankowe.
Poniewa waciwo Length zwraca liczb znakw jako warto typu Integer, warto przeksztaci
j na cig znakw za pomoc metody ToString:
'

Wywietlenie dugoci cigu znakw.

MessageBox.Show(strResults.Length.ToString & " znakw", _


"Cigi znakw")

Podcigi
Popularne sposoby manipulowania cigami znakw w programach obejmuj uywanie zbioru znakw pojawiajcych si na pocztku cigu, zbioru znakw znajdujcych si na kocu cigu lub zbioru
znakw pojawiajcych si w rodku cigu. Takie fragmenty to podcigi.

SPRBUJ SAM

Uywanie podcigw

To wiczenie Sprbuj sam opiera si na poprzedniej aplikacji i pokazuje, jak wywietli trzy pierwsze, trzy rodkowe oraz trzy ostatnie znaki cigu.
1. Otwrz formularz Form1 w oknie projektowym w projekcie Strings. Dodaj kolejny przycisk
do formularza Form1, nazwij go btnSplit i ustaw jego waciwo Text na Rozbij. Kliknij
dwukrotnie ten przycisk i dodaj wyrniony pogrubieniem kod:
Private Sub btnSplit_Click(ByVal sender As System.Object, _
ByVal e As System.EventArgs) Handles btnSplit.Click
' Deklaracja zmiennej.
Dim strResults As String
' Pobieranie tekstu z pola tekstowego.
strResults = txtString.Text
' Wywietlanie trzech pierwszych znakw.
MessageBox.Show(strResults.Substring(0, 3), "Cigi znakw")
' Wywietla trzy rodkowe znaki.
MessageBox.Show(strResults.Substring(3, 3), "Cigi znakw")
' Wywietla trzy ostatnie znaki.
MessageBox.Show(strResults.Substring(strResults.Length - 3), "Cigi znakw")
End Sub

2. Uruchom projekt. Wpisz w pole tekstowe sowo Platforma.


3. Kliknij przycisk Rozbij pojawi si trzy okna komunikatu widoczne na rysunku 3.9.

Typy danych 81

Rysunek 3.9. Rozbijanie cigu znakw na podcigi

Jak to dziaa?
Metoda Substring pozwala pobra zbir znakw znajdujcych si w dowolnym miejscu cigu. Tej
metody mona uywa na dwa sposoby. Pierwszy sposb polega na podaniu pocztkowej pozycji
oraz liczby pobieranych znakw. Pierwsza instrukcja informuje, e podcig zaczyna si od pozycji
zerowej, czyli od pocztku cigu, oraz zawiera trzy znaki:
'

Wywietlanie trzech pierwszych znakw.

MessageBox.Show(strResults.Substring(0, 3), "Cigi znakw")

Nastpna instrukcja pobiera podcig zaczynajcy si od pozycji trzeciej i skadajcy si z trzech


znakw:
'

Wywietla trzy rodkowe znaki.

MessageBox.Show(strResults.Substring(3, 3), "Cigi znakw")

Ostatnia instrukcja przyjmuje tylko jeden parametr. W takiej sytuacji metoda Substring rozpoczyna pobieranie od podanej pozycji i pobiera wszystkie znaki do koca cigu. W tym przypadku
zostaje wykorzystana kombinacja metody Substring i waciwoci Length, dlatego znaczenie tej instrukcji to: pobierz wszystkie znaki cigu od trzeciej pozycji od koca do koca.
'

Wywietla trzy ostatnie znaki.

MessageBox.Show(strResults.Substring(strResults.Length - 3), "Cigi znakw")

Formatowanie cigw znakw


Liczby w cigach znakw czsto wymagaj zmiany sposobu ich wywietlania. Rysunek 3.5 przedstawia dziaanie operatora dzielenia. W tym przypadku nie jest potrzebne a 14 miejsc po przecinku
dwa lub trzy wystarcz w zupenoci. Mona sformatowa cig znakw tak, aby wywietla
wszystkie znaki po lewej stronie przecinka, ale tylko trzy cyfry po jego prawej stronie. Nastpne
wiczenie Sprbuj sam pokazuje, jak to zrobi.

SPRBUJ SAM

Formatowanie cigw znakw

W tym wiczeniu Sprbuj sam zmodyfikujesz utworzony wczeniej projekt Floating Point Math,
tak aby wywietla liczby w postaci cigw o rnych formatach.
1. Otwrz projekt Floating Point Math utworzony na pocztku rozdziau.
2. Otwrz kod formularza Form1 w edytorze kodu i wprowad wyrnione pogrubieniem
zmiany w procedurze btnFloatMath_Click:
'

Przypisuje warto do zmiennej dblNumber i dzieli j.

dblNumber = 12
dblNumber /= 7
' Wywietla niesformatowany wynik.

82 ROZDZIA 3. PISANIE PROGRAMW


MessageBox.Show("Test dzielenia bez formatowania. " & _
dblNumber.ToString, "Liczby zmiennoprzecinkowe")
' Wywietla wynik po sformatowaniu.
MessageBox.Show("Test dzielenia z formatowaniem. " & _
String.Format("{0:n3}", dblNumber), "Liczby zmiennoprzecinkowe")
End Sub

3. Uruchom projekt. Najpierw pojawi si okno z wynikiem testu mnoenia (z poprzedniego


przykadu), a nastpnie dwa inne okna, co ilustruje rysunek 3.10.

Rysunek 3.10. Formatowanie cigw znakw z liczbami

Jak to dziaa?
Sztuczka polega na wywoaniu metody String.Format. Ta uyteczna metoda pozwala formatowa
liczby. Podstaw dziaania tej metody jest jej pierwszy parametr, ktry definiuje format cigu znakw:
MessageBox.Show("Test dzielenie z formatowaniem. " & _
String.Format("{0:n3}", dblNumber), "Liczby zmiennoprzecinkowe")

Metoda

String.Format w powyszym przykadzie przyjmuje dwa parametry. Pierwszy z nich,


"{0:n3}", okrela podany format. Drugi parametr, dblNumber, to formatowana warto. Warto
zauway, e z uwagi na formatowanie liczby jako cigu znakw nie trzeba stosowa metody ToString
po nazwie zmiennej dblNumber, co miao miejsce w poprzednim wywoaniu metody Show klasy
MessageBox. Dzieje si tak, poniewa metoda String.Format przyjmuje liczb, a nie cig znakw.

w parametrze okrelajcym format informuje metod String.Format, e formatowanie ma


dotyczy parametru danych o indeksie zero, czyli drugiego parametru metody, ktrym w tym
przypadku jest zmienna dblNumber. Warto znajdujca si po dwukropku okrela sposb formatowania zmiennej dblNumber. n3 oznacza, e formatowanie dotyczy liczby zmiennoprzecinkowej i ma uwzgldnia trzy miejsca po przecinku. W celu wywietlenia tylko dwch liczb po
przecinku naley uy wartoci n2.

Formatowanie wedug ustawie regionalnych


W czasie tworzenia aplikacji na platform .NET trzeba pamita, e uytkownik moe by przyzwyczajony do innych konwencji ni programista. Na przykad w Polsce do oddzielania cakowitej
czci liczby od czci uamkowej suy przecinek (,). Z kolei w Stanach Zjednoczonych uywa si
do tego kropki (.).
System Windows rozwizuje takie problemy za programistw na podstawie ustawie regionalnych.
Jeli uywasz platformy .NET w poprawny sposb, prawie nigdy nie musisz si przejmowa takimi
zagadnieniami.
Potwierdza to midzy innymi kolejny przykad. Uycie parametru n3 do formatowania cigu znakw
informuje platform .NET nie tylko o tym, e ma wywietla trzy cyfry po przecinku, ale take o koniecznoci uywania separatorw co trzy cyfry po lewej stronie od przecinka (1 714,286).

Typy danych 83

UWAGA
Aby zobaczy dziaanie separatora, w kodzie przykadu naley zmieni rwnanie z 12/7
na 12000/7.

Jeli polecisz komputerowi uycie ustawie regionalnych Stanw Zjednoczonych i uruchomisz ten
sam kod (nie wymaga to wprowadzania adnych zmian w samej aplikacji), program wywietli liczb
w innym formacie 1,714.286.
UWAGA
Moesz zmieni ustawienia regionalne, otwierajc Panel sterowania, klikajc ikon Opcje
regionalne i jzykowe, a nastpnie zmieniajc jzyk na Angielski (Stany Zjednoczone).

W Stanach Zjednoczonych separator tysicy to przecinek, a nie odstp, a separator czci uamkowej
to kropka, a nie przecinek. Uywajc metody String.Format, moesz pisa aplikacje dziaajce poprawnie niezalenie od konfiguracji ustawie regionalnych na komputerze uytkownika.

Zamiana podcigw
Kolejn czsto stosowan operacj na cigach znakw jest zamiana wystpie jednego cigu na inny.

SPRBUJ SAM

Zamiana podcigw

To wiczenie Sprbuj sam ilustruje zamian podcigw. Dowiesz si tu, jak zmodyfikowa aplikacj Strings tak, aby zamieniaa cig znakw "Witaj" na " egnaj".
1. Otwrz program Strings utworzony w jednym z wczeniejszych wicze.
2. Otwrz w oknie projektowym formularz Form1 i dodaj do niego kolejny przycisk. Zmie
nazw przycisku na btnReplace i ustaw waciwo Text na Zamie. Kliknij dwukrotnie
ten przycisk i dodaj wyrniony kod do metody obsugi zdarzenia Click:
Private Sub btnReplace_Click(ByVal sender As System.Object, _
ByVal e As System.EventArgs) Handles btnReplace.Click
' Deklaracja zmiennych.
Dim strData As String
Dim strResults As String
' Pobiera tekst z pola tekstowego.
strData = txtString.Text
' Zamienia wystpienia cigu znakw Witaj.
strResults = strData.Replace("Witaj", "
egnaj")
' Wywietla nowy cig znakw.
MessageBox.Show(strResults, "Cigi znakw")
End Sub

3. Uruchom projekt i wpisz cig Witaj, wiecie! w polu tekstowym, zachowujc wielko liter.
4. Kliknij przycisk Zamie. Powinno pojawi si okno komunikatu z napisem egnaj, wiecie!.

84 ROZDZIA 3. PISANIE PROGRAMW


Jak to dziaa?
Metoda Replace wyszukuje w tekcie cig znakw podany jako pierwszy parametr, a nastpnie
zamienia jego wystpienia na cig znakw podany jako drugi parametr. Po zamianie metoda zwraca
nowy cig znakw, ktry mona wywietli w zwyky sposb.
'

Zamienia wystpienia cigu znakw Witaj.

strResults = strData.Replace("Witaj", " egnaj")

Nie musisz ogranicza si do pojedynczego wyszukiwania i zamiany. Jeli wpiszesz dwa sowa Witaj
w polu tekstowym i klikniesz przycisk Zamie, program wywietli dwa sowa egnaj. Jednak musisz
pamita o wielkoci liter ten program nie zamieni sowa witaj. Porwnywanie cigw znakw
bez uwzgldniania wielkoci liter opisano w nastpnym rozdziale.

Uywanie dat
Kolejny czsto uywany typ danych to Date. Ten typ przechowuje wartoci reprezentujce daty.

SPRBUJ SAM

Wywietlanie aktualnej daty


Plik z kodem projektu Date Demo mona pobra z witryny helion.pl.

To wiczenie Sprbuj sam pokazuje, jak wywietli aktualn dat.


1. Utwrz now aplikacj typu Windows Forms Application i nazwij j Date Demo.
2. Za pomoc okna narzdzi dodaj do formularza nowy przycisk. Nazwij go btnShowDate
i ustaw jego waciwo Text na Wywietl dat.
3. Kliknij dwukrotnie przycisk, aby utworzy metod obsugi zdarzenia Click, a nastpnie
dodaj wyrniony pogrubieniem kod:
Private Sub btnShowDate_Click(ByVal sender As System.Object, _
ByVal e As System.EventArgs) Handles btnShowDate.Click
' Deklaracja zmiennej.
Dim dteResults As Date
' Pobieranie aktualnej daty i czasu.
dteResults = Now
' Wywietlanie wyniku.
MessageBox.Show(dteResults.ToString, "Wywietlanie daty")
End Sub

4. Zapisz projekt przez kliknicie przycisku Save All na pasku narzdzi.


5. Uruchom projekt i kliknij przycisk Wywietl dat. Powinno pojawi si okno podobne
do tego na rysunku 3.11. Dokadny format tekstu w oknie zaley od ustawie regionalnych.

Rysunek 3.11. Wywietlanie aktualnej daty

Typy danych 85

Jak to dziaa?
Typ danych Date moe suy do przechowywania wartoci reprezentujcych dat i czas. Po utworzeniu zmiennej tego typu metoda inicjuje j za pomoc aktualnej daty i czasu suy do tego
instrukcja Now. Nastpnie metoda wywietla dat w oknie dialogowym. Warto zauway, e poniewa program ma wywietla zmienn typu Date jako cig znakw, naley uy metody ToString
do przeksztacenia wartoci na taki cig:
'

Deklaracja zmiennej.

Dim dteResults As Date


'

Pobieranie aktualnej daty i czasu.

dteResults = Now
'

Wywietlanie wyniku.

MessageBox.Show(dteResults.ToString, "Wywietlanie daty")

Typ danych Date nie rni si od innych typw danych, cho daje wiele moliwoci. Kilka kolejnych
punktw opisuje, jak manipulowa datami i kontrolowa sposb ich wywietlania na ekranie.

Formatowanie dat
Widziae ju jeden sposb formatowania daty. Domylnie data po przekazaniu jej do metody
MessageBox.Show zostanie wywietlona w sposb przedstawiony na rysunku 3.11.
Poniewa uywana maszyna ma polskie ustawienia regionalne, data ma format rrrr-mm-dd, a czas
jest wywietlany w formacie 24-godzinnym. Jest to kolejny przykad wpywu ustawie regionalnych
na formatowanie rnych typw danych. Jeli zmienisz ustawienia regionalne komputera na
Stany Zjednoczone, data bdzie miaa format m/d/rrrr, a czas bdzie wywietlany w formacie
12-godzinnym, na przykad 10/2/2006 10:48:06 AM.
Cho moesz kontrolowa sposb wywietlania daty i czasu, najlepiej polega pod tym wzgldem
na platformie .NET. Dziki temu dane s automatycznie wywietlane w formacie dogodnym dla
uytkownika.

SPRBUJ SAM

Formatowanie dat

To wiczenie Sprbuj sam przedstawia cztery uyteczne metody, ktre umoliwiaj formatowanie dat.
1. Otwrz kod formularza Form1 w edytorze kodu, znajd metod obsugi zdarzenia Click
przycisku, a nastpnie dodaj do niej wyrniony pogrubieniem kod:
'

Wywietlanie wyniku.

MessageBox.Show(dteResults.ToString., "Wywietlanie daty")


' Wywietlanie dat.
MessageBox.Show(dteResults.ToLongDateString, "Wywietlanie daty")
MessageBox.Show(dteResults.ToShortDateString, "Wywietlanie daty")
' Wywietlanie czasu.
MessageBox.Show(dteResults.ToLongTimeString, "Wywietlanie daty")
MessageBox.Show(dteResults.ToShortTimeString, "Wywietlanie daty")

86 ROZDZIA 3. PISANIE PROGRAMW


2. Uruchom projekt. Pojawi si pi kolejnych okien. Pierwsze okno dialogowe ju widziae
wywietla dat i czas wedug ustawie regionalnych komputera. Drugie okno wywietla
dat w dugiej postaci, a trzecie w skrconej. Czwarte okno wywietla czas w dugim
formacie, a ostatnie w skrconej.
Jak to dziaa?
Powysze wiczenie pokazuje cztery sposoby, na ktre mona wywietla dat i czas w aplikacjach
dla systemu Windows. S to: pena data, skrcona data, peny czas i skrcony czas. Nazwy formatw
nie wymagaj wyjanie:
'

Wywietlanie dat.

MessageBox.Show(dteResults.ToLongDateString, "Wywietlanie daty")


MessageBox.Show(dteResults.ToShortDateString, "Wywietlanie daty")
'

Wywietlanie czasu.

MessageBox.Show(dteResults.ToLongTimeString, "Wywietlanie daty")


MessageBox.Show(dteResults.ToShortTimeString, "Wywietlanie daty")

Pobieranie skadnikw daty i czasu


Kiedy uywasz zmiennej typu Date, moesz uy kilku waciwoci, ktre pozwalaj pobra skadniki
daty i czasu. Warto im si przyjrze.

SPRBUJ SAM

Pobieranie skadnikw daty i czasu

W tym wiczeniu Sprbuj sam zobaczysz, jak pobiera skadniki daty i czasu zapisane w zmiennych typu Date.
1. Wr do okna projektowego w projekcie Date Demo i dodaj do formularza kolejny przycisk.
Nazwij go btnDateProperties i ustaw jego waciwo Text na Waciwoci daty. Kliknij
dwukrotnie ten przycisk i dodaj wyrniony pogrubieniem kod do metody obsugi zdarzenia
Click:
Private Sub btnDateProperties_Click(ByVal sender As System.Object, _
ByVal e As System.EventArgs) Handles btnDateProperties.Click
' Deklaracja zmiennej.
Dim dteResults As Date
' Pobranie aktualnej daty i czasu.
dteResults = Now
' Wywietlanie rnych waciwoci daty.
MessageBox.Show("Miesic: " & dteResults.Month, "Wywietlanie daty")
MessageBox.Show("Dzie: " & dteResults.Day, "Wywietlanie daty")
MessageBox.Show("Rok: " & dteResults.Year, "Wywietlanie daty")
MessageBox.Show("Godzina: " & dteResults.Hour, "Wywietlanie daty")
MessageBox.Show("Minuta: " & dteResults.Minute, "Wywietlanie daty")
MessageBox.Show("Sekunda: " & dteResults.Second, "Wywietlanie daty")
MessageBox.Show("Dzie tygodnia: " & dteResults.DayOfWeek, "Wywietlanie daty")
MessageBox.Show("Dzie roku: " & dteResults.DayOfYear, "Wywietlanie daty")
End Sub

2. Uruchom projekt. Po klikniciu przycisku zobaczysz zrozumiae okna dialogowe.

Typy danych 87

Jak to dziaa?
Dziaanie tego kodu jest cakiem proste. Jeli chcesz pobra godzin, musisz uy waciwoci Hour.
Aby pobra rok, uywasz waciwoci Year i tak dalej.

Stae w datach
W poprzednim wiczeniu Sprbuj sam waciwo DayOfWeek zwracaa liczb cakowit, co wida
na rysunku 3.12.

Rysunek 3.12. Numer dnia tygodnia

Aktualna data to 17 czerwca 2010 roku, jest czwartek, a program wywietla liczb 4. Pierwszym
dniem tygodnia w Polsce jest niedziela, a odliczanie rozpoczyna si od zera, dlatego czwartek ma
warto 4. Moliwe jednak, e uywasz komputera, na ktrym ustawienia regionalne okrelaj
poniedziaek jako pierwszy dzie tygodnia. W takiej sytuacji waciwo DayOfWeek zwrciaby
warto 3. Skomplikowane? Moliwe, jednak wystarczy zapamita, e dzie numer jeden to nie
zawsze poniedziaek. Podobna sytuacja ma miejsce w jzyku naturalnym polska roda to po
angielsku Wednesday.

SPRBUJ SAM

Pobieranie nazw dni i miesicy

Jeli chcesz pobra nazw dnia lub miesica, najlepiej jest uy do tego platformy .NET, ktra zwrci
odpowiedni nazw na podstawie ustawie regionalnych komputera. Opisuje to ponisze wiczenie
Sprbuj sam.
1. Wr do okna projektowego w projekcie Date Demo i dodaj do formularza nowy przycisk.
Nazwij go btnDateNames i zmie jego waciwo Text na Nazwy dni i miesicy.
Kliknij dwukrotnie przycisk i dodaj wyrniony pogrubieniem kod do metody obsugi
zdarzenia Click:
Private Sub btnDateNames_Click(ByVal sender As System.Object, _
ByVal e As System.EventArgs) Handles btnDateNames.Click
' Deklaracja zmiennej.
Dim dteResults As Date
' Pobranie aktualnej daty i czasu.
dteResults = Now
MessageBox.Show("Nazwa dnia tygodnia: " & dteData.ToString("dddd"), _
"Wywietlanie daty")
MessageBox.Show("Nazwa miesica: " & dteData.ToString("MMMM"), _
"Wywietlanie daty")
End Sub

88 ROZDZIA 3. PISANIE PROGRAMW


2. Uruchom projekt i kliknij przycisk. Zobaczysz dwa okna komunikatu. Jedno wywietla nazw
dnia tygodnia (na przykad Poniedziaek), a drugie nazw miesica (na przykad
Wrzesie).
Jak to dziaa?
Kiedy uywasz metod z rodziny ToLongDateString, pozwalasz platformie .NET sprawdzi preferowany przez uytkownika format daty w ustawieniach regionalnych komputera. W ostatnim
przykadzie uye metody ToString, ale podae wasny sposb formatowania danych.
MessageBox.Show("Nazwa dnia tygodnia: " & dteData.ToString("dddd"), _
"Wywietlanie daty")
MessageBox.Show("Nazwa miesica: " & dteData.ToString("MMMM"), _
"Wywietlanie daty")

Zwykle nie zaleca si uywania metody ToString do formatowania dat, poniewa lepiej polega na
wbudowanych formatach platformy .NET. Cig "dddd" pozwala wywietli nazw dnia tygodnia,
a "MMMM" reprezentuje nazw miesica. Wielko znakw jest istotna cig znakw "mmmm" nie
zadziaa.
Aby zobaczy dziaanie tej techniki, moesz zmieni ustawienia regionalne na angielski. Dowiesz si
wtedy na przykad, e dzie tygodnia to Friday, a nazwa miesica to February.

Definiowanie literaw dat


Wiesz ju, e literay cigw znakw definiuje si w nastpujcy sposb:
Dim strResults As String
strResults = "Hura"

Literay dat funkcjonuj w podobny sposb, jednak do oznaczenia pocztku i koca daty suy znak
kratki (#).

SPRBUJ SAM

Definiowanie literaw dat

W tym wiczeniu Sprbuj sam dowiesz si, jak definiowa literay dat.
1. Wr do okna projektowego w projekcie Date Demo i dodaj do formularza nastpny przycisk.
Zmie jego nazw na btnDateLiterals, a waciwo Text na Literay dat.
Kliknij dwukrotnie przycisk i dodaj do metody obsugi zdarzenia Click wyrniony
pogrubieniem kod:
Private Sub btnDateLiterals_Click(ByVal sender As System.Object, _
ByVal e As System.EventArgs) Handles btnDateLiterals.Click
' Deklaracja zmiennych.
Dim dteResults As Date
' Przypisywanie do zmiennej daty i czasu.
dteResults = #1/1/2010 8:01:00 AM#
' Wywietlanie daty i czasu.
MessageBox.Show(dteResults.ToLongDateString & " " & _
dteResults.ToLongTimeString, "Wywietlanie daty")
End Sub

2. Uruchom projekt i kliknij przycisk. Powinien pojawi si komunikat widoczny na rysunku 3.13.

Typy danych 89

Rysunek 3.13. Wywietlanie literau daty

Jak to dziaa?
Definiujc literay dat, trzeba uywa formatu mm/dd/rrrr, niezalenie od ustawie regionalnych
komputera. Kompilator moe nie zgosi bdu, jeli zdefiniujesz dat w formacie dd/mm/rrrr,
poniewa dana data moe by poprawna w obu formatach (na przykad 06/07/2010). Ten wymg
pozwala unikn wieloznacznoci czy 6/7/2010 oznacza szsty lipca, czy sidmy czerwca?
UWAGA
W praktyce ta zasada dotyczy wszystkich aspektw programowania nie ma czego takiego
jak dialekty jzykw programowania. Zwykle najlepiej stosowa si do standardw
pnocnoamerykaskich. Jak dowiesz si z lektury dalszych rozdziaw tej ksiki, dotyczy
to take nazw zmiennych i metod na przykad uywa si nazwy GetColor (amerykaski
angielski) zamiast GetColour (brytyjski angielski).

Warto take pamita, e nie trzeba wywietla jednoczenie daty i czasu. Mona wywietli tylko
jedn z tych informacji.

Manipulowanie datami
Jednym z zagadnie, ktre zawsze sprawiay pewne problemy programistom, jest manipulowanie
datami. Pamitasz przeddzie roku 2000, kiedy wszyscy obawiali si, czy komputery poradz sobie
z nadejciem nowego tysiclecia? Kopoty moe sprawia take obsuga lat przestpnych.
Najbliszy przeom stuleci, ktry przypada na rok przestpny, to przejcie midzy rokiem 2399 a 2400.
Ponisze wiczenie Sprbuj sam opisuje, jak uy pewnych metod typu danych Date w celu przystosowania daty tak, aby pynnie przesza w XXV wiek.

SPRBUJ SAM

Manipulowanie datami

1. Wr do okna projektowego w projekcie Date Demo i dodaj do formularza kolejny przycisk.


Nazwij go btnDateManipulation i zmie jego waciwo Text na Manipulacja datami.
Kliknij dwukrotnie ten przycisk i dodaj do metody obsugi jego zdarzenia Click wyrniony
pogrubieniem kod:
Private Sub btnDateManipulation_Click(ByVal sender As System.Object, _
ByVal e As System.EventArgs) Handles btnDateManipulation.Click
' Deklaracja zmiennych.
Dim dteStartDate As Date
Dim dteChangedDate As Date
' Wybrany dzie 2400 roku.
dteStartDate = #2/28/2400#

90 ROZDZIA 3. PISANIE PROGRAMW


' Dodanie dnia i wywietlenie wyniku.
dteChangedDate = dteStartDate.AddDays(1)
MessageBox.Show(dteChangedDate.ToLongDateString, "Wywietlanie daty")
' Dodanie kilku miesicy i wywietlenie wyniku.
dteChangedDate = dteStartDate.AddMonths(6)
MessageBox.Show(dteChangedDate.ToLongDateString, "Wywietlanie daty")
' Odjcie roku i wywietlenie wyniku.
dteChangedDate = dteStartDate.AddYears(-1)
MessageBox.Show(dteChangedDate.ToLongDateString, "Wywietlanie daty")
End Sub

2. Uruchom projekt i kliknij przycisk. Kolejno pojawi si trzy okna komunikatu. Pierwsze
okno wywietli dug wersj daty 2400-02-29, drugie okno pokae dug wersj daty
2400-08-28, a w ostatnim oknie zobaczysz dug wersj daty 2399-02-28.
Jak to dziaa?
Klasa Date udostpnia kilka metod sucych do manipulowania datami. W poprzednim wiczeniu Sprbuj sam uye trzech z nich:
'

Dodanie dnia i wywietlenie wyniku.

dteChangedDate = dteStartDate.AddDays(1)
MessageBox.Show(dteChangedDate.ToLongDateString, "Date Demo")
' Dodanie kilku miesicy i wywietlenie wyniku.
dteChangedDate = dteStartDate.AddMonths(6)
MessageBox.Show(dteChangedDate.ToLongDateString, "Date Demo")
' Odjcie roku i wywietlenie wyniku.
dteChangedDate = dteStartDate.AddYears(-1)
MessageBox.Show(dteChangedDate.ToLongDateString, "Date Demo")

Warto zauway, e przekazanie liczby ujemnej do metody Add zmiennej typu Date powoduje
odjcie odpowiedniej liczby jednostek czasu (w przykadzie rok zmieni si z 2400 na 2399). Inne istotne metody z rodziny Add to AddHours (dodawanie godzin), AddMinutes (dodawanie minut),
AddSeconds (dodawanie sekund) i AddMilliseconds (dodawanie milisekund).

Zmienne logiczne
Dotd poznae typy danych Integer, Double, Single, String i Date. Inny wany typ danych to
Boolean. Gdy poznasz ten typ danych, bdziesz umia uywa wszystkich podstawowych typw
danych najczciej stosowanych w programach.
Zmienne typu Boolean (zmienne logiczne) maj zawsze jedn z dwch wartoci: True lub False.
Zmienne logiczne s bardzo istotne, kiedy programy maj podejmowa decyzje, co bardziej szczegowo opisuje rozdzia 4.

Przechowywanie zmiennych
Najbardziej ograniczonym zasobem komputera jest zwykle pami. Powiniene stara si jak najlepiej wykorzysta dostpn ilo pamici. Kiedy tworzysz zmienn, zajmujesz fragment pamici,
dlatego musisz stara si uywa jak najmniejszej liczby zmiennych i uywa tych, ktrych musisz,
w jak najwydajniejszy sposb.

Przechowywanie zmiennych 91

Obecnie nie musisz poznawa tajnikw maksymalnej optymalizacji wykorzystania zmiennych.


Dzieje si tak z dwch powodw. Po pierwsze, wspczesne komputery maj zwykle duo pamici
i miny ju czasy, kiedy programici musieli mczy si z obsug systemw patniczych przy uyciu
32 KB pamici. Po drugie, nowoczesne kompilatory cechuj si pewn inteligencj, dziki czemu
potrafi utworzy zoptymalizowany kod.

System dwjkowy
Komputery uywaj systemu dwjkowego (binarnego) do reprezentowania wszystkich informacji.
Oznacza to, e wszystkie informacje, ktre zapisujesz w komputerze, s w formacie dwjkowym,
czyli maj posta zer i jedynek. Poniszy przykad pokazuje zapis liczby 27. W kodzie dwjkowym
ta liczba ma posta 11011, gdzie kada cyfra reprezentuje potg dwjki. Grny diagram na rysunku
3.14 przedstawia reprezentacj liczby 27 w znanym wszystkim systemie dziesitnym, a dolny
w systemie dwjkowym.

Rysunek 3.14. Obliczanie wartoci liczb w systemach: dziesitnym i dwjkowym

Cho w pierwszej chwili moe si to wydawa nieco niezrozumiae, sprbuj zastanowi si nad funkcjonowaniem systemu dziesitnego. W systemie dziesitnym (o podstawie 10) kada cyfra znajduje
si na pewnej pozycji. Ta pozycja reprezentuje potg liczby 10. Pierwsza pozycja reprezentuje 10 do
potgi zerowej, nastpna 10 do potgi pierwszej i tak dalej. Jeli chcesz wiedzie, jak liczb reprezentuje dany ukad cyfr, musisz sprawdzi cyfry znajdujce si na kolejnych pozycjach, pomnoy
je przez potg liczby 10 przypisan do danej pozycji i doda wyniki.
Tak samo dziaa system dwjkowy. Trudniej go odczyta, poniewa wikszo osb nie jest przyzwyczajona do liczb o podstawie dwa. Aby przeksztaci liczb z systemu dwjkowego na system
dziesitny, naley sprawdzi cyfry znajdujce si na kolejnych pozycjach (zera lub jedynki), pomnoy je przez potg liczby dwa przypisan do danej pozycji i doda wyniki. Suma tych wynikw
to liczba w systemie dziesitnym.

Bity i bajty
W komputerze kada pozycja przyjmujca warto zero lub jeden to bit. Jest to najmniejsza jednostka
informacji, stanowica odpowied na pytanie tak nie i reprezentowana w elemencie ukadu komputera, przez ktry prd pynie lub nie. Liczba przedstawiona na rysunku 3.14 zajmuje osiem pozycji
(bitw), a osiem bitw skada si na jeden bajt. Bajt to jednostka miary suca do opisu pamici
komputera.

92 ROZDZIA 3. PISANIE PROGRAMW


Kilobajt (KB) to 1024 bajty. Dlaczego 1024, a nie 1000? Poniewa komputery uywaj systemu
dwjkowego, a 210 to wanie liczba 1024, ktra jest dla komputera okrg liczb. Komputery nie
uywaj liczb o podstawie 10, dlatego bardziej naturalna jest dla nich liczba 1024 ni 1000.
Podobnie megabajt to 1024 kilobajty lub 1 048 576 bajtw. Jest to kolejna okrga liczba, poniewa
jest to 220. Gigabajt to 1024 megabajty lub 1 073 741 824 bajtw. Ponownie jest to potga liczby 2,
tym razem 230. Wreszcie terabajt to 240, a petabajt to 250.
Po co te wszystkie informacje o liczbach? Znajomo sposobw przechowywania zmiennych w pamici komputera pomaga projektowa lepsze programy. Jeli uywasz komputera z 256 megabajtami
pamici, moesz wykorzysta w programie 262 144 KB (lub 268 435 456 bajtw, czyli 2 147 483 648
bitw). Kiedy piszesz aplikacj, powiniene stara si jak najlepiej wykorzysta dostpn pami.

Reprezentowanie wartoci
Wikszo wspczesnych komputerw to komputery 32-bitowe, co oznacza, e s zoptymalizowane
pod ktem liczb cakowitych o dugoci 32 bitw. Liczba przedstawiona w poprzednim przykadzie
to liczba 8-bitowa. W przypadku liczb 8-bitowych najwiksz moliw wartoci jest 255:
1x128 + 1x64 + 1x32 + 1x16 + 1x4 + 1x2 + 1x1 = 255

Liczby 32-bitowe mog reprezentowa dowoln warto z przedziau od -2 147 483 648 do 2 147
483 647. Takie wanie liczby mog przechowywa zmienne typu Integer:
Dim intNumber As Integer

W wyniku takiej deklaracji platforma .NET przydziela 32-bitowy blok pamici, ktry moe zawiera
dowoln warto z przedziau od 0 do 2 147 483 647. Pamitaj take, e dostpna ilo pamici jest
ograniczona. Na komputerze z 256 megabajtami pamici moesz zapisa maksymalnie 67 108 864
liczby cakowite typu Integer. Wydaje si, e to duo, ale pamitaj, e pami jest uywana przez
wszystkie programy. Nie powiniene pisa programw, ktre zajmuj tyle pamici, ile tylko mog.
Staraj si oszczdnie gospodarowa pamici.
Moesz take definiowa liczby zmiennoprzecinkowe o podwjnej precyzji, na przykad takie:
Dim dblNumber As Double

Do reprezentowania liczby tego typu potrzeba 64 bitw pamici. Oznacza to, e na komputerze z 256
megabajtami pamici mona zapisa 33 554 432 liczby zmiennoprzecinkowe o podwjnej precyzji.
UWAGA
Liczby zmiennoprzecinkowe o pojedynczej precyzji zajmuj 32 bity pamici. Jest to poowa
tego, co liczby zmiennoprzecinkowe o podwjnej precyzji, a take tyle samo, co liczby
cakowite.

Jeli zdefiniujesz zmienn typu Integer, zawsze zajmuje ona tak sam ilo pamici (32 bity) niezalenie od tego, jak liczb w niej przechowujesz 1, 3, 249 czy 2 147 483 647. Wielko liczby
nie ma adnego wpywu na ilo pamici potrzebnej do jej przechowywania. Moe si to wydawa
wielkim marnotrawstwem, ale komputery wymagaj, aby liczby tego samego typu zajmoway tak
sam ilo pamici. W przeciwnym razie szybko dziaania programw znacznie by si zmniejszya.

Przechowywanie zmiennych 93

Przyjrzyj si teraz przykadowej definicji cigu znakw:


Dim strResults As String
strResults = "Witaj, wiecie!"

W przeciwiestwie do typw Integer czy Double zmienne typu String nie maj staej dugoci.
Kady znak w cigu znakw zajmuje dwa bajty, czyli 16 bitw. Dlatego do reprezentowania cigu
znakw o dugoci 12 znakw potrzeba 24 bajtw, czyli 192 bitw. Oznacza to, e na komputerze
z 256 megabajtami pamici mona zapisa niewiele ponad dwa miliony cigw znakw o takiej
dugoci. Oczywicie dwa razy duszy cig znakw wymaga dwukrotnie wicej pamici i tak dalej.
Czstym bdem popenianym przez pocztkujcych programistw jest nieuwzgldnianie wpywu
uywanego typu danych na rozmiar zajmowanej pamici. Jeli uywasz zmiennej typu String do
przechowywania wartoci liczbowych, na przykad w taki sposb:
Dim strData As String
strData = "65536"

do jej zapisania potrzebujesz 10 bajtw (80 bitw). Jest to mniej wydajne rozwizanie od przechowywania tej wartoci w zmiennej typu Integer. Aby moliwe byo zapisanie liczby w cigu znakw,
komputer musi przeksztaci wszystkie cyfry na reprezentujce je znaki. Znaki te s zapisywane
w standardzie Unicode, ktry definiuje sposb przechowywania znakw na komputerze. Kademu
znakowi odpowiada niepowtarzalna liczba z przedziau od 0 do 65 535 i to wanie ta liczba jest
przechowywana w kadym bajcie cigu znakw.
Poniej przedstawione s kody standardu Unicode reprezentujce cyfry wchodzce w skad przykadowego cigu znakw:

6 Unicode 54, w systemie dwjkowym 00000000 00110110


5 Unicode 53, w systemie dwjkowym 00000000 00110101
5 Unicode 53, w systemie dwjkowym 00000000 00110101
3 Unicode 51, w systemie dwjkowym 00000000 00110011
6 Unicode 54, w systemie dwjkowym 00000000 00110110

Kady znak zajmuje 16 bitw, dlatego do zapisania 5-cyfrowej liczby potrzeba 80 bitw piciu
16-bitowych liczb. Lepszym rozwizaniem jest zadeklarowanie tej liczby w nastpujcy sposb:
Dim intNumber As Integer
intNumber = 65536

Powoduje to zapisanie wartoci jako jednej liczby w systemie dwjkowym. Zmienne typu Integer
zajmuj 32 bity, dlatego reprezentacja powyszej liczby to 00000000 00000001 00000000 00000000,
co zajmuje duo mniej miejsca ni reprezentacja tej samej liczby w postaci cigu znakw.

Przeksztacanie wartoci
Cho cigi znakw s intuicyjne w uyciu dla ludzi, s nienaturalne dla komputerw. Naturalnym
dziaaniem komputera jest pobranie dwch liczb i wykonanie na nich pewnych podstawowych
matematycznych operacji. Komputer potrafi w cigu sekundy wykona tak du liczb takich
prostych operacji, e uytkownik szybko otrzymuje dane wyniki.
Wyobra sobie, e komputer musi doda liczb 1 do liczby 27. Wiesz ju, e liczba 27 w systemie
dwjkowym to 11011. Rysunek 3.15 przedstawia operacj dodawania.

94 ROZDZIA 3. PISANIE PROGRAMW

Rysunek 3.15. Dodawanie liczb w systemie dwjkowym

Jak wida, arytmetyka na liczbach w systemie dwjkowym nie rni si od arytmetyki w systemie
dziesitnym. Nie mona doda jednoci do ostatniej pozycji, poniewa w systemie dwjkowym cyfry
mog przyjmowa wartoci zero lub jeden, dlatego trzeba zmieni cyfr na ostatniej pozycji na zero
i przenie jedynk na nastpn pozycj. Take tu nie mona doda jednoci, wic ponownie naley
zmieni bit na zero i przenie jedynk na nastpn pozycj. W tym momencie dodawanie si koczy,
a warto nowej liczby to zgodnie z oczekiwaniami 28.
Komputer przed wykonaniem operacji na wartoci musi j przeksztaci na proste liczby. W celu
poprawy wydajnoci aplikacji naley stara si minimalizowa liczb konwersji. Poniej znajduje si
prosty przykad:
Dim strResults As String
strResults = "27"
strResults = strResults + 1
MessageBox.Show(strResults)

Zastanw si, jak dziaa powyszy fragment kodu:


1. Program tworzy zmienn typu String o nazwie strResults.
2. Program przypisuje do tej zmiennej warto 27. Wymaga to czterech bajtw pamici.
3. Aby doda jeden do tej wartoci, komputer musi przeksztaci cig znakw "27"
na wewntrzn, ukryt zmienn typu Integer, ktra zawiera warto 27. Powoduje
to zajcie dodatkowych czterech bajtw pamici, co razem daje 8 bajtw. Ponadto,
co istotniejsze, przeksztacanie wymaga czasu.
4. Po przeksztaceniu cigu znakw na liczb komputer dodaje do niej jeden.
5. Nastpnie komputer musi przeksztaci now warto z powrotem na cig znakw.
6. W kocu program wywietla now warto na ekranie.
Wydajne programy powinny wymaga jak najmniejszej liczby konwersji zmiennych midzy rnymi
typami danych. Przeksztacenia powinny mie miejsce tylko wtedy, kiedy jest to konieczne.

Metody 95

Poniszy kod dziaa tak samo jak wczeniejszy przykad:


Dim intNumber As Integer
intNumber = 27
intNumber = intNumber + 1
MessageBox.Show(intNumber.ToString)

1.
2.
3.
4.

Program tworzy zmienn intNumber typu Integer.


Program przypisuje do tej zmiennej 27.
Program dodaje do tej zmiennej 1.
Nastpuje przeksztacenie zmiennej na cig znakw i wywietlenie jej na ekranie.

W tym przypadku potrzebna jest tylko jedna konwersja, i to uzasadniona. Metoda MessageBox.Show
uywa cigw znakw, dlatego trzeba przeksztaci liczb na odpowiedni typ.
Jedna prosta zmiana w kodzie pozwolia zmniejszy liczb konwersji z dwch (z cigu znakw na
liczb i z powrotem na cig znakw) do jednej. Dziki temu program bdzie dziaa bardziej wydajniej i zuyje mniej pamici. Poprawa wydajnoci w tym przypadku nie jest wielka, jednak wyobra
sobie, e taka operacja ma miejsce setki tysicy razy na minut. Zapewni to popraw wydajnoci systemu jako caoci.
UWAGA
Niezwykle istotne jest, aby uywa typw danych odpowiednich do wykonywanych zada.
W prostych programach, takich jak te przedstawione w tym rozdziale, utrata wydajnoci
nie jest widoczna. Jednak kiedy zaczniesz pisa bardziej zoone, zaawansowane aplikacje,
powiniene zadba o optymalizacj kodu i uywa odpowiednich typw danych.

Metody
Metoda to samodzielny blok kodu, ktry wykonuje jakie operacje. Metody s kluczowe z dwch
powodw. Po pierwsze, pozwalaj podzieli program na mniejsze i bardziej zrozumiae fragmenty.
Po drugie, uatwiaj powtrne wykorzystanie kodu (to zagadnienie wielokrotnie pojawia si w dalszych rozdziaach tej ksiki).
Jak ju wiesz, kiedy zaczynasz pisa program, powiniene zacz od utworzenia oglnego algorytmu,
a nastpnie dopracowywa jego szczegy do czasu powstania reprezentujcego go kodu. Metoda
opisuje instrukcj algorytmu, na przykad otwrz plik, wywietl tekst na ekranie, wydrukuj
dokument i tak dalej.
Umiejtno rozkadania programu na metody programista nabywa wraz z dowiadczeniem. Co
gorsza, duo atwiej zrozumie, dlaczego naley uywa metod, kiedy pisze si duo bardziej skomplikowane programy ni te przedstawione do tej pory. Dalsze fragmenty tego podrozdziau opisuj,
jak i dlaczego naley uywa metod.

Dlaczego warto uywa metod?


W typowych programach musisz przekaza do metody informacj, aby uzyska potrzebny wynik.
Informacj moe stanowi pojedyncza liczba cakowita, zbir cigw znakw, jak rwnie inne dane.
S to tak zwane dane wejciowe. Jednak niektre metody nie przyjmuj danych wejciowych, dlatego
nie jest to konieczna cecha metody. Metody uywaj danych wejciowych i informacji rodowiskowych (na przykad danych o aktualnym stanie programu) do wykonywania potrzebnych operacji.

96 ROZDZIA 3. PISANIE PROGRAMW


Umieszczanie w metodzie potrzebnych informacji to przekazywanie danych. Przekazywane dane to
tak zwane parametry metody. Uycie metody okrela si jako jej wywoanie.
UWAGA
Oto podsumowanie wywoujesz metody, przekazujc do nich dane za pomoc parametrw.

Celem stosowania metod jest umoliwienie wielokrotnego wykorzystania kodu. Zasady uywania
metod maj sens, kiedy spojrzysz na to z perspektywy caego programu. Kiedy przyjrzysz si wszystkim algorytmom skadajcym si na program, moesz znale w nich wsplne elementy. Jeli musisz
wykona dan operacj wicej ni raz, warto umieci j w metodzie, ktr mona wielokrotnie
wywoywa.
Wyobra sobie program skadajcy si z wielu algorytmw. Niektre z nich wymagaj obliczenia
powierzchni koa. Poniewa pewne algorytmy musz zawiera operacje prowadzce do obliczenia
tej powierzchni, mona przeksztaci je w metod. Wystarczy napisa kod obliczajcy powierzchni
koa na podstawie jego promienia i podda go hermetyzacji (opakowa) w metodzie, ktr mona
wykorzysta w innych algorytmach. Dziki temu nie trzeba wielokrotnie pisa kodu wykonujcego
te same operacje wystarczy zrobi to raz i wykorzysta ten sam kod w innych miejscach.
Moliwe, e jeden algorytm wymaga obliczenia powierzchni koa o promieniu 100, podczas gdy inny
algorytm potrzebuje powierzchni koa o promieniu 200. Tworzc metod, ktra przyjmuje promie
jako parametr, moesz uy jej do obliczenia powierzchni koa o dowolnym promieniu.
UWAGA
W jzyku Visual Basic 2010 metody definiuje si, uywajc sowa kluczowego Sub lub sowa
kluczowego Function. Sub to skrt od angielskiego subroutine (procedura) sowo to suy
do tworzenia metod, ktre nie zwracaj wartoci, o czym dowiedziae si ju w rozdziale 1.
Sowo kluczowe Function pozwala definiowa metody zwracajce warto, czyli funkcje.

Metody z tego rozdziau


Dobr wiadomoci jest to, e uywae ju metod. Przyjrzyj si fragmentowi kodu z pocztku
rozdziau:
Private Sub btnAdd_Click(ByVal sender As System.Object, _
ByVal e As System.EventArgs) Handles btnAdd.Click
' Definicja zmiennej intNumber.
Dim intNumber As Integer
' Przypisanie pocztkowej wartoci.
intNumber = 27
' Dodanie 1 do zmiennej intNumber.
intNumber = intNumber + 1
' Wywietlenie nowej wartoci zmiennej intNumber.
MessageBox.Show("Warto zmiennej intNumber + 1 = " & intNumber.ToString, _
"Zmienne")
End Sub

Metody 97

Powyszy kod to metoda. Jest to samodzielny blok kodu wykonujcy pewne operacje. Ta metoda
dodaje 1 do wartoci zmiennej intNumber i wywietla wynik w oknie komunikatu.
Ta metoda nie zwraca wartoci jest to procedura, dlatego rozpoczyna si od sowa kluczowego
Sub, a koczy wyraeniem End Sub. Wszystko midzy tymi wyraeniami to kod metody. Przyjrzyj
si utworzonej automatycznie przez Visual Basic 2010 definicji metody:
Private Sub btnAdd_Click(ByVal sender As System.Object, _
ByVal e As System.EventArgs) Handles btnAdd.Click

1. Na pocztku pojawia si sowo Private. Znaczenie tego sowa wyjanione jest w jednym
z dalszych rozdziaw. Na razie zapamitaj, e takiej metody nie mona wywoa poza
dan klas.
2. Nastpnie wystpuje sowo kluczowe Sub, ktre informuje jzyk Visual Basic 2010,
e jest to definicja procedury.
3. Kolejny element to wyraenie btnAdd_Click. Jest to nazwa procedury.
4. W nawiasie znajduje si wyraenie ByVal sender As System.Object, ByVal e As
System.EventArgs. To wyraenie informuje jzyk Visual Basic 2010, e metoda przyjmuje
dwa parametry: sender i e. Stosowanie parametrw omwiono w dalszej czci tego
rozdziau.
5. Na kocu znajduje si wyraenie Handles btnAdd.Click. To wyraenie informuje jzyk
Visual Basic 2010, e dan metod naley wywoywa w wyniku kliknicia przycisku btnAdd.

SPRBUJ SAM

Uywanie metod
Plik z kodem projektu Three Buttons mona pobra z witryny helion.pl.

To wiczenie Sprbuj sam opisuje, jak utworzy metod wywietlajc okno komunikatu, a take
jak wywoa t metod za pomoc trzech rnych przyciskw.
1. Utwrz now aplikacj typu Windows Forms Application i nazwij j Three Buttons.
2. Za pomoc okna narzdzi dodaj do formularza trzy przyciski.
3. Kliknij dwukrotnie pierwszy przycisk (Button1), aby utworzy now metod obsugi
zdarzenia Click. Dodaj do programu wyrniony pogrubieniem kod:
Private Sub Button1_Click(ByVal sender As System.Object, _
ByVal e As System.EventArgs) Handles Button1.Click
' Wywoanie metody.
SayHello()
End Sub
Private Sub SayHello()
' Wywietlanie okna komunikatu.
MessageBox.Show("Witaj, wiecie!", "Trzy przyciski")
End Sub

4. Zapisz projekt przez kliknicie przycisku Save All na pasku narzdzi.


5. Uruchom projekt. Pojawi si formularz z trzema przyciskami. Kliknij przycisk znajdujcy
si najwyej, a wtedy program wywietli okno komunikatu z napisem Witaj, wiecie!

98 ROZDZIA 3. PISANIE PROGRAMW


Jak to dziaa?
Jak ju wiesz, dwukrotne kliknicie przycisku w oknie projektowym powoduje automatyczne utworzenie nowej metody:
Private Sub Button1_Click(ByVal sender As System.Object, _
ByVal e As System.EventArgs) Handles Button1.Click
End Sub

Wyraenie Handles Button1.Click na kocu definicji metody informuje jzyk Visual Basic 2010,
e metoda powinna by automatycznie wywoywana w wyniku wyzwolenia zdarzenia Click
przycisku. Elementem definicji s dwa udostpniane przez jzyk Visual Basic 2010 parametry,
ktrymi na razie nie musisz si przejmowa. Poza t metod znajduje si definicja nowej metody:
Private Sub SayHello()
' Wywietlanie okna komunikatu.
MessageBox.Show("Witaj, wiecie!", "Trzy przyciski")
End Sub

Ta nowa metoda nosi nazw SayHello. Kod znajdujcy si pomidzy pierwszym a ostatnim
wierszem to kod metody wykonywany w wyniku jej wywoania. W tym przypadku kod metody
wywietla okno komunikatu.
W momencie kliknicia przycisku program wywouje metod Button1_Click. Z kolei metoda
Button1_Click wywouje metod SayHello. W sumie w wyniku kliknicia przycisku program
wywietla okno komunikatu.
Private Sub Button1_Click(ByVal sender As System.Object, _
ByVal e As System.EventArgs) Handles Button1.Click
'

Wywoanie metody.

SayHello()
End Sub

Powinno to wyjani oglne dziaanie metod, ale czy naprawd warto rozbija kod na odrbne metody w celu wywietlenia okna komunikatu? Nastpne wiczenie Sprbuj sam stanowi odpowied
na to pytanie.

SPRBUJ SAM

Wielokrotne wykorzystanie metod

W tym wiczeniu zobaczysz, jak powtrnie wykorzysta metod przez wywoanie jej w innych obszarach kodu.
1. Jeli program wci dziaa, zamknij go.
2. Wr do okna projektowego i dwukrotnie kliknij drugi przycisk. Dodaj do nowej
metody wyrniony pogrubieniem kod:
Private Sub Button2_Click(ByVal sender As System.Object, _
ByVal e As System.EventArgs) Handles Button2.Click
' Wywoanie metody.
SayHello()
End Sub

3. Ponownie otwrz okno projektowe i kliknij dwukrotnie trzeci przycisk. Dodaj do niego
wyrniony pogrubieniem kod:

Metody 99

Private Sub Button3_Click(ByVal sender As System.Object, _


ByVal e As System.EventArgs) Handles Button3.Click
' Wywoanie metody.
SayHello()
End Sub

4. Uruchom projekt. Zobaczysz, e kliknicie kadego przycisku powoduje wywietlenie


tego samego okna komunikatu.
5. Zatrzymaj program i przejd do definicji metody SayHello. W kodzie tej metody zmie
tekst wywietlany w oknie, na przykad:
Private Sub SayHello()
' Wywietlanie okna komunikatu.
MessageBox.Show("Zmieniem si!", "Trzy przyciski")
End Sub

6. Ponownie uruchom projekt. Zauwaysz, e teraz kliknicie kadego przycisku powoduje


wywietlenie okna z nowym tekstem.
Jak to dziaa?
Metody obsugi zdarzenia Click wszystkich przyciskw wywouj t sam metod SayHello():
Private Sub Button1_Click(ByVal sender As System.Object, _
ByVal e As System.EventArgs) Handles Button1.Click
' Wywoanie metody.
SayHello()
End Sub
Private Sub Button2_Click(ByVal sender As System.Object, _
ByVal e As System.EventArgs) Handles Button2.Click
' Wywoanie metody.
SayHello()
End Sub
Private Sub Button3_Click(ByVal sender As System.Object, _
ByVal e As System.EventArgs) Handles Button3.Click
' Wywoanie metody.
SayHello()
End Sub

Zauwa, e sowo kluczowe Handles wie kad z tych metod z innym przyciskiem Button1,
Button2 i Button3.
Bardzo istotne (i sprytne!) jest to, e efekty zmiany wprowadzonej w metodzie SayHello s takie same
dla kadego z trzech przyciskw. Jest to bardzo wana technika programistyczna. Dziki niej moesz
zebra kod w jednym miejscu, a wprowadzone w nim zmiany s odzwierciedlane w caej aplikacji.
Pozwala to zaoszczdzi czas potrzebny na wielokrotne przepisywanie tego samego lub bardzo podobnego kodu.

Tworzenie metod
W poprzednim wiczeniu Sprbuj sam zbudowae metod wywietlajc statyczny tekst. Metody
s najprzydatniejsze, jeli przyjmuj dane i wykonuj na nich uyteczne operacje. Czasem metoda
powinna zwraca warto, co ilustruje nastpne wiczenie Sprbuj sam.

100 ROZDZIA 3. PISANIE PROGRAMW


SPRBUJ SAM

Tworzenie metody

W tym wiczeniu Sprbuj sam opisano tworzenie metody zwracajcej warto, a dokadniej
tworzenie metody zwracajcej powierzchni koa obliczon na podstawie jego promienia.
Suy do tego poniszy algorytm:

Podnie promie do kwadratu.


Pomnoy wynik przez liczb pi.

W tym wiczeniu moesz wykorzysta utworzony wczeniej projekt Three Buttons.


1. Dodaj poniszy kod, ktry definiuje now metod. Jest to funkcja, poniewa zwraca
warto:
'

Metoda CalculateAreaFromRadius oblicza powierzchni koa.

Private Function CalculateAreaFromRadius(ByVal radius As Double) As Double


' Deklaracja zmiennych.
Dim dblRadiusSquared As Double
Dim dblResult As Double
'

Podnoszenie promienia do kwadratu.

dblRadiusSquared = radius * radius


'

Mnoenie wyniku przez liczb pi.

dblResult = dblRadiusSquared * Math.PI


'

Zwracanie wyniku.

Return dblResult
End Function

2. Teraz usu star wersj metody Button1_Click i wstaw zamiast niej wyrniony
pogrubieniem kod:
Private Sub Button1_Click(ByVal sender As System.Object, _
ByVal e As System.EventArgs) Handles Button1.Click
' Deklaracja zmiennej.
Dim dblArea As Double
' Obliczanie powierzchni koa o promieniu 100.
dblArea = CalculateAreaFromRadius(100)
' Wywietlanie wyniku.
MessageBox.Show(dblArea.ToString, "Pole dla promienia 100.")
End Sub

3. Uruchom projekt i kliknij przycisk Button1. Pojawi si okno widoczne na rysunku 3.16.

Rysunek 3.16. Powierzchnia koa o promieniu 100

Metody 101

Jak to dziaa?
Ten program zawiera odrbn metod o nazwie CalculateAreaFromRadius. Do deklarowania tej
metody suy blok Private Function End Function.
Private Function CalculateAreaFromRadius(ByVal radius As Double) As Double

End Function

Kod znajdujcy si midzy wyraeniami Private


konywane jedynie w wyniku jej wywoania.

Function

a End

Function

to ciao metody wy-

Wyraenie ByVal radius As Double definiuje parametr tej metody. ByVal oznacza, e parametr
jest przekazywany przez warto. W przypadku parametrw przekazywanych przez warto platforma .NET tworzy now zmienn i zapisuje w niej informacje przekazane za pomoc parametru.
Oryginalna warto parametrw przekazywanych w ten sposb nie zmienia si. W tym przypadku
definicja informuje platform .NET, e do metody przekazywany jest parametr o nazwie radius.
Powoduje to utworzenie nowej zmiennej o nazwie radius takiej samej jak zmienna utworzona
w wyniku wykonania poniszej instrukcji:
Dim radius As Double

Jest jednak pewna istotna rnica. Warto zmiennej przekazywanej jako parametr jest automatycznie ustawiana na podan warto, dlatego jeli jako warto parametru przekaesz 200, jest
to rwnowane nastpujcej instrukcji:
Dim radius As Double = 200

Jeli przekaesz jako parametr liczb 999, jest to rwnoznaczne z instrukcj:


Dim radius As Double = 999

UWAGA
Parametry mona przekazywa take przez referencj, do czego suy sowo kluczowe ByRef.
Kiedy parametr jest przekazywany przez referencj, jego nazwa uywana w ciele metody
staje si po prostu inn nazw oryginalnej zmiennej, dlatego wszelkie zmiany wprowadzone
w tej zmiennej w ciele metody s odzwierciedlane w oryginale.

Wyraenie As Double na kocu deklaracji metody informuje jzyk Visual Basic 2010, e metoda
zwraca liczb zmiennoprzecinkow o podwjnej precyzji:
Private Function CalculateAreaFromRadius(ByVal radius As Double) As Double

Teraz moesz dokadniej przyjrze si kodowi metody. Wiesz ju, e do obliczenia powierzchni koa
suy nastpujcy algorytm:
1. Pobranie liczby reprezentujcej promie koa.
2. Podniesienie tej liczby do kwadratu.
3. Pomnoenie tej liczby przez pi ().
Dokadnie tak dziaa metoda CalculateAreaFromRadius:
'

Deklaracja zmiennych.

Dim dblRadiusSquared As Double


Dim dblResult As Double

102 ROZDZIA 3. PISANIE PROGRAMW


'

Podnoszenie promienia do kwadratu.

dblRadiusSquared = radius * radius


'

Mnoenie wyniku przez liczb pi.

dblResult = dblRadiusSquared * Math.PI

w powyszym kodzie to staa platformy .NET, ktra zawiera warto liczby pi. W ostatnim
wierszu metody naley zwrci wynik do kodu wywoujcego t metod. Suy do tego nastpujca
instrukcja:

Math.PI

'

Zwracanie wyniku.

Return dblResult

Nowy kod metody Button1_Click wywouje metod


zwrcony przez ni wynik:
'

CalculateAreaFromRadius

i wywietla

Deklaracja zmiennej.

Dim dblArea As Double


'

Obliczanie powierzchni koa o promieniu 100.

dblArea = CalculateAreaFromRadius(100)
'

Wywietlanie wyniku.

MessageBox.Show(dblArea.ToString, "Pole dla promienia 100")

Na pocztku znajduje si definicja zmiennej o nazwie dblArea, przeznaczonej do przechowywania


powierzchni koa. Nastpnie metoda przypisuje do tej zmiennej warto zwracan przez metod
CalculateAreaFromRadius. Nawiasy po nazwie metody su do przekazywania parametrw.
W tym przypadku jest to jeden parametr liczba 100.
Po wywoaniu metody CalculateAreaFromRadius naley czeka na zwrcenie przez ni wyniku
(wykonanie wiersza z instrukcj Return), a nastpnie zapisa go w zmiennej dblArea. Wtedy mona
wywietli wynik na ekranie w zwyky sposb.

Nazwy metod
Jest kilka standardw nazewnictwa zalecanych przy pisaniu programw na platform .NET. Te standardy pomagaj programistom atwo przechodzi midzy jzykami, co opisuje rozdzia 2. Do tworzenia nazw metod zaleca si uywa notacji paskalowej. W tej notacji pierwsze litery wszystkich sw
s due, a pozostae mae. Jest to tylko sugestia zwizana z najlepszymi praktykami kodowania,
a nie wymg jzyka Visual Basic 2010. Przykady takich nazw to:
CalculateAreaFromRadius
OpenXmlFile
GetEnvironmentValue

Zwr uwag, e w tej notacji nawet skrty (w tym przypadku XML) nie s pisane duymi literami.
Pozwala to unikn dwuznacznoci w sytuacjach, kiedy nie wiadomo, czy dane sowo jest normalnie
pisane duymi literami.
Z kolei notacj zalecan do nazw parametrw jest tak zwana notacja wielbdzia. Jeli miae kiedy
styczno z kodem pisanym w jzyku Java, prawdopodobnie znasz ju t notacj. Notacja wielbdzia
jest podobna do notacji paskalowej, ale pierwsze sowo nazwy jest pisane ma liter, na przykad:

Metody 103
myAccount
customerDetails
updateDnsRecord

Take w tym przypadku skrty (DNS) traktuje si jak zwyke sowa, dlatego podobnie jak w notacji
paskalowej skadaj si z duych i maych liter.
UWAGA
Notacja wielbdzia zawdzicza nazw temu, e w rodku nazw pojawiaj si garby, na przykad
takiGarb. Nazwa notacji paskalowej pochodzi od jzyka programowania Pascal, na ktrego
potrzeby opracowano t notacj.

W rozdziale 2. dowiedziae si, e platforma .NET nie jest zwizana z jednym konkretnym jzykiem.
Poniewa niektre jzyki s wraliwe na wielko znakw, a inne nie, wane jest, aby uywa standardw uatwiajcych prac innym programistom, ktrzy mog mie dowiadczenie w pisaniu
programw w innych jzykach.
Wraliwo na wielko znakw oznacza, e wane jest to, czy nazwa zawiera due, czy mae litery.
W jzykach wraliwych na wielko znakw nazwy MYACCOUNT i myAccount to co zupenie innego.
Jzyk Visual Basic 2010 nie jest wraliwy na wielko znakw, dlatego mona uywa sw z literami
dowolnej wielkoci, a nazwy MYACCOUNT i mYacCounT oznaczaj to samo.
UWAGA
Jzyki wraliwe na wielko znakw to midzy innymi Java, C# i C++.

Zasig
W opisie pojcia metoda pojawio si stwierdzenie samodzielny blok kodu. Ta cecha ma due
znaczenie ze wzgldu na sposb uywania i definiowania zmiennych w metodach. Wyobra sobie,
e uywasz dwch metod, a w kadej z nich znajduje si zmienna o nazwie strName:
Private Sub DisplaySebastiansName()
' Deklaracja zmiennej i przypisanie do niej wartoci.
Dim strName As String
strName = "Sebastian Blackwood"
'

Wywietlanie wartoci zmiennej.

MessageBox.Show(strName, "Zasig")
End Sub
Private Sub DisplayBalthazarsName()
' Deklaracja zmiennej i przypisanie do niej wartoci.
Dim strName As String
strName = "Balthazar Keech"
'

Wywietlanie wartoci zmiennej.

MessageBox.Show(strName, "Zasig")
End Sub

104 ROZDZIA 3. PISANIE PROGRAMW


Cho obie metody uywaj zmiennej o takiej samej nazwie (strName), samodzielno metod sprawia,
e jest to dozwolone, a nazwy zmiennych w rnych metodach s niezalene od siebie. Moesz sam
si o tym przekona.

SPRBUJ SAM

Zasig
Plik z kodem projektu Scope Demo mona pobra z witryny helion.pl.

W tym wiczeniu zaczniesz poznawanie zasigu zmiennych za pomoc uywanej w dwch rnych
metodach zmiennej o tej samej nazwie.
1. Utwrz nowy projekt typu Windows Forms Application i nazwij go Scope Demo.
2. Dodaj przycisk do formularza, nazwij go btnScope i ustaw jego waciwo Text na Zasig.
Kliknij dwukrotnie ten przycisk i dodaj wyrniony pogrubieniem kod do metody obsugi
zdarzenia Click. Nastpnie dodaj dwie pozostae przedstawione metody.
Private Sub btnScope_Click(ByVal sender As System.Object, _
ByVal e As System.EventArgs) Handles btnScope.Click
' Wywoanie metody.
DisplayBalthazarsName()
End Sub
Private Sub DisplaySebastiansName()
' Deklaracja zmiennej i przypisanie do niej wartoci.
Dim strName As String
strName = "Sebastian Blackwood"
' Wywietlanie wartoci zmiennej.
MessageBox.Show(strName, "Zasig")
End Sub
Private Sub DisplayBalthazarsName()
' Deklaracja zmiennej i przypisanie do niej wartoci.
Dim strName As String
strName = "Balthazar Keech"
' Wywietlanie wartoci zmiennej.
MessageBox.Show(strName, "Zasig")
End Sub

3. Zapisz projekt przez kliknicie przycisku Save All na pasku narzdzi.


4. Uruchom projekt. Po klikniciu przycisku zobaczysz okno komunikatu wywietlajce
imi i nazwisko Balthazar Keech.
Jak to dziaa?
To wiczenie pokazuje, e cho uywasz tej samej nazwy zmiennej w dwch rnych miejscach,
program dziaa poprawnie:
Private Sub DisplaySebastiansName()
' Deklaracja zmiennej i przypisanie do niej wartoci.
Dim strName As String
strName = "Sebastian Blackwood"
'

Wywietlanie wartoci zmiennej.

Podsumowanie 105

MessageBox.Show(strName, "Zasig")
End Sub
Private Sub DisplayBalthazarsName()
' Deklaracja zmiennej i przypisanie do niej wartoci.
Dim strName As String
strName = "Balthazar Keech"
'

Wywietlanie wartoci zmiennej.

MessageBox.Show(strName, "Zasig")
End Sub

Po rozpoczciu wykonywania metody zdefiniowane w niej (w obrbie wyrae Sub i End Sub lub
Function i End Function) zmienne maj zasig lokalny. Zasig okrela, w jakich miejscach programu dana zmienna jest widoczna. Zmienne o zasigu lokalnym s widoczne w obrbie metody, w ktrej
zostay zdefiniowane.
Zmienna strName formalnie nie istnieje do momentu rozpoczcia wykonywania metody. Na tym
etapie platforma .NET i system Windows przydzielaj pami dla tej zmiennej, dziki czemu mona
uy jej w kodzie. Na pocztku metoda przypisuje warto do tej zmiennej, a nastpnie wywietla
okno komunikatu. Zmienna zdefiniowana w metodzie DisplayBalthazarsName powstaje w momencie wywoania tej metody, nastpnie uruchamiany jest kod zmieniajcy warto tej zmiennej,
a po zakoczeniu dziaania metody rodowisko usuwa zmienn.
UWAGA
W rozdziale 4. dowiesz si, e zasig mona ograniczy jeszcze bardziej do ptli dziaajcych
w procedurach i funkcjach.

Podsumowanie
Ten rozdzia opisuje podstawy pisania programw nie tylko w jzyku Visual Basic 2010, ale we
wszystkich jzykach programowania. Na pocztku przedstawione jest pojcie algorytmu, ktry
stanowi podstaw kadego programu komputerowego. Nastpnie opisane s zmienne oraz najczciej uywane typy danych Integer, Double, String, Date i Boolean. Zobaczye, jak uywa
tych typw danych do wykonywania operacji matematycznych, czenia cigw znakw, zwracania
dugoci cigw znakw, dzielenia tekstu na podcigi, pobierania aktualnej daty i pobierania waciwoci dat. Dowiedziae si take, jak zmienne s przechowywane w komputerze.
Nastpnie opisane zostay metody czym s, do czego ich potrzebujesz i jak je tworzy. Dowiedziae
si take, e zmienne zadeklarowane w obrbie danej metody maj zasig lokalny i nie s widoczne
poza t metod. Ponadto poznae rnice midzy funkcjami a procedurami.

WICZENIA
1. Utwrz aplikacj typu Windows Forms Application i dodaj do niej dwa przyciski. W metodzie
obsugi zdarzenia Click pierwszego przycisku zadeklaruj dwie zmienne typu Integer
i przypisz do nich dowolne liczby. Wykonaj na tych zmiennych dowoln operacj
arytmetyczn i wywietl wynik w oknie komunikatu.

106 ROZDZIA 3. PISANIE PROGRAMW


W metodzie obsugi zdarzenia Click drugiego przycisku zadeklaruj dwie zmienne typu
String i przypisz do nich dowolny tekst. Pocz obie zmienne i wywietl wynik w oknie
komunikatu.
2. Utwrz aplikacj typu Windows Forms Application i dodaj do niej pole tekstowe oraz
przycisk. W metodzie obsugi zdarzenia Click przycisku wywietl trzy okna komunikatu.
Pierwsze okno powinno wywietla dugo cigu znakw wpisanego w polu tekstowym,
drugie pierwsz cz cigu znakw, a trzecie jego drug cz.

Podsumowanie 107

CZEGO NAUCZYE SI W TYM ROZDZIALE?


Obszar

Informacje

Algorytmy

Czym s algorytmy i jak stosowa je do tworzenia programw.

Zmienne

Deklarowanie najczciej stosowanych typw danych i korzystanie z nich.

Funkcje cigw znakw

Stosowanie popularnych funkcji do zarzdzania cigami znakw przy


korzystaniu z typu danych String.

Typ danych Date

Uywanie typu danych Date oraz automatyczne wywietlanie daty


i czasu wedug ustawie regionalnych komputera.

Metody

Tworzenie i stosowanie prostych metod, ktre przyjmuj parametry


oraz zwracaj warto lub nie maj tych cech.

You might also like