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.