Lykkjur
Í Scratch notuðum við lykkjur. Þær báru einfaldlega nöfn eins og "repeat 10 times" og þessháttar. Í p5js munum við nota while
eða for
lykkjur.
While-lykkjur
Skoðum hvað skilgreining lykkju eins og while(i < 5)
gerir.
i < 10
Hér er sett fram skilyrði. Þetta skilyrði er athugað í hvert sinn sem byrjað er á lykkjunni, ef skilyrðið er uppfyllt, þá er lykkja keyrð. Ef skilyrðið er ekki uppfylt, þá er lykkjan ekki keyrð aftur og haldið áfram í næstu skipun.
Það sem er sett inn í lykkuna er því keyrt 5 sinnum, þegar i er 0, 1, 2, 3 og 4. Þegar i er 5 þá hættir lykkjan að keyrast.
Óendanlegar lykkjur
Við viljum aldrei búa til óendanlegar lykkjur. Svo þegar við setjum fram skilyrði í lykkju, skulum við athuga að því verði einhverntíman náð.
Athugaðu hvað gerist ef þú tekur burt skipunina i = i+1;
. Þá breytist gildið á i aldrei og lykkjunni lýkur aldrei. Þá ættirðu að fá villu því skriftan nær aldrei að klára neitt.
For-lykkjur
Skoðum hvað skilgreining lykkju eins og for(var i = 0; i < 5; i = i+1)
gerir:
var i = 0
Hér er verið að skilgreina breytui
sem er bara til inni í lykkjunni.i < 10
Hér er sett fram skilyrði. Þetta skilyrði er athugað í hvert sinn sem byrjað er á lykkjunni, ef skilyrðið er uppfyllt, þá er lykkja keyrð. Ef skilyrðið er ekki uppfylt, þá er lykkjan ekki keyrð aftur og haldið áfram í næstu skipun.i = i+1
Hér er sagt hvað gerist í lok hverrar lykkju. Hér er i látið stækka um 1.
Það sem er sett inn í lykkuna er því keyrt 5 sinnum, þegar i er 0, 1, 2, 3 og 4. Þegar i er 5 þá hættir lykkjan að keyrast.
Svo þessi skrifta hér að neðan ætti að gera nákvæmlega það sama og skriftan að ofan.
For vs. while
Hvernær viljum við nota for og hvenær while?
Það fer nokkuð eftir smekk og viðfangsefni. Við getum notað hvora sem er í öllum tilfellum til þess að fá sömu niðurstöðuna.
for
-lykkur eru góðar því þeir skilgreina hlaupabreytuna í skilgreiningu lykkjunnar, svo kóðinn verður læsilegri.while
-lykkjur gæti verið gott að nota ef nota þarf hlaupabreytuna eftir að lykkjan er keyrð.
Prófaðu til dæmis að setja skipunina text("Lykkja búin", width/2, 20+i*10);
á eftir lykkjunni í skriftunum hér að ofan. Þetta ætti að virka vel fyrir while-lykkjuna en virkar ekki fyrir for-lykkjuna. Það er vegna þess að breytan i er bara til inni í for lykkjunni.
Í dæmum hér mun ég almennt nota for-lykkjur.
For-lykkja teiknar hringi
Prófaðu að breyta kóðanum þannig að 10 hringir séu teiknaðir.
Prófaðu að færa fill
skipunina inn í for lykkjuna. Hvað breytist? Reyndu að sjá það fyrir þér áður en þú keyrir forritið.
For lykkja teiknar línur
Breytan stepSize er skilgreind í fyrstu línu. Hún segir til um hversu langt er á milli tveggja lína.
for lykkjan teiknar línu frá punktinum 0,y sem er við vinstri rönd yfir í punktinn width, y sem er á hægri rönd. y hefur gildir 20 í upphafi, en eykst svo um stepSize í hvert skipti sem farið er í gegn um lykkjuna.
Lykkjan stoppar þegar y er orðið jafnstórt eða stærra en height sem er hæðin á skjánum.
Prófið að breyta gildinu á stepSize og sjá hvaða áhrif það hefur á teikninguna!
Slembilitur valinn með random
Rétthyrningurinn er teiknaður í x = 0, x = 10, x = 20, o.s.fr.v. í hvert sinn sem lykkjan er keyrð er gildið á x aukið um 10. Liturinn á rétthyrningnum er valinn í fill. Við veljum slembilit á bilinu frá 50 upp í 150. 0 er svart og 255 er hvítt.
Faldaðar lykkjur
Við getum sett lykkju inn í lykkju, þá köllum við hana í heild faldaða lykkju (e. nested loop).
Þetta gerum við t.d. þegar við viljum ýtra yfir tvær breytur í einu:
Hér fyrir neðan tekur x gildi á 20 punkta fresti frá 0 og upp í width, sem er breidd gluggans. y tekur gildi á bilinu frá 0 upp í height, sem að er hæð gluggans.