VBScript
ASP-koulutus / kurssit v. 2008
Kurssit saatavilla kautta Suomen. Tule, tutustu ja varaa oma koulutustapahtumasi jo tänään. Kurssit järjestää IT-koulutuksen asiantuntijasi, Koulutus- ja konsultointipalvelu KK Mediat
Ohjausrakenteet : silmukat
Silmukat ovat kätevä keino suorittaa jokin tietty koodi tietyn lukumäärän tai niin pitkään kunnes jokin ehto täyttyy. Sen sijaan että tarvitsisi kirjoittaa sadalle eri riville sama komento, voimme hoitaa asian yksinkertaisesti parilla rivillä koodia.
For...Next - silmukka
Yleisin tapa suorittaa silmukka VBScriptissä on käyttää For...Next - lauserakennetta, koska se on rakenteeltaan yksinkertaisin. Kyseessä on silmukka jota suoritetaan ennalta määrätty lukumäärä. Syntaksiltaan se on :
For laskuri = aloitusarvo To lopetusarvo
'suoritettava koodi
Next
Laskuri on jokin muuttuja, joka vastaanottaa automaattisesti kokonaisluvun arvon, joka on määritelty kohdassa aloitusluku kun silmukkaa suoritetaan ensimmäisen kerran. Silmukan jokaisella läpimenokerralla suoritetaan koodi. Samalla laskurin arvoa kasvatetaan aina automaattisesti yhdellä kunnes se on saavuttanut lopetusarvon. Kun arvo on saavutettu, suoritus siirtyy kohdan Next alapuolella sijaitsevaan koodiin.
Alla oleva esimerkki tulostaa luvut 5-8 omaan kappaleeseensa.
For counter = 5 to 8
document.Write "<p>"&counter&"</p>"
Next
document.Write "Nyt on silmukka suoritettu"
For-next -silmukka tarjoaa vielä yhden mielenkiintoisen ominaisuuden: askellus. Askelluksen avulla voimme määrittää välin, jolla laskurin arvoa kasvatetaan (tai vähennetään). Syntaksiltaan se on:
For laskuri = aloitusarvo To lopetusarvo Step lukuarvo
'suoritettava koodi
Next
Mikäli haluamme tulostaa vaikkapa luvut 1-100:n kahdenkymmenen välein käänteisessä järjestyksessä, luomme seuraavanlaisen komentosarjan:
For counter = 100 to 1 Step -20
document.Write "<p>"&counter&"</p>"
Next
Do-Loop - silmukka
VBScript tarjoaa For-silmukan lisäksi kaksi Do-Loop-silmukkaa: Do-Until ja Do-While. Molemmat eroavat For-silmukoista siinä, että Do-silmukassa ei koskaan etukäteen tiedetä kuinka monta kertaa silmukka tullaan suorittamaan. Kahden tarjolla olevan Do-silmukan välillä on pieni ero:
- Do-Until lauseessa silmukkaa suoritetaan kunnes toimintaa ohjaava ehto saavuttaa arvon True (tosi).
- Do-While lauseessa silmukkaa suoritetaan niin kauan kunnes toimintaa ohjaava ehto saavuttaa arvon True (tosi).
Esimerkki selventänee parhaiten eron näiden kahden ero:
' tee kunnes ehto on tosi
Do
iLaskuri = iLaskuri+1
Loop Untill iLaskuri = iJokinArvo
'tee niin kauan kunnes ehto on tosi
Do
iLaskuri = iLaskuri +1
Loop While Not iJokinArvo
Yllä olevissa tapauksissa koodi suoritetaan vähintään kerran, koska ehto on sijoitettu viimeiselle riville sanan Loop kanssa. Mikäli haluamme että ehto tarkistetaan ennen suorituksen aloittamista, sijoitetaan se samalle riville Do-sanan kanssa:
Do Untill iLaskuri = iJokinArvo
iLaskuri = iLaskuri+1
Loop
Do While not iJokinarvo
ILaskuri = iLaskuri +1
Loop
Komennon Exit Do-avulla voidaan lopettaa silmukan suoritus. Tavallisesti tätä lausetta käytetään silmukassa olevan ehdon sisällä lopettamaan silmukan suorittaminen:
Do While not iJokinarvo
ILaskuri = iLaskuri +1
If iJOkinmuuttuja=2 Then
Jokinmuu=True
Exit Do
End if
Loop
While-Wend - silmukka
While komennon ympärille voidaan rakentaa vielä yksi silmukka syntaksilla:
While ehto
'jotain koodia
Wend
Sama asia voidaan hoitaa Do-Loop silmukalla, joten jos While-lause tuntuu vaikealta, kannattaa harkita vaihtoehtoja. Seuraavassa lyhyt esimerkki While-Wend-silmukasta:
iLaskuri = 0
While iLaskuri <100
iLaskuri = iLaskuri +1
Document.Write "<p>luku on" &iLaskuri & "</p>"
Wend
Ikisilmukat
Silmukoihin liittyen kannattaa mainita kuitenkin yksi varoitus, joka liittyy nk. ikisilmukan luomiseen. Ikisilmukka syntyy kun ohjaava ehto ei toteudu missään vaiheessa, toisin sanoen samaa silmukkaa suoritetaan ääretön määrä. Seuraavassa on esimerkki ikisilmukasta, mutta sitä ei pidä missään nimessä kokeilla:
Do While a<100
b=b+1
Loop
Kuten huomannet, niin ehto "a on pienempi kuin sata" toteutuu loputtomasti. Jotta asia korjautuisi, pitäisi koodin olla:
Do While a<100
b=b+1
a=b>
Loop
Tutustu artikkelin muihin osiin:
»»» VBScript
»»»Päätöksenteko ehtolausekkeiden avulla
»»» VBScript
»»»Silmukat
»»» VBScript
»»»Silmukoiden hyödyntäminen kokoelmissa
Tallenna tämä sivu kirjanmerkkeihin!