1 00:00:00,000 --> 00:00:04,664 2 00:00:04,664 --> 00:00:05,580 DOUG LLOYD: Alle reg. 3 00:00:05,580 --> 00:00:08,877 So nou, laat ons 'n pak baie groot onderwerp, funksies. 4 00:00:08,877 --> 00:00:11,460 Tot dusver in die kursus, het al die programme wat ons het is skryf 5 00:00:11,460 --> 00:00:12,969 is geskryf binnekant van hoof. 6 00:00:12,969 --> 00:00:14,260 Hulle is redelik eenvoudige programme. 7 00:00:14,260 --> 00:00:16,940 Jy hoef nie al hierdie dinge het takke en dinge aan die gang. 8 00:00:16,940 --> 00:00:18,773 Ons kan net pas dit alles binnekant van die belangrikste en dit 9 00:00:18,773 --> 00:00:20,407 raak nie vreeslik oorweldigend. 10 00:00:20,407 --> 00:00:22,990 Maar as die kursus gaan op en as jy begin om programme te ontwikkel 11 00:00:22,990 --> 00:00:26,260 onafhanklik, is hulle waarskynlik gaan om te begin om 'n baie meer as 10 kry 12 00:00:26,260 --> 00:00:27,200 of 15 lyne. 13 00:00:27,200 --> 00:00:31,400 Jy kan honderde of duisende kry of tienduisende reëls van die kode. 14 00:00:31,400 --> 00:00:34,690 En dit is regtig nie wat gek 'n gedagte. 15 00:00:34,690 --> 00:00:39,720 As sodanig, is dit waarskynlik nie 'n goeie idee om alles binne belangrikste hou. 16 00:00:39,720 --> 00:00:43,240 Dit kan 'n bietjie moeilik om te vind wat jy soek as jy dit doen. 17 00:00:43,240 --> 00:00:47,040 >> Gelukkig, hoewel C, en pretty much elke ander taal wat 18 00:00:47,040 --> 00:00:50,386 dalk met werk, kan ons funksies te skryf. 19 00:00:50,386 --> 00:00:52,260 En ek is net gaan om te neem 'n vinnige opsy hier 20 00:00:52,260 --> 00:00:54,971 om te noem dat funksies is een gebied van rekenaarwetenskap is. 21 00:00:54,971 --> 00:00:57,970 En jy sal baie meer van hulle by te sien verskeie punte deur die loop 22 00:00:57,970 --> 00:00:59,290 en as jy aanhou om op. 23 00:00:59,290 --> 00:01:02,280 Waar daar is 'n baie sinonieme vir dieselfde woord. 24 00:01:02,280 --> 00:01:03,390 So noem ons die funksies. 25 00:01:03,390 --> 00:01:05,980 Maar jy kan dit ook hoor verwys as prosedures, 26 00:01:05,980 --> 00:01:09,570 of metodes, veral as jy al ooit gedoen enige objekgeoriënteerde programmering 27 00:01:09,570 --> 00:01:11,950 before-- en moenie bekommerd wees nie as jy nie het nie, nie 28 00:01:11,950 --> 00:01:14,280 'n groot deal-- maar in oudit-georiënteerde tale 29 00:01:14,280 --> 00:01:16,129 is dikwels genoem metodes. 30 00:01:16,129 --> 00:01:17,670 Soms is hulle subroetines genoem. 31 00:01:17,670 --> 00:01:20,690 Maar hulle het regtig al verwys om dieselfde basiese idee. 32 00:01:20,690 --> 00:01:22,480 >> Kom ons kyk wat die idee is. 33 00:01:22,480 --> 00:01:23,310 Wat is 'n funksie? 34 00:01:23,310 --> 00:01:26,470 Wel 'n funksie is regtig niks meer as 'n swart boks. 35 00:01:26,470 --> 00:01:31,430 'N Swart boks wat 'n stel van nul het of meer insette en 'n enkele uitset. 36 00:01:31,430 --> 00:01:33,420 So byvoorbeeld, is hierdie kan 'n funksie wees. 37 00:01:33,420 --> 00:01:35,510 Dit is 'n funksie genoem funk. 38 00:01:35,510 --> 00:01:39,330 En dit neem drie insette a, b, c en. 39 00:01:39,330 --> 00:01:42,580 En binne dat swart boks, ons weet nie presies wat dit doen, 40 00:01:42,580 --> 00:01:45,100 maar dit verwerk die insette in een of ander manier en dan is dit 41 00:01:45,100 --> 00:01:48,680 gee 'n enkele uitset, in hierdie geval, z. 42 00:01:48,680 --> 00:01:50,504 Nou om dit 'n bietjie te maak minder abstrakte, ons 43 00:01:50,504 --> 00:01:52,420 kan dalk sê dat ons 'n funksie genoem 44 00:01:52,420 --> 00:01:58,750 byvoeg dat neem drie insette a, b, en c en verwerk die uitset in een of ander manier 45 00:01:58,750 --> 00:02:01,010 binne-in die swart blokkie om produseer 'n enkele uitset. 46 00:02:01,010 --> 00:02:05,190 So in hierdie geval, indien voeg neem 3, 6 en 7. 47 00:02:05,190 --> 00:02:07,020 Iewers in die voeg funksie, sou ons 48 00:02:07,020 --> 00:02:09,750 hulle verwag om bymekaar getel om die uitset produseer wat 49 00:02:09,750 --> 00:02:13,220 3 plus 6 plus 7 of 16. 50 00:02:13,220 --> 00:02:17,940 >> Net so, jy 'n funksie genoem het mult dat twee insette, A en B neem, 51 00:02:17,940 --> 00:02:21,070 prosesse hulle in een of ander manier soos dat die uitset van die funksie 52 00:02:21,070 --> 00:02:22,920 is die produk van die twee insette. 53 00:02:22,920 --> 00:02:25,080 Die twee insette vermenigvuldig saam. 54 00:02:25,080 --> 00:02:29,150 4 en 5 word oorgegaan in mult, iets gebeur, sal die uitset ons verwag 55 00:02:29,150 --> 00:02:31,090 is 20. 56 00:02:31,090 --> 00:02:32,507 Hoekom moet ons noem dit 'n swart boks? 57 00:02:32,507 --> 00:02:34,840 Wel, as ons nie die skryf van die funksioneer onsself, wat 58 00:02:34,840 --> 00:02:36,869 ons gedoen het nogal 'n bietjie so ver cs50. 59 00:02:36,869 --> 00:02:39,910 Ons het druk f gesien, byvoorbeeld, wat is 'n funksie wat ons nie skryf 60 00:02:39,910 --> 00:02:42,305 onsself, maar ons gebruik al die tyd. 61 00:02:42,305 --> 00:02:44,180 As ons nie skryf die funksies onsself, 62 00:02:44,180 --> 00:02:48,450 Ons het nie regtig nodig het om te weet hoe dit is eintlik geïmplementeer onder die enjinkap. 63 00:02:48,450 --> 00:02:51,710 >> So byvoorbeeld die swart blokkie ek net gewys vir vermenigvuldiging, 64 00:02:51,710 --> 00:02:53,740 mult a, b kon wees defined-- en dit is net 65 00:02:53,740 --> 00:02:57,902 sommige pseudocode-- kan wees gedefinieer as uitset n keer b. 66 00:02:57,902 --> 00:02:58,860 Dit maak sin, reg. 67 00:02:58,860 --> 00:03:01,370 As ons 'n funksie genoem mult dat twee insette neem. 68 00:03:01,370 --> 00:03:04,750 Ons sou verwag dat die uitset wees die twee insette vermenigvuldig saam 69 00:03:04,750 --> 00:03:06,240 'n keer b. 70 00:03:06,240 --> 00:03:09,170 Maar mult kan ook geïmplementeer soos hierdie, 71 00:03:09,170 --> 00:03:13,150 ons het 'n toonbank veranderlike kry stel binnekant van mult tot 0. 72 00:03:13,150 --> 00:03:18,000 En dan hierdie proses herhaal ons b keer voeg 'n counter. 73 00:03:18,000 --> 00:03:24,270 Byvoorbeeld, as ons vermenigvuldig 3a deur 5b, kan ons counter sê ingestel om 0, 74 00:03:24,270 --> 00:03:27,700 herhaal vyf keer, voeg 3 tot toonbank. 75 00:03:27,700 --> 00:03:34,490 So het ons begin by 0 en dan doen ons hierdie vyf keer 3, 6, 9, 12, 15. 76 00:03:34,490 --> 00:03:37,500 Dit is dieselfde resultaat. Ons nog steeds 3 keer 5 net 77 00:03:37,500 --> 00:03:39,500 die implementering is anders. 78 00:03:39,500 --> 00:03:41,490 >> Dit is wat ons bedoel wanneer ons sê 'n swart boks. 79 00:03:41,490 --> 00:03:44,406 Dit beteken net dat ons nie regtig omgee hoe dit geïmplementeer onder die enjinkap 80 00:03:44,406 --> 00:03:46,170 so lank as wat die opbrengs is wat ons verwag. 81 00:03:46,170 --> 00:03:49,045 In werklikheid, dit is deel van die kontrak van die gebruik van funksies, veral 82 00:03:49,045 --> 00:03:50,630 funksies wat ander skryf. 83 00:03:50,630 --> 00:03:53,980 Die gedrag is altyd iets tipiese, onvoorspelbaar 84 00:03:53,980 --> 00:03:55,420 gebaseer op die naam van die funksie. 85 00:03:55,420 --> 00:03:57,500 En dit is die rede waarom dit is regtig belangrik wanneer jy skryf funksies 86 00:03:57,500 --> 00:04:00,020 of wanneer ander mense skryf funksies wat jy kan gebruik, 87 00:04:00,020 --> 00:04:03,590 dat diegene funksies duidelik, relatief duidelik name, 88 00:04:03,590 --> 00:04:04,990 en is goed gedokumenteer. 89 00:04:04,990 --> 00:04:08,560 Wat is beslis die geval vir funksie soos gedrukte f. 90 00:04:08,560 --> 00:04:09,860 >> So hoekom gebruik ons ​​funksies? 91 00:04:09,860 --> 00:04:14,220 Goed soos ek vroeër gesê het, as ons skryf almal van ons kode binnekant van die belangrikste dinge 92 00:04:14,220 --> 00:04:17,120 kan kry regtig swaar en ingewikkeld. 93 00:04:17,120 --> 00:04:19,980 Funksies toelaat dat ons die vermoë om dinge te organiseer en breek 94 00:04:19,980 --> 00:04:24,540 'n baie ingewikkelde probleem in 'n baie meer hanteerbaar sub dele. 95 00:04:24,540 --> 00:04:28,130 Funksies ook vir ons laat die kodering proses te vereenvoudig. 96 00:04:28,130 --> 00:04:33,080 Dit is 'n baie makliker om te ontfout 'n 10 lynfunksie teenoor 'n 100 lyn 97 00:04:33,080 --> 00:04:35,890 funksie of 'n 1000 lynfunksie. 98 00:04:35,890 --> 00:04:38,400 As ons net vir debug klein stukkies op 'n tyd, 99 00:04:38,400 --> 00:04:42,110 of skryf klein stukkies op die oomblik, dit maak dat programming ervaring 100 00:04:42,110 --> 00:04:43,070 'n baie beter. 101 00:04:43,070 --> 00:04:44,910 Glo my op daardie een. 102 00:04:44,910 --> 00:04:48,400 >> Laastens, as ons skryf funksies wat ons kan diegene verskeie dele hergebruik. 103 00:04:48,400 --> 00:04:49,880 Funksies herwin kan word. 104 00:04:49,880 --> 00:04:51,880 Hulle kan gebruik word in program of 'n ander. 105 00:04:51,880 --> 00:04:53,713 Jy het alreeds geskryf die funksie, al wat jy 106 00:04:53,713 --> 00:04:56,530 hoef te doen is vertel dat program waar om daardie funksie te vind. 107 00:04:56,530 --> 00:04:59,680 Ons het al met behulp van die herwinning en druk f vir meer as 40 jaar. 108 00:04:59,680 --> 00:05:02,150 Maar dit was eers geskryf een keer. 109 00:05:02,150 --> 00:05:04,270 Baie handig, reg. 110 00:05:04,270 --> 00:05:04,830 Alles reg. 111 00:05:04,830 --> 00:05:06,040 So funksies is groot. 112 00:05:06,040 --> 00:05:06,860 Ons weet dat. 113 00:05:06,860 --> 00:05:08,700 Nou laat begin skryf het. 114 00:05:08,700 --> 00:05:10,830 Kom ons begin om hulle in ons programme. 115 00:05:10,830 --> 00:05:13,869 Ten einde dit te doen, is die eerste ding wat ons doen, is verklaar dat die funksie. 116 00:05:13,869 --> 00:05:16,160 Wanneer jy 'n funksie te verklaar wat jy basies doen 117 00:05:16,160 --> 00:05:18,900 vertel die samesteller, hey, net sodat jy weet, 118 00:05:18,900 --> 00:05:20,850 Ek gaan skryf 'n funksie later 119 00:05:20,850 --> 00:05:22,987 en hier is wat dit gaan lyk. 120 00:05:22,987 --> 00:05:24,820 Die rede hiervoor is omdat opstellers kan 121 00:05:24,820 --> 00:05:27,900 doen snaakse dinge as hulle sien 'n stel van simbole 122 00:05:27,900 --> 00:05:29,560 dat hulle nie vertroud is met. 123 00:05:29,560 --> 00:05:33,000 Sodat ons net gee die samesteller n hoof van, ek skep 'n funksie 124 00:05:33,000 --> 00:05:35,492 en dit gaan om dit te doen. 125 00:05:35,492 --> 00:05:38,450 Funksie verklarings algemeen as jy organiseer jou kode in 'n manier 126 00:05:38,450 --> 00:05:41,872 dat ander sal in staat wees verstaan ​​en gebruik maak van, 127 00:05:41,872 --> 00:05:44,330 jy in die algemeen wil al sit van jou funksie verklarings 128 00:05:44,330 --> 00:05:48,220 op die top van jou kode, reg voordat jy begin skryf belangrikste selfs. 129 00:05:48,220 --> 00:05:50,770 En gerieflik, daar is 'n baie standaard vorm 130 00:05:50,770 --> 00:05:53,500 dat elke funksie verklaring volg. 131 00:05:53,500 --> 00:05:56,090 Hulle het almal pretty much lyk. 132 00:05:56,090 --> 00:06:01,440 Daar is drie dele om 'n funksie verklaring, tik terugkeer, naam, 133 00:06:01,440 --> 00:06:03,420 en argument lys. 134 00:06:03,420 --> 00:06:07,180 >> Nou is die soort opbrengs is watter soort veranderlike die funksie wil uitset. 135 00:06:07,180 --> 00:06:10,710 So byvoorbeeld, as ons dink terug 'n minute gelede aan die vermenigvuldiging twee 136 00:06:10,710 --> 00:06:15,690 getalle funksie, wat ons verwag as vermenigvuldig ons 'n heelgetal is deur 'n heelgetal 137 00:06:15,690 --> 00:06:18,502 die uitset sal wees waarskynlik 'n heelgetal is, reg. 138 00:06:18,502 --> 00:06:20,710 Vermenigvuldig twee heelgetalle saam, jy kry 'n heelgetal. 139 00:06:20,710 --> 00:06:24,167 So die terugkeer tipe wat funksie sou wees int. 140 00:06:24,167 --> 00:06:26,000 Naam is wat jy wil hê om jou funksie noem. 141 00:06:26,000 --> 00:06:29,330 Dit is waarskynlik die minste belangrik deel van die funksie verklaring 142 00:06:29,330 --> 00:06:30,827 in terme van funksionaliteit. 143 00:06:30,827 --> 00:06:33,160 Maar eintlik is waarskynlik een van die belangrikste dele 144 00:06:33,160 --> 00:06:36,243 van die verklaring funksie in terme weet wat die funksie eintlik 145 00:06:36,243 --> 00:06:37,120 doen nie. 146 00:06:37,120 --> 00:06:40,474 As jy die naam van jou funksie f of g of h of geheim of iets soos dit, 147 00:06:40,474 --> 00:06:42,765 gaan jy waarskynlik te kry 'n bietjie gepootjie probeer 148 00:06:42,765 --> 00:06:44,650 om te onthou wat die funksies te doen. 149 00:06:44,650 --> 00:06:47,880 So dit is belangrik om te gee jou betekenisvolle name funksie se. 150 00:06:47,880 --> 00:06:51,030 >> Laastens, argument lys is die kommas geskei lys 151 00:06:51,030 --> 00:06:55,260 van al die insette om jou funksie, elkeen het 'n tipe en 'n naam. 152 00:06:55,260 --> 00:06:57,840 So nie net wat jy hoef te spesifiseer watter tipe veranderlike 153 00:06:57,840 --> 00:07:00,760 die funksie wil uitvoer, jy ook wil om te spesifiseer 154 00:07:00,760 --> 00:07:07,694 watter tipe en tipes veranderlikes die funksie word aanvaar as insette. 155 00:07:07,694 --> 00:07:08,860 So kom ons doen 'n voorbeeld hier. 156 00:07:08,860 --> 00:07:10,220 Laat ons net 'n blik op 'n meer konkrete een. 157 00:07:10,220 --> 00:07:13,130 So hier is 'n voorbeeld van 'n funksie verklaring vir 'n funksie wat 158 00:07:13,130 --> 00:07:14,925 sou twee heelgetalle saam te voeg. 159 00:07:14,925 --> 00:07:17,800 Die som van twee heelgetalle gaan 'n heelgetal sowel as ons maar net 160 00:07:17,800 --> 00:07:18,450 bespreek. 161 00:07:18,450 --> 00:07:21,610 En so het die tipe terugkeer, hier in groen, sou int wees. 162 00:07:21,610 --> 00:07:25,190 Wat net vertel ons dat twee SY voeg gaan aan die einde van die dag, 163 00:07:25,190 --> 00:07:28,799 uitset, of spoeg dit terug uit na ons, 'n heelgetal. 164 00:07:28,799 --> 00:07:31,590 Gegee wat hierdie funksie te doen wat ons wil gee dit 'n betekenisvolle naam. 165 00:07:31,590 --> 00:07:33,630 Voeg twee SY lyk toepaslik, oorweeg 166 00:07:33,630 --> 00:07:37,574 ons neem twee heelgetalle as insette en hopelik hulle saam te voeg. 167 00:07:37,574 --> 00:07:40,240 Dit mag dalk 'n bietjie van 'n lomp wees naam en eerlik hierdie funksie 168 00:07:40,240 --> 00:07:42,430 is waarskynlik nie nodig want ons het die toevoeging 169 00:07:42,430 --> 00:07:46,310 operateur, as jy onthou van ons bespreking van operateurs, voorheen. 170 00:07:46,310 --> 00:07:49,650 Maar laat ons net sê ter wille van argument dat hierdie funksie is nuttig 171 00:07:49,650 --> 00:07:52,860 en so sal ons noem dit voeg twee SY. 172 00:07:52,860 --> 00:07:55,230 Laastens, die funksie neem twee insette. 173 00:07:55,230 --> 00:07:56,960 Wat elk 'n heelgetal is. 174 00:07:56,960 --> 00:07:59,900 So ons het hierdie komma geskeide lys van insette. 175 00:07:59,900 --> 00:08:02,830 Nou algemeen wil ons gee 'n naam aan elkeen van hulle 176 00:08:02,830 --> 00:08:05,070 sodat dit gebruik kan word binne die funksie. 177 00:08:05,070 --> 00:08:07,180 Die name is nie baie belangrik. 178 00:08:07,180 --> 00:08:11,400 >> In hierdie geval, ons doen nie noodwendig enige betekenis geheg aan hulle. 179 00:08:11,400 --> 00:08:13,140 So kan ons net noem hulle a en b. 180 00:08:13,140 --> 00:08:14,257 Dit is heeltemal fyn. 181 00:08:14,257 --> 00:08:16,090 As jy egter, sal jy vind jouself in 'n situasie 182 00:08:16,090 --> 00:08:19,497 waar die name van die veranderlikes kan eintlik belangrik wees, 183 00:08:19,497 --> 00:08:21,830 jy dalk wil om dit te noem iets anders as a en b 184 00:08:21,830 --> 00:08:24,701 hulle iets meer om te gee simbolies betekenisvol. 185 00:08:24,701 --> 00:08:27,700 Maar in hierdie geval, het ons nie regtig weet niks anders oor die funksie. 186 00:08:27,700 --> 00:08:29,320 Ons wil net twee heelgetalle te voeg. 187 00:08:29,320 --> 00:08:32,429 So ons sal net noem diegene heelgetalle a en b. 188 00:08:32,429 --> 00:08:33,990 Dit is een voorbeeld. 189 00:08:33,990 --> 00:08:36,287 >> Hoekom het jy nie 'n tweede neem na te dink oor hierdie een, 190 00:08:36,287 --> 00:08:38,870 hoe sou jy 'n funksie te skryf verklaring vir 'n funksie wat 191 00:08:38,870 --> 00:08:42,940 vermeerder twee drywende punt getalle? 192 00:08:42,940 --> 00:08:45,910 Onthou jy wat 'n drywende punt nommer is? 193 00:08:45,910 --> 00:08:48,120 Wat sou hierdie funksie verklaring lyk? 194 00:08:48,120 --> 00:08:53,330 Ek het eintlik aanbeveel jy breek die video hier en neem hoeveel tyd jy nodig het. 195 00:08:53,330 --> 00:08:55,521 Dink oor wat hierdie funksie verklaring sou wees? 196 00:08:55,521 --> 00:08:56,770 Wat sou die soort terugkeer? 197 00:08:56,770 --> 00:08:58,103 Wat sou 'n betekenisvolle naam? 198 00:08:58,103 --> 00:08:59,580 Wat sou die insette wees? 199 00:08:59,580 --> 00:09:03,190 So hoekom doen jy nie die video hier breek en skryf-up 'n funksie verklaring 200 00:09:03,190 --> 00:09:07,640 vir 'n funksie wat jou sal vermeerder twee swaai getalle punt saam. 201 00:09:07,640 --> 00:09:09,330 Hopelik sal jy die video gestop. 202 00:09:09,330 --> 00:09:12,950 >> So laat ons neem 'n blik op 'n voorbeeld van een moontlike verklaring. 203 00:09:12,950 --> 00:09:17,340 Dryf mult twee reals dryf x, y float. 204 00:09:17,340 --> 00:09:19,090 Die produk van twee drywende punt getalle, 205 00:09:19,090 --> 00:09:21,710 wat onthou is hoe ons verteenwoordig reële getalle 206 00:09:21,710 --> 00:09:26,770 of getalle met desimale waardes in c, gaan 'n drywende punt getal wees. 207 00:09:26,770 --> 00:09:28,570 Wanneer jy vermenigvuldig n desimale deur 'n desimale, 208 00:09:28,570 --> 00:09:30,460 gaan jy waarskynlik 'n desimale kry. 209 00:09:30,460 --> 00:09:31,960 Jy wil om dit 'n toepaslike naam. 210 00:09:31,960 --> 00:09:33,810 Vermenigvuldig twee reals lyk goed. 211 00:09:33,810 --> 00:09:36,620 Maar jy kan regtig noem dit mult twee dryf, of mult dryf. 212 00:09:36,620 --> 00:09:39,540 Iets soos dit, solank dit het 'n paar werklike betekenis aan wat 213 00:09:39,540 --> 00:09:41,469 hierdie swart box gaan doen. 214 00:09:41,469 --> 00:09:44,260 En weer, in hierdie geval, ons doen nie lyk enige betekenis geheg aan het 215 00:09:44,260 --> 00:09:46,390 om die name van die veranderlikes ons verby in, 216 00:09:46,390 --> 00:09:48,645 sodat ons net noem hulle x en y. 217 00:09:48,645 --> 00:09:51,020 Nou as jy hulle iets roep anders, dit is heeltemal fyn. 218 00:09:51,020 --> 00:09:53,310 In werklikheid, as jy het hierdie verklaring plaas 219 00:09:53,310 --> 00:09:55,450 met behulp van die dubbelspel plaas van dryf, as jy onthou 220 00:09:55,450 --> 00:09:59,100 dat die dubbelspel is 'n ander manier om meer presies 221 00:09:59,100 --> 00:10:02,330 spesifiseer reële getalle of drywende punt veranderlikes. 222 00:10:02,330 --> 00:10:03,620 Dit is te heeltemal fyn. 223 00:10:03,620 --> 00:10:04,670 Óf een van daardie sal goed wees. 224 00:10:04,670 --> 00:10:06,711 In werklikheid, daar is verskeie verskillende kombinasies 225 00:10:06,711 --> 00:10:08,410 maniere om hierdie funksie te verklaar. 226 00:10:08,410 --> 00:10:10,884 Maar dit is twee baie goeie kinders. 227 00:10:10,884 --> 00:10:12,550 Ons het 'n funksie verklaar, dit is 'n groot. 228 00:10:12,550 --> 00:10:15,700 Ons het die samesteller wat dit vertel is, wat ons gaan doen. 229 00:10:15,700 --> 00:10:17,630 Nou laat eintlik skryf daardie funksie. 230 00:10:17,630 --> 00:10:20,750 Kom ons gee dit 'n definisie, sodat die binnekant van die black box 231 00:10:20,750 --> 00:10:22,840 voorspelbare gedrag gebeur. 232 00:10:22,840 --> 00:10:26,270 In werklikheid, is ons twee reële vermenigvuldig getalle bymekaar, of by te voeg getalle 233 00:10:26,270 --> 00:10:29,760 saam of doen wat dit ookal is dat ons gevra ons funksie om te doen. 234 00:10:29,760 --> 00:10:32,780 >> So in werklikheid, laat ons probeer en definieer vermenigvuldig twee reals wat ons nou net 235 00:10:32,780 --> 00:10:35,350 gepraat oor 'n tweede gelede. 236 00:10:35,350 --> 00:10:38,560 Nou is die begin van 'n funksie definisie 237 00:10:38,560 --> 00:10:41,720 lyk amper presies dieselfde as 'n funksie verklaring. 238 00:10:41,720 --> 00:10:43,170 Ek het beide van hulle hier. 239 00:10:43,170 --> 00:10:47,770 Op die top is die funksie verklaring tipe, naam, kommas geskei argument 240 00:10:47,770 --> 00:10:49,410 lys, kommapunt. 241 00:10:49,410 --> 00:10:53,800 Die kommapunt dui daarop dat dit is 'n funksie verklaring. 242 00:10:53,800 --> 00:10:57,060 Die begin van die funksie definisie lyk byna presies 243 00:10:57,060 --> 00:11:03,790 dieselfde, tipe, naam, kommas geskei argument lys nie kommapunt, 244 00:11:03,790 --> 00:11:05,206 oop krullerige brace. 245 00:11:05,206 --> 00:11:07,580 Die oop krullerige brace, net soos ons het al te doen met die hoof, 246 00:11:07,580 --> 00:11:09,540 beteken dat ons nou besig om te definieer 247 00:11:09,540 --> 00:11:14,567 wat gebeur binne-in die swart blokkie wat Ons het besluit om mult twee reals noem. 248 00:11:14,567 --> 00:11:15,900 Hier is 'n manier om dit te implementeer. 249 00:11:15,900 --> 00:11:20,370 Ons kan sê, kan ons 'n nuwe verklaar veranderlike van tipe float genoem produk 250 00:11:20,370 --> 00:11:24,020 en wys dat veranderlike om die waarde x keer y. 251 00:11:24,020 --> 00:11:27,306 En dan terug produk. 252 00:11:27,306 --> 00:11:28,430 Wat beteken terugkeer beteken hier. 253 00:11:28,430 --> 00:11:31,090 Wel terugkeer is die pad dui ons dit is hoe 254 00:11:31,090 --> 00:11:33,400 ons verby die uitset terug uit. 255 00:11:33,400 --> 00:11:38,160 So iets terug te keer, is dieselfde as, dit is die opbrengs van die swart boks. 256 00:11:38,160 --> 00:11:40,732 So dit is hoe jy dit doen. 257 00:11:40,732 --> 00:11:42,190 Hier is 'n ander manier om dit te implementeer. 258 00:11:42,190 --> 00:11:45,050 Ons kon net terug x keer y. 259 00:11:45,050 --> 00:11:45,870 x is 'n float. 260 00:11:45,870 --> 00:11:46,660 y is 'n float. 261 00:11:46,660 --> 00:11:48,490 So x keer y is ook 'n float. 262 00:11:48,490 --> 00:11:50,750 Ons het nie eens nodig om skep 'n ander veranderlike. 263 00:11:50,750 --> 00:11:56,750 So dit is 'n ander manier om implementeer presies dieselfde swart boks. 264 00:11:56,750 --> 00:11:58,570 >> Nou neem 'n oomblik, die video weer breek, 265 00:11:58,570 --> 00:12:01,680 en probeer definieer voeg twee SY, wat is die ander funksie wat ons 266 00:12:01,680 --> 00:12:03,090 gepraat oor 'n oomblik gelede. 267 00:12:03,090 --> 00:12:06,440 Weer hier, het ek die funksie het verklaring, en so die kommapunt, 268 00:12:06,440 --> 00:12:08,420 en 'n oop krullerige brace en 'n geslote krullerige 269 00:12:08,420 --> 00:12:12,080 stut om aan te dui waar ons sal vul in die inhoud van voeg twee SY, 270 00:12:12,080 --> 00:12:15,530 sodat ons definieer die besonder gedrag in die swart boks. 271 00:12:15,530 --> 00:12:16,380 So breek die video. 272 00:12:16,380 --> 00:12:18,790 En neem soveel tyd as wat jy nodig het om te probeer en te definieer 273 00:12:18,790 --> 00:12:25,040 'n uitvoering van voeg twee SY, soos dat wanneer die funksie uitgange 'n waarde 274 00:12:25,040 --> 00:12:29,209 dit doen nie, in werklikheid, terugkeer die som van die twee insette. 275 00:12:29,209 --> 00:12:32,000 So, net soos die vorige voorbeeld, daar is verskillende maniere 276 00:12:32,000 --> 00:12:34,210 wat jy kan implementeer voeg twee SY. 277 00:12:34,210 --> 00:12:35,130 Hier is een. 278 00:12:35,130 --> 00:12:37,172 In hier in oranje het ek net het 'n paar comments-- 279 00:12:37,172 --> 00:12:38,880 Ek het net 'n paar bygevoeg kommentaar aan te dui 280 00:12:38,880 --> 00:12:41,400 wat gebeur op elke lyn van die kode. 281 00:12:41,400 --> 00:12:45,430 So verklaar ek 'n veranderlike genoem som van tipe int. 282 00:12:45,430 --> 00:12:47,279 Ek sê som gelyk aan 'n plus b. 283 00:12:47,279 --> 00:12:50,070 Dit is waar ons eintlik doen die werk te voeg A en B saam. 284 00:12:50,070 --> 00:12:51,850 En ek som terugkeer. 285 00:12:51,850 --> 00:12:56,460 En dit maak sin omdat som is 'n veranderlike van tipe int. 286 00:12:56,460 --> 00:13:00,180 En wat is die data tik dat hierdie funksie vertel my dit gaan uitvoer? 287 00:13:00,180 --> 00:13:00,680 Int. 288 00:13:00,680 --> 00:13:03,072 So ek terugkeer som, wat 'n heelgetal veranderlike. 289 00:13:03,072 --> 00:13:06,030 En dit maak sin gegee wat ons het verklaar en ons funksie gedefinieer 290 00:13:06,030 --> 00:13:07,320 te doen. 291 00:13:07,320 --> 00:13:09,700 >> Nou kan jy ook definieer die funksie op hierdie manier, 292 00:13:09,700 --> 00:13:15,260 int som gelyk aan 'n plus-b slaan dat eerste step-- en dan terug te keer som. 293 00:13:15,260 --> 00:13:17,760 Nou kan jy ook geïmplementeer dit op hierdie manier, 294 00:13:17,760 --> 00:13:19,180 wat ek hoogs beveel nie. 295 00:13:19,180 --> 00:13:22,540 Dit is sleg vir 'n styl ding en regtig 'n slegte ontwerp, 296 00:13:22,540 --> 00:13:24,420 maar dit doen nie, in werklikheid, die werk. 297 00:13:24,420 --> 00:13:30,199 As jy hierdie kode, wat int neem voeg slegte adder dot c, en dit gebruik. 298 00:13:30,199 --> 00:13:31,990 Dit beteken eintlik voeg twee heelgetalle saam. 299 00:13:31,990 --> 00:13:37,632 Dit is 'n baie swak implementering van hierdie spesifieke gedrag. 300 00:13:37,632 --> 00:13:38,340 Maar dit werk nie. 301 00:13:38,340 --> 00:13:41,200 Dit is net hier om te illustreer die punt dat ons nie regtig 302 00:13:41,200 --> 00:13:44,530 omgee wat gebeur binne- die swart boks, solank 303 00:13:44,530 --> 00:13:46,510 want dit het die uitset wat ons verwag. 304 00:13:46,510 --> 00:13:48,870 Dit is 'n swak ontwerp black box. 305 00:13:48,870 --> 00:13:53,801 Maar aan die einde van die dag, is dit nie steeds uitset die som van 'n plus b. 306 00:13:53,801 --> 00:13:54,300 Alles reg. 307 00:13:54,300 --> 00:13:56,320 So het ons funksies verklaar. 308 00:13:56,320 --> 00:13:57,490 En ons het gedefinieerde funksie. 309 00:13:57,490 --> 00:13:58,540 So dit is regtig 'n goeie. 310 00:13:58,540 --> 00:14:03,020 Nou laat ons begin om die funksies te gebruik dat ons verklaar het en ons het gedefinieer. 311 00:14:03,020 --> 00:14:05,960 Om 'n function-- dit is eintlik noem mooi easy-- al wat jy hoef te doen 312 00:14:05,960 --> 00:14:09,070 is dit slaag toepaslike argumente, argumente van die tipe data 313 00:14:09,070 --> 00:14:11,600 dat dit verwag, en dan is die terugkeer toewys 314 00:14:11,600 --> 00:14:15,190 waarde van daardie funksie en this-- verskoning me-- 315 00:14:15,190 --> 00:14:19,390 toewys die terugkeer waarde van daardie funksie om iets van die korrekte tipe. 316 00:14:19,390 --> 00:14:22,410 >> So laat ons 'n blik op in die praktyk in 'n lêer 317 00:14:22,410 --> 00:14:27,730 genoem adder 1 dot c, wat Ek het in my cs50 IDE. 318 00:14:27,730 --> 00:14:31,042 So hier is adder 1 dot c. 319 00:14:31,042 --> 00:14:33,500 Aan die begin jy sien ek my sluit, pond sluit, 320 00:14:33,500 --> 00:14:35,460 standaard IO en cs50 dot h. 321 00:14:35,460 --> 00:14:37,700 En dan het ek my funksie verklaring. 322 00:14:37,700 --> 00:14:39,570 Dit is hier waar ek is vertel die samesteller Ek is 323 00:14:39,570 --> 00:14:42,850 gaan skryf van 'n funksie genoem voeg twee SY. 324 00:14:42,850 --> 00:14:45,780 Dit gaan 'n uitset heelgetal tipe veranderlike. 325 00:14:45,780 --> 00:14:47,360 Dit is wat hierdie deel is reg hier. 326 00:14:47,360 --> 00:14:51,950 En dan het ek twee insette om dit 'n en b, wat elk 'n heelgetal is. 327 00:14:51,950 --> 00:14:58,250 Binnekant van hoof, vra ek die gebruiker insette deur te sê, gee my 'n heelgetal. 328 00:14:58,250 --> 00:15:01,040 En hulle word gevra om te vergeet int, wat is 'n funksie wat 329 00:15:01,040 --> 00:15:03,240 is ingesluit in die cs50 biblioteek. 330 00:15:03,240 --> 00:15:07,660 En wat kry gestoor in x, 'n heelgetal veranderlike. 331 00:15:07,660 --> 00:15:09,886 >> Hulle dan gevra ons vir 'n ander heelgetal. 332 00:15:09,886 --> 00:15:13,070 Ons kry 'n ander heelgetal en bêre dit in y. 333 00:15:13,070 --> 00:15:17,990 En dan, hier op die lyn 28, is waar ons ons funksie oproep. 334 00:15:17,990 --> 00:15:23,770 Ons sê, int z gelykes voeg 2 x SY komma y. 335 00:15:23,770 --> 00:15:25,980 Het jy sien waarom dit maak sin? 336 00:15:25,980 --> 00:15:29,710 x is 'n soort heelgetalveranderlike en y is 'n soort heelgetalveranderlike. 337 00:15:29,710 --> 00:15:31,220 So dit is goed. 338 00:15:31,220 --> 00:15:34,570 Dit sin maak met wat ons funksie verklaring op die lyn 17 lyk. 339 00:15:34,570 --> 00:15:38,300 Die kommas geskei lys insette verwag twee heelgetalle, a en b. 340 00:15:38,300 --> 00:15:40,300 In daardie geval, kan ons noem hulle wat ons wil. 341 00:15:40,300 --> 00:15:42,300 Hy verwag net twee heelgetalle. 342 00:15:42,300 --> 00:15:44,930 En x 'n heelgetal is en y 'n heelgetal is. 343 00:15:44,930 --> 00:15:45,640 Wat werk. 344 00:15:45,640 --> 00:15:48,680 >> En ons weet dat funksie gaan uitset n heelgetalle as well. 345 00:15:48,680 --> 00:15:51,290 En so is ons die stoor van die uitset van die funksie, 346 00:15:51,290 --> 00:15:56,050 voeg twee SY, in 'n soort heelgetal veranderlike, wat ons roeping z. 347 00:15:56,050 --> 00:16:01,980 En dan kan ons sê, die som van persent i en persent i is persent i. 348 00:16:01,980 --> 00:16:06,210 onderskeidelik x, y en z vul die persent i se. 349 00:16:06,210 --> 00:16:08,334 Wat is die definisie van voeg twee SY lyk? 350 00:16:08,334 --> 00:16:09,125 Dit is redelik eenvoudig. 351 00:16:09,125 --> 00:16:11,270 Dit is een van die mense wat ons net gesien 'n tweede gelede 352 00:16:11,270 --> 00:16:14,390 int som gelyk aan 'n plus b terugkeer som. 353 00:16:14,390 --> 00:16:15,420 Werk dit? 354 00:16:15,420 --> 00:16:17,270 Kom ons stoor die lêer. 355 00:16:17,270 --> 00:16:22,080 En dan af hier op my terminale Ek gaan adder 1 maak, 356 00:16:22,080 --> 00:16:23,000 en ek skoon my skerm. 357 00:16:23,000 --> 00:16:25,791 Ek gaan om te vergroot, want ek weet dit is 'n bietjie moeilik om te sien. 358 00:16:25,791 --> 00:16:31,520 359 00:16:31,520 --> 00:16:33,770 >> Sodat ons hierdie program as adder 1 stel. 360 00:16:33,770 --> 00:16:37,910 So kan ons dot streep adder 1 doen nie. 361 00:16:37,910 --> 00:16:40,060 Gee my 'n heelgetal, 10. 362 00:16:40,060 --> 00:16:42,380 Gee my 'n ander heelgetal, 20. 363 00:16:42,380 --> 00:16:45,200 Die som van 10 en 20 is 30. 364 00:16:45,200 --> 00:16:47,615 So het ons 'n suksesvolle funksie oproep. 365 00:16:47,615 --> 00:16:55,820 Jy kan die funksie weer uit te voer, negatiewe 10, 17 som van negatiewe 10 en 17 is 7. 366 00:16:55,820 --> 00:16:57,120 Hierdie funksie werk. 367 00:16:57,120 --> 00:16:59,240 Dit het die gedrag dat ons verwag dat dit. 368 00:16:59,240 --> 00:17:03,610 En so het ons 'n suksesvolle gemaak funksie, definisie, verklaring, 369 00:17:03,610 --> 00:17:07,288 en 'n suksesvolle funksie oproep. 370 00:17:07,288 --> 00:17:09,079 Paar diverse punte oor funksies 371 00:17:09,079 --> 00:17:10,611 voordat ons sluit hierdie afdeling. 372 00:17:10,611 --> 00:17:12,319 Onthou van ons bespreking van tipes data, 373 00:17:12,319 --> 00:17:16,109 voorheen, wat funksioneer kan soms nie insette te neem. 374 00:17:16,109 --> 00:17:17,930 As dit die geval is, is ons verklaar dat die funksie 375 00:17:17,930 --> 00:17:19,788 as 'n leemte argument lys. 376 00:17:19,788 --> 00:17:21,579 Het jy onthou wat die mees algemene funksie 377 00:17:21,579 --> 00:17:25,036 ons het so ver dat neem gesien 'n leemte argument lys is? 378 00:17:25,036 --> 00:17:27,300 Dit is die hoof. 379 00:17:27,300 --> 00:17:30,850 Onthou ook dat funksie soms nie eintlik 'n uitset. 380 00:17:30,850 --> 00:17:34,210 In daardie geval, ons verklaar die funksie as 'n soort leemte terugkeer. 381 00:17:34,210 --> 00:17:37,880 Kom ons sluit hierdie artikel deur aanpak van 'n praktyk probleem. 382 00:17:37,880 --> 00:17:39,900 >> So hier is die uitgelê probleem. 383 00:17:39,900 --> 00:17:43,630 Ek wil hê jy moet 'n funksie te skryf genoem geldig driehoek. 384 00:17:43,630 --> 00:17:47,410 Wat hierdie funksie moet doen is neem drie reële getalle 385 00:17:47,410 --> 00:17:51,930 wat verteenwoordig die lengtes van die drie kante van 'n driehoek as sy parameters, 386 00:17:51,930 --> 00:17:54,550 of sy argumente, of sy inputs-- ander stel sinonieme 387 00:17:54,550 --> 00:17:57,340 dat jy kan teëkom. 388 00:17:57,340 --> 00:18:01,120 Hierdie funksie moet óf uitset waar of vals 389 00:18:01,120 --> 00:18:04,960 afhangende van of die drie lengtes in staat is om die maak van 'n driehoek. 390 00:18:04,960 --> 00:18:09,930 Onthou jy die tipe data wat ons gebruik om aan te dui waar of vals? 391 00:18:09,930 --> 00:18:11,436 Nou hoe doen jy dit te implementeer? 392 00:18:11,436 --> 00:18:13,810 Wel weet daar is 'n paar reëls rakende driehoeke 393 00:18:13,810 --> 00:18:15,480 wat eintlik nuttig om te weet. 394 00:18:15,480 --> 00:18:18,292 'N Driehoek kan slegs kante met positiewe lengte. 395 00:18:18,292 --> 00:18:19,000 Dit maak sin. 396 00:18:19,000 --> 00:18:21,432 Jy is waarskynlik sê, duh. 397 00:18:21,432 --> 00:18:23,390 Die ander ding om daarop te let al is, is dat die som 398 00:18:23,390 --> 00:18:25,484 van die lengtes van enige twee kante van die driehoek 399 00:18:25,484 --> 00:18:27,650 moet groter as die wees lengte van die derde sy. 400 00:18:27,650 --> 00:18:28,690 Dit is eintlik waar. 401 00:18:28,690 --> 00:18:34,150 Jy kan nie 'n driehoek van kante 1, 2 en 4, byvoorbeeld, omdat 1 plus 2 402 00:18:34,150 --> 00:18:36,270 is nie groter as 4. 403 00:18:36,270 --> 00:18:38,870 So dit is die reëls wat bepaal of die drie 404 00:18:38,870 --> 00:18:42,740 insette kan verstaanbaar vorm 'n driehoek. 405 00:18:42,740 --> 00:18:46,360 So neem 'n paar minute en verklaar en dan definieer 406 00:18:46,360 --> 00:18:49,810 hierdie funksie genoem geldig driehoek, soos dat dit eintlik 407 00:18:49,810 --> 00:18:51,650 het die hier gespesifiseer gedrag. 408 00:18:51,650 --> 00:18:57,030 >> Dit sal uitloop waar as die drie kante in staat is om uit 'n driehoek, 409 00:18:57,030 --> 00:19:01,950 en valse anders Gereed om te sien hoe jy gedoen het? 410 00:19:01,950 --> 00:19:04,650 Hier is een implementering geldige driehoek. 411 00:19:04,650 --> 00:19:05,770 Dit is nie die enigste een. 412 00:19:05,770 --> 00:19:07,770 Joune dalk effens verskil. 413 00:19:07,770 --> 00:19:11,040 Maar hierdie een nie, in werklikheid, het die gedrag wat ons verwag. 414 00:19:11,040 --> 00:19:14,450 Verklaar ons ons funksie by die heel boonste, Bool geldig driehoek 415 00:19:14,450 --> 00:19:16,630 dryf x float y float z. 416 00:19:16,630 --> 00:19:18,930 So weer, hierdie funksie neem drie reële getalle 417 00:19:18,930 --> 00:19:22,280 as sy argumente, swaai punt waarde veranderlikes, 418 00:19:22,280 --> 00:19:26,510 en uitgange 'n ware of vals waarde, wat 'n Boole, onthou. 419 00:19:26,510 --> 00:19:28,660 So dit is waarom die tipe opbrengs Bool. 420 00:19:28,660 --> 00:19:30,016 Dan is die funksie definieer ons. 421 00:19:30,016 --> 00:19:33,140 Eerste ding wat ons doen, is om seker te dat al die kante is positief. 422 00:19:33,140 --> 00:19:37,010 As x is minder as of gelyk 0, of indien y is gelyk aan 0, 423 00:19:37,010 --> 00:19:41,050 of as z minder as of gelyk aan 0, dit kan nie moontlik 'n driehoek. 424 00:19:41,050 --> 00:19:42,380 Hulle het nie 'n positiewe kante. 425 00:19:42,380 --> 00:19:45,790 En so kan ons terugkeer valse in daardie situasie. 426 00:19:45,790 --> 00:19:49,010 Volgende, gaan ons om seker te maak dat elke paar insette 427 00:19:49,010 --> 00:19:51,830 is groter as die derde een. 428 00:19:51,830 --> 00:19:54,530 >> So as x plus y minder as of gelyk aan Z, 429 00:19:54,530 --> 00:19:57,060 of indien x plus z minder as of gelyk aan y, 430 00:19:57,060 --> 00:20:01,730 of as y plus z minder as of gelyk aan x, wat ook nie 'n geldige driehoek. 431 00:20:01,730 --> 00:20:03,800 So het ons weer terug onwaar. 432 00:20:03,800 --> 00:20:06,900 Veronderstelling ons albei van die tjeks geslaag al is, dan kan ons ware terugkeer. 433 00:20:06,900 --> 00:20:09,440 Omdat die drie kante in staat is om returning-- 434 00:20:09,440 --> 00:20:11,647 van die skep van 'n geldige driehoek. 435 00:20:11,647 --> 00:20:12,230 En dit is dit. 436 00:20:12,230 --> 00:20:13,830 Jy het nou verklaar en omskryf word. 437 00:20:13,830 --> 00:20:17,330 En jy kan nou in staat wees om gebruik en noem hierdie funksie. 438 00:20:17,330 --> 00:20:19,470 Goeie werk. 439 00:20:19,470 --> 00:20:20,650 Ek is Doug Lloyd. 440 00:20:20,650 --> 00:20:22,820 Dit is cs50. 441 00:20:22,820 --> 00:20:24,340