0:00:01.383,0:00:03.649 Nu til noget du har brugt 0:00:03.649,0:00:05.685 hele tiden: Funktioner. 0:00:05.685,0:00:09.140 Hver gang du har brugt kommandoer[br]som rect(), fill() eller text(), 0:00:09.140,0:00:12.376 har du kaldt funktioner,[br]og de funktioner har tegnet 0:00:12.376,0:00:15.132 hvad du har bedt dem om. 0:00:15.132,0:00:16.806 Hvad er funktioner? 0:00:16.806,0:00:19.483 Det er en samling kode [br]som vi har grupperet 0:00:19.483,0:00:21.240 og givet et navn[br]fordi vi vil være i stand til, 0:00:21.240,0:00:23.168 at bruge dens[br]funktionalitet flere gange. 0:00:23.368,0:00:25.981 Tænk på rect().[br]Hvad gør rect()? 0:00:25.981,0:00:28.551 Det tegner bare fire linjer, ikke? 0:00:28.551,0:00:31.141 Det kunne vi da bare gøre[br]med vores line() funktion, ikke? 0:00:31.141,0:00:33.847 og her har vi[br]hvad der ligner et rektangel. 0:00:33.847,0:00:36.751 Men vi indser at vi[br]gerne vil kunne 0:00:36.751,0:00:39.322 tegne et rektangel mange gange, 0:00:39.322,0:00:40.773 og det ville være irriterende 0:00:40.773,0:00:42.784 at lave matematikken hver gang[br]for at finde ud af 0:00:42.784,0:00:44.282 hvordan man tegner en linje[br]fra et hjørne til det næste 0:00:44.282,0:00:45.818 og det næste og næste 0:00:45.818,0:00:48.538 Så i stedet har vi bare lavet[br]en rect() funktion, 0:00:48.538,0:00:50.858 og den funktion gør[br]præcis den samme ting, 0:00:50.858,0:00:55.148 som de fire linjers kode gjorde,[br]men fylder meget mindre. 0:00:55.148,0:00:58.399 Det er pænt sejt,[br]og rect() er en af de funktioner 0:00:58.399,0:01:00.519 som er tilgængelig[br]for ALLE programmer 0:01:00.519,0:01:02.729 og kan bruges her på Khan Academy. 0:01:02.729,0:01:05.339 Men - du kan også lave[br]dine egne funktioner 0:01:05.339,0:01:08.409 til brug i dine programmer. 0:01:08.409,0:01:11.430 For eksempel - lad os sige[br]at vi laver et program, 0:01:11.430,0:01:14.434 og gerne vil tegne Winston[br]flere gange - 0:01:14.434,0:01:17.017 måske fordi vi vil fortælle[br]Winstons livshistorie 0:01:17.017,0:01:20.190 og vise de forskellige aldre[br]gennem hans liv. 0:01:20.190,0:01:24.243 Her er hvad vores Winston[br]tegne-kode kunne starte med: 0:01:24.243,0:01:27.106 Vi har variablene[br]'faceX' og 'faceY 0:01:27.106,0:01:29.029 til at gemme centrum[br]af ansigtet 0:01:29.029,0:01:31.243 og så tegner vi øjnene[br]og munden 0:01:31.243,0:01:33.039 relativt til de variable. 0:01:33.039,0:01:34.732 Lige nu ser[br]programmet koden, 0:01:34.732,0:01:37.325 og det er ikke inde i en funktion,[br]så det bliver bare kørt, 0:01:37.325,0:01:39.739 og det bliver kun kørt en gang. 0:01:39.739,0:01:43.717 OK, lad os gøre det til en funktion. 0:01:43.717,0:01:46.439 Dette gøres lidt på samme måde 0:01:46.439,0:01:48.487 som vi erklærer en variabel,[br]fordi det er faktisk 0:01:48.487,0:01:50.245 hvad vi gør. 0:01:50.245,0:01:52.077 Så vi siger 'var drawWinston'. 0:01:52.077,0:01:54.551 Vi giver det et godt navn,[br]meget beskrivende, 0:01:54.551,0:01:59.037 og så '=', men her[br]i stedet for at skrive et tal eller en tekststreng, 0:01:59.037,0:02:02.721 skal vi skrive 'function'[br](vær sikker på at stave det korrekt) 0:02:02.721,0:02:08.357 og så tomme parenteser '()'[br]og så en krøllet startparantes '{' 0:02:08.357,0:02:11.563 og så en krøllet slutparantes '}'[br]og vores semikolon ';' 0:02:11.563,0:02:14.490 OK så det vi skal gøre[br]er at putte alt 0:02:14.490,0:02:19.454 som vi vil have i vores funktion[br]mellem den krøllede start og slut parentes 0:02:19.454,0:02:22.130 Så vi skal tage alt[br]koden her, 0:02:22.130,0:02:26.816 og putte det i vores funktion[br](indenter det pænt) og Ta Da! 0:02:26.816,0:02:28.970 Så det vi har nu[br]er denne variabel 0:02:28.970,0:02:32.379 der gemmer en funktion -[br]så vi har principielt 0:02:32.379,0:02:35.759 en mærkat til denne kodeblok,[br]sådan at vi når som helst 0:02:35.759,0:02:37.859 kan sige til vores program, 0:02:37.859,0:02:40.765 "Hey, find den kodeblok med[br]denne mærkat og kør det!" 0:02:40.765,0:02:43.551 Vi gør at dette stykke kode[br]kan genbruges. 0:02:43.551,0:02:46.535 Men nu kan vi se,[br]at der ikke er nogen Winston længere! 0:02:46.535,0:02:49.357 Vi har mistet Winston![br]Hvor mon han blev af? 0:02:49.357,0:02:53.025 OK - så det der skete er[br]da vi puttede det ind i en funktion, 0:02:53.025,0:02:55.907 fortalte vi vores program[br]"hey her er en bunke kode 0:02:55.907,0:02:57.842 som jeg vil kunne[br]køre senere, 0:02:57.842,0:03:00.807 men kun når jeg SIGER at du skal køre det" 0:03:00.807,0:03:04.288 Så vi skal bede det køre koden,[br]hvilket betyder at vi skal 0:03:04.288,0:03:09.110 'call' funktionen - lige som vi gjorde[br]med ellipse() og rect() og line(). 0:03:09.400,0:03:13.753 Så vi skriver bare[br]funktions navnet ('drawWinston') 0:03:13.753,0:03:16.376 efterfulgt af vores start[br]og slut paranteser '()' 0:03:16.376,0:03:18.959 og, selvfølgelig, vores semikolon,[br]og Ta Da - 0:03:18.959,0:03:20.942 Vi har en Winston! 0:03:20.942,0:03:24.237 OK! Jeg syntes det er sejt,[br]men det kan være at du ikke syntes det er så sejt 0:03:24.237,0:03:27.373 fordi at alt hvad vi gjort,[br]er at få vores program til at gøre 0:03:27.373,0:03:30.239 præcis hvad det gjorde før.[br]Lidt fjollet, hva'? 0:03:30.239,0:03:32.920 Hele pointen med funktioner[br]er at vi kan genbruge dem 0:03:32.920,0:03:34.957 Så lad os gøre det nu. 0:03:34.957,0:03:41.162 Vi kan bare klippe-klistre funktionen[br]kaldet "ta da!" "ta da!" igen og igen 0:03:41.162,0:03:46.572 Hmmm, men det ser ens ud -[br]- jamen - det virkede - 0:03:46.572,0:03:48.998 det tegner flere Winstons,[br]men problemet 0:03:48.998,0:03:51.474 er at de alle er det samme sted. 0:03:51.474,0:03:54.428 Hvis vi havde røntgen syn,[br]kunne vi røntgen syne tegneområdet 0:03:54.428,0:03:57.631 og se tre Winstons,[br]men jeg har ikke røntgen syn, 0:03:57.631,0:04:00.334 (jeg ved ikke med dig). 0:04:00.334,0:04:03.440 Men, vi kan lave en lille ændring[br]af vores funktion 0:04:03.440,0:04:05.486 der VIL gøre det tydeligt. 0:04:05.486,0:04:08.825 Ser du, faceX og faceY -[br]de er altid 202 og 208? 0:04:08.825,0:04:11.587 Vi kan ændre det[br]ved at bruge random() funktionen - 0:04:11.587,0:04:14.849 - lad os sige random() fra 50 til 350[br]og det vil generere 0:04:14.849,0:04:19.183 et tilfældigt tal mellem disse to -[br]og vi kan gøre det samme her - 0:04:19.183,0:04:23.023 så hver gang funktionen bliver kaldt,[br]genererer den et nyt tilfældigt tal, 0:04:23.023,0:04:26.566 og hvis vi trykker genstart,[br]kan vi fortæt få tilfældige Winstons. 0:04:26.566,0:04:29.359 SÅ sejt![br]Wohoo!! 0:04:29.359,0:04:32.095 Okay - altså jeg syntes det er sejt[br]fordi det kunne have 0:04:32.095,0:04:34.916 taget en masse kode at skrive dette[br]hvis vi ikke havde det i en funktion, 0:04:34.916,0:04:38.317 Det ville have været[br]tre gange så meget kode. 0:04:38.317,0:04:40.960 Men det ville ikke have været[br]SÅ brugbart som det kunne have været 0:04:40.960,0:04:43.796 fordi vi sikkert[br]ikke vil have tilfældige Winstoner. 0:04:43.796,0:04:45.736 Vi vil nok gerne kunne[br]give Winston 0:04:45.736,0:04:47.846 en specifik position på skærmen. 0:04:47.846,0:04:49.943 Så bliv hængende, for' vi vil snakke[br]om at give paramtere 0:04:49.943,0:04:52.483 til vores funktioner,[br]så du kan 0:04:52.000,0:04:56.000 gøre præcis det.