Do-while-, do-until ja while-silmukan erojen ymmärtäminen voi olla hämmentävää. Onko se sama asia? Miksi sitten kaksi eri tekniikkaa?

Tässä blogikirjoituksessa näytän erot. Mutta ensin täytyy katsoa perusasioita.

Do-Until

Do-Until-silmukat tekevät jotakin, kunnes jokin ehto muuttuu todeksi.

Huomaa tämän silmukan yhtäläisyysehto $number -eq ’0’.

Esimerkiksi alla oleva koodi suoritetaan, kunnes painat näppäimistölläsi 0. Silloin ja vain silloin ehdosta tulee tosi (0).

do {$number=Read-Host "Enter number (Press 0 to Quit)"}until ($number -eq '0')

Do-While

Do-While-silmukat tekevät jotakin niin kauan kuin jokin ehto on tosi.

Huomaa tämän silmukan ei-arvoinen ehto $number -ne ’0’.

Oheinen koodi suoritetaan, kunnes painat näppäimistölläsi 0. Toisin sanoen skripti suoritetaan niin kauan kuin (while) ehto ei muutu todeksi (0).

do {$number=Read-Host "Enter number"}while ($number -ne 0)

While

While-silmukat ovat samanlaisia kuin Do-While-silmukat. Mutta tämän tyyppinen silmukka suorittaa tarkistuksen ensin, kun taas Do-While-silmukka suorittaa tarkistuksen ensimmäisen läpikäynnin jälkeen.

Viimeisimmässä läpikäynnissä $i on 9, joten viimeinen läpikäynti tehdään, mutta sen jälkeen ei enää.

while ($i -ne 10) {$i++Write-Host $i}

Do-Until vs. Do-While vs. While

Seuraavassa esimerkissä näkyy eroja, jotka eivät ensi silmäyksellä ole merkittäviä, mutta ne ovat.

Ensimmäinen silmukka suoritetaan vain kerran, koska se suoritetaan vain niin kauan kuin (niin kauan kuin) $i on suurempi kuin 10. Tämä ei pidä paikkaansa. Siksi silmukka pysähtyy ensimmäisen suorituksen jälkeen, kun tarkistus on käsitelty.

Toinen silmukka suoritetaan loputtomasti, koska $i ei koskaan tule suuremmaksi kuin 10 ja siksi lauseke on tosi.

$i = 10do {Write-Output 'This is executed once.'}while ($i -gt 10)do {Write-Output 'This is done over and over again!'}until ($i -gt 10)

Viimeisenä mutta ei vähäisimpänä while-silmukka ilman do-lausetta. Tätä silmukkaa ei koskaan suoriteta, koska tarkistus tehdään ennen silmukan alkamista.

$i = 10while ($i -gt 10) {Write-Output 'This will never be executed.'}

Toivottavasti pystyin tuomaan hieman valoa pimeyteen do-lauseen kanssa tapahtuvassa silmukassa.

Näemme ensi kerralla PowerShellin parissa!

Vastaa

Sähköpostiosoitettasi ei julkaista.