Etusivu Aloitus Kontrollit Metodit Muuttujat Ohjausrakenteet Silmukat Matematiikka Debuggaus Virheenkäsittely Vuorovaikutus Valikot Tiedostonkäsittely Ikkunat Leikepöytä Drag and Drop Tiedostopäätteet Linkkejä Harjoitukset

Johdanto ja tavoite

Tässä osiossa tutustutaan Visual Basic:in silmukoihin. Tämän osion jälkeen opiskelija osaa käyttää silmukoita hyväkseen omissa ohjelmissaan.

Silmukat

Mihin tarvitsemme silmukoita? Yksinkertainen kysymys, yksinkertainen vastaus: Silmukoita käytetään kun haluamme toistaa jonkin ohjelmakoodirivin useamman kerran. Toki voimme kirjoittaa ohjelmarivejä useamman kerran peräkkäin mutta jos toistoa tarvitaan esim. tuhat kertaa tai useammin, alkaa konstit olla lopussa. Tämän vuoksi opettelemme nyt silmukat ja niiden peruskäytön. Tarvitset silmukoita etenkin taulukoiden kanssa toimiessasi.

For

For -silmukkaa käytetään yleensä silloin kun tiedetään montako "kierrosta" haluamme suorittaa ohjelmakoodia. Toki For -silmustakin voi "hypätä pois" Break -komentoa käyttäen mikä tosin ei ole kovin suositeltavaa. For -silmukan formaali määrittely:
For Muuttuja = alku to loppu [Step askel]
	Suoritettava ohjelmakoodi
Next Muuttuja
For -lauseessa on ns. silmukkamuuttuja, jonka arvo muuttuu silmukan jokaisella kierroksella. Yleinen tapa on määritellä silmukkamuuttujan nimeksi jokin lyhyt muuttujanimi kuten i tai x tms. Muuttujalle (tai pikemminkin silmukalle) annetaan alkuarvo josta lähdetäään liikkeelle ja loppuarvo, jonka saavuttamisen jälkeen silmukan suoritus loppuu. Normaalisti silmukkamuuttujan arvoa kasvatetaan yhdellä joka kierroksella. Jos haluamme kasvattaa muuttujan arvoa jollakin muulla arvolla kuin yksi tai haluamme silmukkamuuttujan arvon laskevan, voimme käyttää Step -ominaisuutta joka määrittelee silmukkamuuttujan lisäyksen tai vähennyksen jokaisella kierroksella.
Private Sub Command1_Click()

    Dim X As Long

    For X = 1 To 10
        MsgBox "Kierros " & X
    Next X

End Sub
Esimerkki vaatii toimiakseen CommandButton:n asettamista lomakkeelle. Esimerkissämme määrittelemme ensin silmukkamuuttujan X, jonka tyyppi on Long. Tyypiksi kannattaa valita yleensä Long, etenkin jos silmukat ovat suuria ettei muuttujasta lopu arvoalue kesken. Seuraavaksi For -silmukkamme aloittaa arvosta 1, suorittaa ohjelmakoodin (eli näyttöön tulostetaan viestilaatikko jossa lukee "Kierros 1"), kasvattaa muuttujan arvoa yhdellä, tekee vertailun (eli onko muuttujan arvo pienempi kuin 10 mikä on loppuehto) ja suorittaa ohjelmakoodirin jatkaen tätä kunnes muuttuja saa arvon 11 jonka jälkeen silmukan suoritus loppuu.

Seuraavassa esimerkissä käymme silmukkaa läpi ylhäältä alaspäin, eli aloitamme arvosta sata kulkien kohti arvoa 10. Jokaisella kierroksella vähennämme silmukkamuuttujan arvosta kymmenen.

Private Sub Command1_Click()

    Dim X As Long

    For X = 100 To 10 Step -10
        MsgBox "Kierros " & X
    Next X

End Sub
Lopputuloksena on kymmenen viestiä tyyliin "Kierros 100", "Kierros 90", ... , "Kierros 10" jonka jälkeen silmukan suoritus loppuu.

Do

Do -silmukoita on neljä erityyppistä. Alla on lueteltu silmukat lyhyesti:
SilmukkaSelite
Do While (ehtolauseke)
	Suoritettavat ohjelmakoodirivit
Loop
Tämä silmukkarakenne suorittaa ohjelmakoodirivejä niin kauan kuin ehto on tosi, tosin ehdosta riippuen koodirivejä ei välttämättä suoriteta kertaakaan.
Do Until (ehtolauseke)
	Suoritettavat ohjelmakoodirivit
Loop
Tämä silmukkarakenne suorittaa ohjelmakoodirivejä niin kauan kuin ehto on epätosi, tosin ehdosta riippuen koodirivejä ei välttämättä suoriteta kertaakaan.
Do
	Suoritettavat ohjelmakoodirivit
Loop While (ehtolauseke)
Tämä silmukkarakenne suorittaa ohjelmakoodirivejä niin kauan kuin ehto on tosi, kuitenkin aina vähintään yhden kerran.
Do
	Suoritettavat ohjelmakoodirivit
Loop Until (ehtolauseke)
Tämä silmukkarakenne suorittaa ohjelmakoodirivejä niin kauan kuin ehto on epätosi, kuitenkin aina vähintään yhden kerran.

While

While -silmukkaa on vain yhdentyyppistä:
While (ehtolauseke)
	Suoritettavat ohjelmakoodirivit
Wend
Silmukkaa suoritetaan niin kauan kuin ehto on tosi.

Esimerkkejä

Alla on esitelty muutama yksinkertainen esimerkki kustakin silmukasta. Kukin silmukka tekee saman asian, eli tulostaa luvut 1-10.
    Dim X As Long

    X = 1

    Do While (X < 11)
        MsgBox "X:n arvo on " & X, vbInformation
        X = X + 1
    Loop
    Dim X As Long

    X = 1

    Do Until X > 10
        MsgBox "X:n arvo on " & X, vbInformation
        X = X + 1
    Loop
    Dim X As Long

    X = 1

    Do
        MsgBox "X:n arvo on " & X, vbInformation
        X = X + 1
    Loop While (X < 11)
    Dim X As Long

    X = 1

    Do
        MsgBox "X:n arvo on " & X, vbInformation
        X = X + 1
    Loop Until (X > 10)
    Dim X As Long

    X = 1

    While (X < 11)
        MsgBox "X:n arvo on " & X, vbInformation
        X = X + 1
    Wend
Tehtävä 15
Tehtävä 16