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.