Modul 8
Du har brugt dem hele kurset. Nu skal du lave dine egne.
Et pointsystem med tre knapper, der giver forskellige point. Uden funktioner ender du med at skrive den samme kode tre gange. Funktioner skærer det ned til én.
Alle fire ligger under Functions, den lysegrønne kategori.
Det er samme grønne som den function, der hele kurset har hængt bag
på dine onEvent-blokke, og det er ikke tilfældigt. Det er den samme slags ting.
myFunction og n er navne,
du selv retter.
Design
Tre Buttons med id rigtigKnap,
forkertKnap og bonusKnap, samt to
Labels med id scoreLabel og
beskedLabel.
Gør det først på den dumme måde
Byg de to første onEvents (rigtigKnap og
forkertKnap), som du ville have gjort efter modul 2. Kør det og
se, at det virker. bonusKnap lader du stå tom indtil videre;
den kommer du til om lidt.
Kig på de to blokke. To af de tre linjer er ens. Den gentagelse fjerner vi nu.
Definer funktionen
Træk function myFunction(n) { ud i
arbejdsområdet, helt for sig selv og ikke inde i noget. Kald den
opdaterScore, og giv den to parametre: ændring og
besked.
Kør appen. Der sker ingenting, og sådan skal det være: at definere en funktion får den ikke til at køre. Den venter på at blive kaldt.
Kald funktionen fra hver knap
Slet indholdet af dine onEvents og læg en myFunction(n) ind i stedet.
Nu er der én linje per knap, og al koden, der rent faktisk laver noget, står ét sted.
Se hvad du har vundet
Tilføj en linje til funktionen, så baggrunden også skifter farve. Du retter ét sted, og alle tre knapper får den nye opførsel.
Ét sted at rette i stedet for tre.
En funktion er et navngivet stykke kode, du kan køre igen og
igen. Du har brugt dem hele kurset. setText,
getNumber og randomNumber er alle funktioner, bare
skrevet af nogen hos code.org. Nu skriver du dine egne.
Der er altid to trin:
Parametre er de huller, du fylder ud, når du kalder. De gør funktionen brugbar til flere ting.
I definitionen er ændring og besked tomme navne. De
får først en værdi, når funktionen kaldes:
opdaterScore(10, "Rigtigt! +10") gør ændring til 10.opdaterScore(-5, "Forkert. −5") gør ændring til −5.Det første, du skriver i kaldet, ryger i den første parameter. Bytter du om, bliver beskeden lagt til scoren.
Indtil nu har funktionen selv opdateret skærmen. Nogle gange vil du hellere have et svar tilbage.
Funktionen skriver ikke noget nogen steder. Den regner ud, om de to ting er
ens, og afleverer true eller false. Så kan du bruge
den midt i en betingelse:
Når return køres, stopper funktionen. Alt
hvad der står under return i funktionen, bliver aldrig kørt.
Definitionen skal ligge for sig selv. En funktion defineres uden for alle onEvents, ligesom variabler i modul 2. Lægger du definitionen inde i en onEvent, kan de andre knapper ikke få fat i den.
Opgave
Byg videre på bladre-appen fra modul 5, men med funktioner.
visSpørgsmål() uden parametre, der viser det
aktuelle spørgsmål og opdaterer tælleren.tjekSvar(svar), der returnerer
true eller false.opdaterScore(ændring, besked) som i eksemplet.Opgaven er i praksis motoren i projektet i modul 10. Brug tid på den.
Udfordring
Skriv en funktion karakterFor(point), der returnerer en
karakter som tekst. Brug if/else-kæden fra modul 4 inde i funktionen, og
return i hver gren.
return gør, og forskellen på en funktion der viser
noget, og en der returnerer noget.Byggeklods: funktion med parametre