Vi er igen i gang med Winston-tegneprogrammet, men jeg har tilføjet lidt tekst til det. Jeg vil gerne lægge en Winston under hvert mærkat, så vi kan se ham i hver del af livet. Lige nu er han over det hele. Det er fordi vi sætter faceX og faceY til tilfældige tal inden i funktionen. Vi vil gerne kunne udtrykke "Her er den præcise position hvor du skal tegne den her Winston." Jeg vil have en måde at give en position på hver gang jeg kalder funktionen på samme måde som vi gør ved ellipse() og rect(). Jeg vil gerne have en Winston her, her her og her, og jeg vil ikke bare lægge dem tilfældige steder hver gang jeg kalder funktionen. For at gøre det er vi nødt til at give funktionen "parametre" både i vores funktionsdefinition -- her i toppen -- og i vores funktionskald hernede når vi faktisk kalder den. Vi sender faceX og faceY gennem drawWinston(), og vi får den til at bruge de sendte værdier i stedet for at generere dem tilfældigt. Vi skal tænke over hvad vi sender til funktionerne hernede. Vi sætter hver Winston under hvert mærkat, så vi vil nok gerne have at x og y for hver Winston er ens med de tal som vi sendte til text()-funktionerne. Måske 10 pixels mindre i y-værdien? Den første værdi er 10 og 30 og så måske 200, 230... 10, 230... 200, 230. Det er det samme som med mærkat-koordinaterne. Jeg tilføjer bare 10 til hvert y, for jeg vil have den lidt lavere. Winston har ikke flyttet sig. Vi har ikke fortalt vores funktion at vi sender parametre til den, så den bruger stadig de her tilfældige værdier. For at fortælle funktionen "Nu skal du have den her information i stedet" er vi nødt til at give parametrene navne inde i de her paranteser. Vi kalder dem faceX og faceY og separerer dem med et komma. Vi kalder dem det fordi vi bruger dem inde i funktionen. Så har vi ikke brug for at omskrive resten af vores kode. Men stadigvæk... Intet er sket! Winston er over det hele. Hvis du kigger i toppen af funktionen ser du at vi stadig overskriver faceX og faceY med tilfældige værdier Så vi skal slette de her linjer... Nu bliver faceX og faceY sendt til funktionen, og den bruger de værdier som vi kalder dem med. Jeg satte ikke helt Winston korrekt, for jeg glemte at tekst positioneres i forhold til øverste venstre hjørne, og ansigtet positioneres i forhold til midten. Jeg er nødt til at fikse mine tal lidt. Jeg skal flytte x-værdien en del og flytte den her, og så... det er vores baby. Vi gennemgår og ændrer hvad jeg sender til funktionen. Jeg behøver slet ikke at ændre funktionsdefinitionen. Den tager altid de værdier som vi giver den. Helt ligesom ellipse() og rect(). Jeg har positioneret den, men jeg har lagt mærke til at Winston er for stor. Han overlapper og passer ikke ind. Jeg har lagt koden til at tegne ham ind i en funktion. Jeg kan ændre størrelsen af allesammen på én gang ved at ændre en linje kode der tegner ellipsen. Hvis vi giver ham 190 kommer han på en diæt. 190 igen. Nu passer han bedre, og I er godt klar over at jeg kunne blive ved med at justere ham for at han kan komme derind. Sejt! Lad os repetere hvad koden gøre. Den definerer en funktion vi kalder drawWinston() og siger at funktionen tager to værdier og giver dem navnene faceX og faceY. De værdier kommer som variabler som vi kan bruge overalt i vores funktion helt ligesom vi plejede at bruge variablerne fra toppen. Og så kan vi kalde funktionen hvornår vi nu vil. Vi kan give den forskellige værdier, så den bruger de værdier hver gang. Du har set hvad der er sejt ved funktioner. Vi kan finde på miljøvenlig kode der nemt kan genbruges, men vi kan også bruge parametrene til at sige "Hey, her er noget som du kan ændre ved koden." Det er som en opskrift. Du skriver de generalle instruktioner, og hvis du indser at du pludselig skal fodre 4 Winstons i stedet for 1 behøver du ikke starte forfra, for du ændrer bare de oprindelige instruktioner og ganger alt med 4. Nu kan du tænke lidt over dine kode-opskrifter! Nam-nam.