-
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.