Nu til noget du har brugt
hele tiden: Funktioner.
Hver gang du har brugt kommandoer
som rect(), fill() eller text(),
har du kaldt funktioner,
og de funktioner har tegnet
hvad du har bedt dem om.
Hvad er funktioner?
Det er en samling kode
som vi har grupperet
og givet et navn
fordi vi vil være i stand til,
at bruge dens
funktionalitet flere gange.
Tænk på rect().
Hvad gør rect()?
Det tegner bare fire linjer, ikke?
Det kunne vi da bare gøre
med vores line() funktion, ikke?
og her har vi
hvad der ligner et rektangel.
Men vi indser at vi
gerne vil kunne
tegne et rektangel mange gange,
og det ville være irriterende
at lave matematikken hver gang
for at finde ud af
hvordan man tegner en linje
fra et hjørne til det næste
og det næste og næste
Så i stedet har vi bare lavet
en rect() funktion,
og den funktion gør
præcis den samme ting,
som de fire linjers kode gjorde,
men fylder meget mindre.
Det er pænt sejt,
og rect() er en af de funktioner
som er tilgængelig
for ALLE programmer
og kan bruges her på Khan Academy.
Men - du kan også lave
dine egne funktioner
til brug i dine programmer.
For eksempel - lad os sige
at vi laver et program,
og gerne vil tegne Winston
flere gange -
måske fordi vi vil fortælle
Winstons livshistorie
og vise de forskellige aldre
gennem hans liv.
Her er hvad vores Winston
tegne-kode kunne starte med:
Vi har variablene
'faceX' og 'faceY
til at gemme centrum
af ansigtet
og så tegner vi øjnene
og munden
relativt til de variable.
Lige nu ser
programmet koden,
og det er ikke inde i en funktion,
så det bliver bare kørt,
og det bliver kun kørt en gang.
OK, lad os gøre det til en funktion.
Dette gøres lidt på samme måde
som vi erklærer en variabel,
fordi det er faktisk
hvad vi gør.
Så vi siger 'var drawWinston'.
Vi giver det et godt navn,
meget beskrivende,
og så '=', men her
i stedet for at skrive et tal eller en tekststreng,
skal vi skrive 'function'
(vær sikker på at stave det korrekt)
og så tomme parenteser '()'
og så en krøllet startparantes '{'
og så en krøllet slutparantes '}'
og vores semikolon ';'
OK så det vi skal gøre
er at putte alt
som vi vil have i vores funktion
mellem den krøllede start og slut parentes
Så vi skal tage alt
koden her,
og putte det i vores funktion
(indenter det pænt) og Ta Da!
Så det vi har nu
er denne variabel
der gemmer en funktion -
så vi har principielt
en mærkat til denne kodeblok,
sådan at vi når som helst
kan sige til vores program,
"Hey, find den kodeblok med
denne mærkat og kør det!"
Vi gør at dette stykke kode
kan genbruges.
Men nu kan vi se,
at der ikke er nogen Winston længere!
Vi har mistet Winston!
Hvor mon han blev af?
OK - så det der skete er
da vi puttede det ind i en funktion,
fortalte vi vores program
"hey her er en bunke kode
som jeg vil kunne
køre senere,
men kun når jeg SIGER at du skal køre det"
Så vi skal bede det køre koden,
hvilket betyder at vi skal
'call' funktionen - lige som vi gjorde
med ellipse() og rect() og line().
Så vi skriver bare
funktions navnet ('drawWinston')
efterfulgt af vores start
og slut paranteser '()'
og, selvfølgelig, vores semikolon,
og Ta Da -
Vi har en Winston!
OK! Jeg syntes det er sejt,
men det kan være at du ikke syntes det er så sejt
fordi at alt hvad vi gjort,
er at få vores program til at gøre
præcis hvad det gjorde før.
Lidt fjollet, hva'?
Hele pointen med funktioner
er at vi kan genbruge dem
Så lad os gøre det nu.
Vi kan bare klippe-klistre funktionen
kaldet "ta da!" "ta da!" igen og igen
Hmmm, men det ser ens ud -
- jamen - det virkede -
det tegner flere Winstons,
men problemet
er at de alle er det samme sted.
Hvis vi havde røntgen syn,
kunne vi røntgen syne tegneområdet
og se tre Winstons,
men jeg har ikke røntgen syn,
(jeg ved ikke med dig).
Men, vi kan lave en lille ændring
af vores funktion
der VIL gøre det tydeligt.
Ser du, faceX og faceY -
de er altid 202 og 208?
Vi kan ændre det
ved at bruge random() funktionen -
- lad os sige random() fra 50 til 350
og det vil generere
et tilfældigt tal mellem disse to -
og vi kan gøre det samme her -
så hver gang funktionen bliver kaldt,
genererer den et nyt tilfældigt tal,
og hvis vi trykker genstart,
kan vi fortæt få tilfældige Winstons.
SÅ sejt!
Wohoo!!
Okay - altså jeg syntes det er sejt
fordi det kunne have
taget en masse kode at skrive dette
hvis vi ikke havde det i en funktion,
Det ville have været
tre gange så meget kode.
Men det ville ikke have været
SÅ brugbart som det kunne have været
fordi vi sikkert
ikke vil have tilfældige Winstoner.
Vi vil nok gerne kunne
give Winston
en specifik position på skærmen.
Så bliv hængende, for' vi vil snakke
om at give paramtere
til vores funktioner,
så du kan
gøre præcis det.