Visual Basic.NET – 6. diel

Peter Hrdlica  /  05. 03. 2010, 08:37

V aktuálnom článku sa budeme venovať problematike funkcií a procedúr. Priblížime si kolekcie, polia, základy práce so stringami a podrobne si rozoberieme zdrojový kód

Úvod

            Vítam Vás pri ďalšom diely seriálu o programovaní vo VB.NET. Dnes si ukážeme základnú prácu s funkciami a procedúrami a zbežne sa zoznámime s prácou s premennými typu string, poľom, kolekciami ovládacích prvkov či doplníme zápis cyklu For .. Next.

Funkcie a procedúry

            Funkcie a procedúry sú akési podprogramy (kusy zdrojového kódu), ktoré umožňujú znovupoužitie kódu (tj. opakované volanie, bez nutnosti zväčšovania jeho „objemu“, v závislosti na platnosti deklarácie), jeho parametrizáciu (dynamickú zmenu parametrov = vstupných hodnôt), získanie návratovej hodnoty (pri funkciách) a v neposlednej rade oddelenie logických celkov programu do samostatných častí, vďaka čomu sa zlepšuje čitateľnosť kódu a zjednodušuje sa jeho úprava.

Deklarácia

            Funkcie ako aj procedúry (ale aj premenné) môžu mať rôznu „územnú“ platnosť. Môžu byť privátne Private a platiť iba na formulári, module, atd. kde ste ich deklarovali, alebo globálne Public a môžeme k nim pristupovať z ktorejkoľvek časti nášho programu – iné okno, iný modul, .. Určite ste si tieto rozdiely už všimli napr. pri deklarácii rôznych handlerov.

Ako príklad na použitie funkcie si uvedieme program, ktorý načíta vstupný text a prerobí prvé písmená každého slova na veľké a zároveň si aspoň ukážeme základy práce so stringami. Navrhnite si formulár približne nasledovne:

Funkcia
 

 

Ako prvé si zadeklarujeme funkciu. V tomto prípade, by sa samozrejme celý kód zmestil do handleru tlačidla a program by tým nijak neutrpel, no ide nám o názornú ukážku práce s funkciami a procedúrami


    Private Function spracovanie_textu(ByVal text As String)

        Dim pole() As String = Split(text, " ")

        Dim slovo As String

        Dim spracovana_veta As String = ""

 

        For Each slovo In pole

            spracovana_veta += UCase(Strings.Left(slovo, 1)) + Strings.Right(slovo, Len(slovo) - 1) + " "

        Next

 

        Return spracovana_veta

 

End Function

Rozbor:

-         keďže budeme funkciu používať iba v rámci tohto jedného formulára, tak sme ju deklarovali ako lokálnu -  Private

-         slovo Function nám vraví, že sa bude jednať o funkciu a nie o procedúru a teda vo výsledku budeme očakávať nejakú návratovú hodnotu

-         spracovanie_textu() je názov funkcie

-         ByVal text As String je deklarácia parametra predávaného funkcii, v našom príklade predávame vetu zo vstupného textového poľa; ByVal znamená, že tento parameter sa nesmie vynechať

-         Dim pole() As String deklaruje pole typu String; polia uchovávajú dáta istého typu a  je možné k nim pristupovať hromadne pomocou indexácie prvkov

-         Split(text, " ") do poľa priamo vloží dáta a to tak, že vezme vetu text, ktorú sme predali funkcii parametricky a rozdelí ju podľa oddeľovača " " čo je v našom prípade medzera oddeľujúca slová

-         For Each slovo In pole je takmer rovnaký For cyklus ako ten, ktorý sme si už ukázali, no tento krát sa jedná o prvky slovo v kolekcii pole (každé slovo pôvodnej vety) a pre každý tento prvok budeme vykonávať určitý programový kód

-         spracovana_veta += je skrátená podoba ekvivalentného výrazu spracovana_veta = spracovana_veta + .. – programovací jazyk tento príkaz chápe tak, že vezme starý obsah danej premennej a na jej koniec prilepí nové dáta; ak by sme to + vynechali, tak by sa premenná zakaždým kompletne prepísala

-         UCase() urobí z predaného stringu uppercase = veľké písmeno, ak už veľké je, tak neurobí nič

-         Strings.Left(slovo, 1) vezme zo stringu slovo jeden znak zľava (číslo za čiarkou v parametroch určuje počet znakov, ktoré sa majú odrezať)

-         Strings.Right() funguje rovnako ako predošlí príkaz, ale z opačnej strany stringu – od konca = sprava

-         Len(slovo) nám vráti číselnú hodnotu dĺžky predaného stringu

-         Strings.Right(slovo, Len(slovo) - 1) teda odreže od pravého okraja o jeden znak menej (vynechá ten, ktorý sme odrezali a zväčšili) ako je celková dĺžka slova

-         Return spracovana_veta - ako som zmienil už na začiatku, funkcia musí mať nejakú návratovú hodnotu, v našom prípade to bude už celá spracovaná veta; návratovú hodnotu podávame príkazom Return; ak by sme Return nevolali, parser by nás na to upozornil

Volanie funkcie na spracovanie vety:

            K funkciám i procedúram pristupujeme tak, že ich voláme po mene, rovnako ako doma voláte svojich rodinných príslušníkov alebo v práci kolegov. V našom konkrétnom príklade voláme funkciu z handleru tlačidla a jej návratovú hodnotu vložíme do prvku Label menom lbl_vystup pričom obsah textového poľa je povinný parameter funkcie.

lbl_vystup.Text = spracovanie_textu(TextBox1.Text)

Funkcia

 

Kolekcie

           Vo VB.NET je možné jednoducho pracovať so všetkými prvkami na formulári (prípadne iba s prvkami istého druhu) a to pomocou kolekcií. Uvedieme si príklad, v ktorom pomocou kolekcií bude procedúra zisťovať, či je náš imaginárny „registračný formulár“ vyplnený. Nakreslime si teda okno približne nasledovne:

Procedúra

 

Public Sub vyplnene()

        Dim prvok As Control

        For Each prvok In Me.Controls

            If TypeOf (prvok) Is TextBox Then

                If prvok.Text = "" Then

                    MessageBox.Show("Nevyplnili ste všetky polia!", "Chyba", MessageBoxButtons.OK, MessageBoxIcon.Error)

                    Me.ActiveControl = prvok

                    Return

                End If

            End If

        Next

End Sub

Rozbor:

-         Dim prvok As Control je všeobecná deklarácia ovládacích prvkov

-         For Each prvok In Me.Controls značí konkrétne „Pre každý prvok v Mojich.Ovládacích_prvkoch; zabezpečuje, že sa skutočne žiadny prvok v kolekcii Me.Controls nevynechá

-         If TypeOf (prvok) Is TextBox Then zistí či je skúmaný prvok typu TextBox a ak áno, budeme pokračovať jeho kontrolou

-         Me.ActiveControl = prvokfocus (aktivuje) na prvok, o ktorom sa zistilo, že je skutočne prázdny

-         Return sa v tomto prípade viaže na kontrolujúci cyklus a nie na celú procedúru, no keďže už za cyklom nič nevykonávame, ukončí sa aj tá; keby sme Return vynechali, tak by sa nám MessageBox zobrazil naraz pre každý nevyplnený prvok a neumožnil by nám tak efektívne ukázať užívateľovi prázdne textové pole

Rozbor vynechaných riadkov ako i volanie funkcie nechám už na pozornom čitateľovi.

 

Procedúra

 

Pole s heslom upravíme v panely s vlastnosťami prvkov a to tak, že vlastnosti PasswordChar priradíme akýkoľvek znak, ktorým budeme vstupný text „šifrovať“, najčastejšie však *,#,•.

Záver

            Dnes sme i ukázali ďalšie dôležité postupy potrebné pri programovaní stále objemnejších a náročnejších aplikácií. Ak sa ktorákoľvek časť zdala nezrozumiteľná, prípadne zle či nevhodne vysvetlená, prosím informujte ma o tom nech je možné tento omyl napraviť. Prajem Vám rýchle a bezproblémové zvládnutie problematiky.

Peter Hrdlica

 

 

 

Neprehliadnite: