Modul 7
Nogle gange ved man ikke på forhånd, hvor mange gange noget skal gentages.
Gæt-et-tal. Appen tænker på et tal mellem 1 og 100, og brugeren gætter, til det er ramt. Undervejs siger appen for højt eller for lavt og tæller forsøgene.
Ingen ved på forhånd, hvor mange gange brugeren gætter. Det er den situation, while findes til.
Først et eksempel. Her lægges tal sammen, indtil summen når 100, og ingen har på forhånd regnet ud, hvor mange runder det tager.
Betingelsen tjekkes før hver runde. Er den sand, køres indholdet, og ellers springer programmet ned under løkken og går videre. Er den falsk allerede første gang, kører løkken slet ikke.
En while-løkke har ingen indbygget tæller. Du skal selv sørge for, at der sker noget inde i løkken, som til sidst gør betingelsen falsk. Ellers kører den for evigt, og fanen fryser.
i bliver aldrig større, så
i < 10 er sand for evigt. Appen hænger.i = i + 1 er det, der får løkken til
at slutte.Sker det for dig, så luk fanen og åbn projektet igen. App Lab gemmer løbende, så du mister ikke noget.
Gæt-et-tal er den klassiske while-opgave i enhver lærebog. I App Lab kan du ikke løse den med en while-løkke.
Grunden er, at App Lab er eventbaseret, som du lærte i modul 1. Appen kører færdig og venter så på klik. En while-løkke, der venter på brugeren, ville låse appen fast, mens den ventede, og brugeren ville aldrig nå at trykke.
I stedet oversætter man while-logikken til en tilstandsvariabel: en Boolean, der husker, om spillet stadig er i gang. Betingelsen fra while flytter op i en if-blok øverst i onEvent.
Design
Et Text Input med id gætFelt, en
Button med id gætKnap og en
Label med id besked.
Opret spillets tilstand
Tre variabler øverst. spilSlut er tilstandsvariablen. Den
svarer til while-betingelsen.
Stop hvis spillet er slut
Første linje inde i onEvent er en vagt: er spillet forbi, gør vi ingenting.
Det her er while-betingelsen, bare flyttet ind i en if.
Læs gættet og tæl forsøget
Sammenlign og svar
En if/else med tre grene. Brug plus-knappen nederst på blokken, som du lærte i modul 4.
Linjen spilSlut = true afslutter spillet. Den svarer til
i = i + 1 i while-løkken: den ene ting, der sørger for, at det
hele ender.
De to måder er den samme logik:
Begge steder har du en betingelse, der skal være sand, for at der sker noget, og noget indeni, der til sidst gør den falsk. Forskellen er, hvem der driver gentagelsen: computeren eller brugeren.
Hvornår bruger man så en rigtig while-løkke i App Lab? Når noget skal regnes færdigt, uden at brugeren blander sig, som i sum-eksemplet ovenfor. Skal brugeren indgå undervejs, bruger du en tilstandsvariabel.
Løkker er svære at fejlfinde, fordi alt sker på én gang. Læg en console.log("message") ind i løkken og kør igen. Så kan du læse hver eneste runde i konsollen nederst i App Lab.
Opgave
Udvid gæt-spillet, så brugeren kun får syv forsøg.
antalForsøg er nået til 7.spilSlut til true og afslør tallet.randomNumber.Udfordring
Skriv sum-eksemplet om, så det bruger en for-løkke i stedet. Det kan lade sig gøre, men det bliver klodset. Så mærker du selv, hvorfor de to slags løkker findes hver for sig.
Byggeklods: tilstandsvariabel