Selles artiklis õpitakse Swifti programmeerimisel silmuseid looma ja kordama.
Eelmises artiklis õppisime for-in-tsükli kohta, et teatud arvu kordi ülesandeid täita. Selle artikli õpid kasutamise while
ja repeat… while
kui alternatiivi for-silmuses kui korduste arvu, ei ole teada.
Mingi aja jooksul täidab lause lausekomplekti, kuni tingimus saab false
. Selliseid tsükleid saab kõige paremini kasutada, kui enne esimese iteratsiooni algust pole korduste arv teada. Swift pakub kahte tüüpi silmuseid:
1. Kiire aas
See silmus hindab selle seisundit iga silmuse läbimise alguses.
While tsükli süntaks on:
while (TestExpression) ( // statements )
Kuidas silmus töötab?
See TestExpression
on tõeväärtuse väljend.
Kui TestExpression
hinnatakse, et true
,
- käske while-tsükli sees täidetakse.
- ja
TestExpression
hinnatakse uuesti.
See protsess kestab seni, kuni TestExpression
hinnatakse false
. Kui TestExpression
hindab false
, kuni silmus on lõpetatud.
Loopi voo diagramm
Näide 1: Loopi ajal
var currentLevel:Int = 0, finalLevel:Int = 5 let gameCompleted = true while (currentLevel <= finalLevel) ( //play game if gameCompleted ( print("You have passed level (currentLevel)") currentLevel += 1 ) ) print("outside of while loop")
Programmi käivitamisel on väljund järgmine:
Olete läbinud taseme 0 olete läbinud 1. taseme olete läbinud 2. taseme olete läbinud 3. taseme olete läbinud 4. taseme olete läbinud 5. taseme väljaspool tsüklit
Ülaltoodud programmis initsialiseeritakse muutujad currentLevel ja finalLevel väärtuseks 0 ning konstantseks gameCompleted väärtuseks true
.
Iga loopi iteratsiooni korral kontrollib see seisundit currentLevel <= finalLevel
. Kui tingimus naaseb true
, on tsükli käivitamise ajal sees olevad laused vastasel juhul silmus lõpetatud.
Kordus | Tingimus (currentLevel <= finalLevel) | Väljund |
---|---|---|
1 | 0 <= 5 (tõene) | Olete läbinud taseme 0 |
2 | 1 <= 5 (tõene) | Olete läbinud 1. taseme |
3 | 2 <= 5 (tõene) | Olete läbinud 2. taseme |
4 | 3 <= 5 (tõene) | Olete läbinud 3. taseme |
5 | 4 <= 5 (tõene) | Olete läbinud 4. taseme |
6 | 5 <= 5 (tõene) | Olete läbinud 5. taseme |
7 | 6 <= 5 (vale) | väljaspool silmust |
2. Korda silmuse ajal
See silmus hindab selle seisundit iga silmuse läbimise lõpus. Kordus … samas kui silmus sarnaneb samal ajal kui ühe võtme erinevusega. Korduse keha, samal ajal kui tsükkel käivitatakse üks kord enne testi avaldise kontrollimist.
Korduse süntaks samal ajal kui tsükkel on:
repeat ( // statements… ) while (testExpression)
Kuidas korrata … kui silmus töötab?
Korduse keha, samal ajal kui tsükkel käivitatakse üks kord (enne testi avaldise kontrollimist). Alles seejärel kontrollitakse testExpression.
Kui testExpressioni väärtuseks on seatud tõene, käivitatakse silmuse kehas olevad laused ja testExpression hinnatakse uuesti. See protsess kestab seni, kuni testExpression on hinnatud false
.
Kui testExpression on false
, korrake…, kuni silmus lõpeb.
Korduse vooskeem … silmuse ajal
Näide 2: korrake silmuse ajal
var currentLevel:Int = 0, finalLevel:Int = 5 let gameCompleted = true repeat ( //play game if gameCompleted ( print("You have passed level (currentLevel)") currentLevel += 1 ) ) while (currentLevel <= finalLevel) print("outside of repeat while loop")
Programmi käivitamisel on väljund järgmine:
Olete läbinud taseme 0 olete läbinud 1. taseme olete läbinud 2. taseme olete läbinud 3. taseme olete läbinud 4. taseme olete läbinud 5. taseme väljaspool kordust, kui tsükkel
Ülaltoodud näites täidetakse esmakordselt tsükli sees olevad laused. Ja järgmise korduse korral kontrollib see seisukorda currentLevel <= finalLevel
.
Kui tingimus naaseb true
, on tsükli käivitamise ajal sees olevad laused muidu silmus lõpetatud.
Kordus | Tingimus (currentLevel <= finalLevel) | Väljund |
---|---|---|
1 | 0 <= 5 (tõene) | Olete läbinud taseme 0 |
2 | 1 <= 5 (tõene) | Olete läbinud 1. taseme |
3 | 2 <= 5 (tõene) | Olete läbinud 2. taseme |
4 | 3 <= 5 (tõene) | Olete läbinud 3. taseme |
5 | 4 <= 5 (tõene) | Olete läbinud 4. taseme |
6 | 5 <= 5 (tõene) | Olete läbinud 5. taseme |
7 | 6 <= 5 (vale) | väljaspool kordust silmuse ajal |
Kuigi nii while
ja repeat while
loop on sama täitmise samme, tingimusel currentLevel <= finalLevel
kohta repeat while
loop täidetakse ainult pärast täidesaatva avaldused sees.
Kuid pärast while
seda kontrollitakse seisundit alguses, enne kui selles olevad avaldused käivitatakse.
3. Lõputu, samas aas
Kui testväljend ei anna kunagi tulemust false
, käivitatakse keha while
ja repeat… while
silmus lõpmatult mitu korda.
Näide 3: lõpmatu aasa ajal
while (true) ( print("Hello, World!") )
repeat ( print("Hello, World!") ) while (true)
Programmi käivitamisel on väljund järgmine:
Tere, Maailm! Tere, Maailm!…
Programmi käivitamisel täidavad mõlemad tsüklid print("Hello, World!")
avalduse lõpmatu arv kordi. Niisiis, näete pidevat väljundit Tere, maailm! konsoolis.