1 00:00:00,000 --> 00:00:04,664 2 00:00:04,664 --> 00:00:05,580 DOUG LLOYD: Oké. 3 00:00:05,580 --> 00:00:08,877 Dus laten we nu aan te pakken een echt groot onderwerp, functies. 4 00:00:08,877 --> 00:00:11,460 Tot nu toe tijdens alle programma's die we hebben schrijven 5 00:00:11,460 --> 00:00:12,969 zijn geschreven binnenkant van de belangrijkste. 6 00:00:12,969 --> 00:00:14,260 Ze zijn vrij eenvoudig programma. 7 00:00:14,260 --> 00:00:16,940 U hoeft niet om al deze hebben takken en dingen gaande. 8 00:00:16,940 --> 00:00:18,773 We kunnen gewoon fit het allemaal binnenzijde van de belangrijkste en 9 00:00:18,773 --> 00:00:20,407 krijgt niet erg overweldigend. 10 00:00:20,407 --> 00:00:22,990 Maar als de cursus gaat op en als je begint om programma's te ontwikkelen 11 00:00:22,990 --> 00:00:26,260 onafhankelijk van elkaar, zijn ze waarschijnlijk gaan om te beginnen met een veel meer dan 10 krijgen 12 00:00:26,260 --> 00:00:27,200 of 15 lijnen. 13 00:00:27,200 --> 00:00:31,400 Je zou kunnen honderden of duizenden krijgen of tienduizenden regels code. 14 00:00:31,400 --> 00:00:34,690 En het is echt niet die gekke gedachte. 15 00:00:34,690 --> 00:00:39,720 Als zodanig is het waarschijnlijk geen goed idee alles binnenin main houden. 16 00:00:39,720 --> 00:00:43,240 Het kan een beetje moeilijk te vinden wat je zoekt als je dat doet. 17 00:00:43,240 --> 00:00:47,040 >> Gelukkig, hoewel C, en vrij veel elke andere programmeertaal die 18 00:00:47,040 --> 00:00:50,386 misschien met werken, laat wij functies schrijven. 19 00:00:50,386 --> 00:00:52,260 En ik ga gewoon neem snel opzij hier 20 00:00:52,260 --> 00:00:54,971 te vermelden dat functies is een gebied van de informatica. 21 00:00:54,971 --> 00:00:57,970 En je zult nog veel meer van hen op te zien verschillende punten in de loop 22 00:00:57,970 --> 00:00:59,290 en als je verder op. 23 00:00:59,290 --> 00:01:02,280 Waar er een heleboel synoniemen voor hetzelfde woord. 24 00:01:02,280 --> 00:01:03,390 Dus noemen we de functies. 25 00:01:03,390 --> 00:01:05,980 Maar je zou ook hen te horen genoemd procedures 26 00:01:05,980 --> 00:01:09,570 of methoden, in het bijzonder, als je ooit gedaan een object georiënteerd programmeren 27 00:01:09,570 --> 00:01:11,950 before-- en maak je geen zorgen Als u nog niet, niet 28 00:01:11,950 --> 00:01:14,280 een grote Deal-- maar in audit georiënteerde talen 29 00:01:14,280 --> 00:01:16,129 vaak genoemd methoden. 30 00:01:16,129 --> 00:01:17,670 Soms zijn ze subroutines genoemd. 31 00:01:17,670 --> 00:01:20,690 Maar ze echt allemaal verwijzen dezelfde basisgedachte. 32 00:01:20,690 --> 00:01:22,480 >> Laten we eens kijken wat dat idee is. 33 00:01:22,480 --> 00:01:23,310 Wat is een functie? 34 00:01:23,310 --> 00:01:26,470 Ook een functie is echt niets meer dan een black box. 35 00:01:26,470 --> 00:01:31,430 Een zwarte doos die een reeks van nul heeft of meer ingangen en een uitgang. 36 00:01:31,430 --> 00:01:33,420 Dus bijvoorbeeld, deze kan een functie zijn. 37 00:01:33,420 --> 00:01:35,510 Dit is een functie genaamd func. 38 00:01:35,510 --> 00:01:39,330 En er zijn drie ingangen a, b en c. 39 00:01:39,330 --> 00:01:42,580 En in die black box, we weet niet precies wat het doet, 40 00:01:42,580 --> 00:01:45,100 maar verwerkt de inputs op een bepaalde manier en dan 41 00:01:45,100 --> 00:01:48,680 geeft een uitgang, in dit geval, z. 42 00:01:48,680 --> 00:01:50,504 Nu het een beetje te maken minder abstract, we 43 00:01:50,504 --> 00:01:52,420 kan misschien zeggen dat we een functie genaamd 44 00:01:52,420 --> 00:01:58,750 toevoegen dat duurt drie ingangen a, b, en c en verwerkt de uitvoer op een bepaalde manier 45 00:01:58,750 --> 00:02:01,010 in de zwarte doos aan produceren een uitgang. 46 00:02:01,010 --> 00:02:05,190 Dus in dit geval, als add neemt 3, 6, en 7. 47 00:02:05,190 --> 00:02:07,020 Ergens in de add-functie, zouden we 48 00:02:07,020 --> 00:02:09,750 verwachten dat ze bij elkaar worden opgeteld de output produceren die 49 00:02:09,750 --> 00:02:13,220 is 3 plus 6 plus 7 of 16. 50 00:02:13,220 --> 00:02:17,940 >> Ook u een functie genaamd hebben mult twee ingangen a en b neemt, 51 00:02:17,940 --> 00:02:21,070 verwerkt daar op een zodanige manier dat de uitgang van de functie 52 00:02:21,070 --> 00:02:22,920 is het product van de twee invoeren. 53 00:02:22,920 --> 00:02:25,080 De twee ingangen met elkaar vermenigvuldigd. 54 00:02:25,080 --> 00:02:29,150 4 en 5 wordt doorgegeven aan mult, er iets gebeurt, de output we verwachten 55 00:02:29,150 --> 00:02:31,090 is 20. 56 00:02:31,090 --> 00:02:32,507 Waarom hebben we noemen het een black box? 57 00:02:32,507 --> 00:02:34,840 Nou als we niet het schrijven van de functioneert onszelf, die 58 00:02:34,840 --> 00:02:36,869 we hebben gedaan nogal een beetje zo ver CS50. 59 00:02:36,869 --> 00:02:39,910 We hebben druk f gezien, bijvoorbeeld, die is een functie die we niet schrijven 60 00:02:39,910 --> 00:02:42,305 onszelf, maar we gebruik maken van alle tijd. 61 00:02:42,305 --> 00:02:44,180 Als we niet schrijven de functies onszelf, 62 00:02:44,180 --> 00:02:48,450 we niet echt nodig om te weten hoe het is daadwerkelijk ten uitvoer gelegd onder de motorkap. 63 00:02:48,450 --> 00:02:51,710 >> Dus bijvoorbeeld de zwarte doos I gewoon toonde u voor vermenigvuldiging, 64 00:02:51,710 --> 00:02:53,740 mult a, b kan worden defined-- en dit is slechts 65 00:02:53,740 --> 00:02:57,902 sommige pseudocode-- zou kunnen zijn gedefinieerd als output een keer b. 66 00:02:57,902 --> 00:02:58,860 Dat zinvol, rechts. 67 00:02:58,860 --> 00:03:01,370 Als we een functie genaamd mult dat twee ingangen neemt. 68 00:03:01,370 --> 00:03:04,750 We verwachten dat de output zou zijn de twee ingangen met elkaar vermenigvuldigd, 69 00:03:04,750 --> 00:03:06,240 a keer b. 70 00:03:06,240 --> 00:03:09,170 Mult maar kan ook geïmplementeerd als dit, 71 00:03:09,170 --> 00:03:13,150 We hebben een teller variabele krijgen set binnen van mult op 0. 72 00:03:13,150 --> 00:03:18,000 En dan is dit proces herhalen we b keer toe te voegen aan een teller. 73 00:03:18,000 --> 00:03:24,270 Bijvoorbeeld, als we vermenigvuldigen 3a door 5b, kunnen we zeggen teller op 0, 74 00:03:24,270 --> 00:03:27,700 herhaal vijf keer, voeg 3 tot teller. 75 00:03:27,700 --> 00:03:34,490 Dus beginnen we op 0 en dan doen we Dit vijf maal 3, 6, 9, 12, 15. 76 00:03:34,490 --> 00:03:37,500 Het is het zelfde resultaat. We nog steeds 3 keer 5 net 77 00:03:37,500 --> 00:03:39,500 de uitvoering verschilt. 78 00:03:39,500 --> 00:03:41,490 >> Dat is wat we bedoelen als we zeggen dat een zwarte doos. 79 00:03:41,490 --> 00:03:44,406 Het betekent gewoon dat we niet echt schelen hoe het wordt uitgevoerd onder de motorkap 80 00:03:44,406 --> 00:03:46,170 Zolang de output is wat we verwachten. 81 00:03:46,170 --> 00:03:49,045 In feite, dat is een deel van het contract gebruiken functies, met name 82 00:03:49,045 --> 00:03:50,630 functies die anderen schrijven. 83 00:03:50,630 --> 00:03:53,980 Het gedrag zal altijd typisch, onvoorspelbaar te zijn 84 00:03:53,980 --> 00:03:55,420 op basis van de naam van de functie. 85 00:03:55,420 --> 00:03:57,500 En dat is waarom het echt belangrijk wanneer je schrijft functies 86 00:03:57,500 --> 00:04:00,020 of wanneer andere mensen schrijven functies die u zou kunnen gebruiken, 87 00:04:00,020 --> 00:04:03,590 dat deze functies duidelijk, relatief voor de hand liggende namen, 88 00:04:03,590 --> 00:04:04,990 en zijn goed gedocumenteerd. 89 00:04:04,990 --> 00:04:08,560 Dat is zeker het geval voor de functie zoals print f. 90 00:04:08,560 --> 00:04:09,860 >> Dus waarom gebruiken we functies? 91 00:04:09,860 --> 00:04:14,220 Nou zoals ik al eerder zei, als we schrijven al onze code in van de belangrijkste dingen 92 00:04:14,220 --> 00:04:17,120 kan echt omslachtig en echt ingewikkeld. 93 00:04:17,120 --> 00:04:19,980 Functies laten ons de mogelijkheid om dingen te organiseren en te breken 94 00:04:19,980 --> 00:04:24,540 een zeer ingewikkeld probleem in veel beter beheersbaar sub-onderdelen. 95 00:04:24,540 --> 00:04:28,130 Functies ons ook in staat te stellen de coderende vereenvoudigen. 96 00:04:28,130 --> 00:04:33,080 Het is een stuk makkelijker om te debuggen 10 lijn functie ten opzichte van een 100 lijn 97 00:04:33,080 --> 00:04:35,890 functie of een 1000 lijn functie. 98 00:04:35,890 --> 00:04:38,400 Als we alleen maar te debuggen kleine stukjes tegelijk, 99 00:04:38,400 --> 00:04:42,110 of schrijf kleine stukjes op het moment, het maakt dat de programmering ervaring 100 00:04:42,110 --> 00:04:43,070 een stuk beter. 101 00:04:43,070 --> 00:04:44,910 Geloof me op dat ene. 102 00:04:44,910 --> 00:04:48,400 >> Ten slotte, als we schrijven functies we kunnen deze verschillende onderdelen hergebruiken. 103 00:04:48,400 --> 00:04:49,880 Functies kunnen worden gerecycled. 104 00:04:49,880 --> 00:04:51,880 Ze kunnen worden gebruikt in een programma of andere. 105 00:04:51,880 --> 00:04:53,713 Je hebt al geschreven de functie, alles wat je 106 00:04:53,713 --> 00:04:56,530 hoeft te doen is vertellen dat programma waar die functie te vinden. 107 00:04:56,530 --> 00:04:59,680 We zijn recycling en het gebruik van printen f meer dan 40 jaar. 108 00:04:59,680 --> 00:05:02,150 Maar het was slechts één keer geschreven. 109 00:05:02,150 --> 00:05:04,270 Vrij nuttig, rechts. 110 00:05:04,270 --> 00:05:04,830 Prima. 111 00:05:04,830 --> 00:05:06,040 Dus functies zijn geweldig. 112 00:05:06,040 --> 00:05:06,860 We weten dat. 113 00:05:06,860 --> 00:05:08,700 Laten we nu eens beginnen met het schrijven ze. 114 00:05:08,700 --> 00:05:10,830 Laten we beginnen met het krijgen ze in onze programma's. 115 00:05:10,830 --> 00:05:13,869 Om dat te doen, de eerste wat we doen is te verklaren van de functie. 116 00:05:13,869 --> 00:05:16,160 Wanneer u een functie declareren wat je eigenlijk doet 117 00:05:16,160 --> 00:05:18,900 vertelt de compiler, hey, maar dat je het weet, 118 00:05:18,900 --> 00:05:20,850 Ik ga schrijven een functie later 119 00:05:20,850 --> 00:05:22,987 en hier is wat het gaat eruit. 120 00:05:22,987 --> 00:05:24,820 De reden hiervoor is omdat compilers kan 121 00:05:24,820 --> 00:05:27,900 doe wat rare dingen als zien ze een set van symbolen 122 00:05:27,900 --> 00:05:29,560 dat ze niet vertrouwd zijn. 123 00:05:29,560 --> 00:05:33,000 Dus we geven de compiler een heads-up, ik ben het creëren van een functie 124 00:05:33,000 --> 00:05:35,492 en het gaat om dit te doen. 125 00:05:35,492 --> 00:05:38,450 Functie verklaringen over het algemeen als je bent het organiseren van uw code op een manier 126 00:05:38,450 --> 00:05:41,872 dat anderen in staat zal zijn begrijpen en gebruik maken van, 127 00:05:41,872 --> 00:05:44,330 je over het algemeen willen alle zetten van uw functie declaraties 128 00:05:44,330 --> 00:05:48,220 op de top van je code, rechts voordat u begint met het schrijven van de belangrijkste nog. 129 00:05:48,220 --> 00:05:50,770 En gemakkelijk, er is een zeer standaardformulier 130 00:05:50,770 --> 00:05:53,500 dat elke functie verklaring volgt. 131 00:05:53,500 --> 00:05:56,090 Ze zijn allemaal vrij veel uitzien. 132 00:05:56,090 --> 00:06:01,440 Er zijn drie delen van een functie verklaring, return type, naam, 133 00:06:01,440 --> 00:06:03,420 en de lijst met argumenten. 134 00:06:03,420 --> 00:06:07,180 >> Nu is de return type is wat voor soort variabele zal de functie-uitgang. 135 00:06:07,180 --> 00:06:10,710 Dus bijvoorbeeld, als we denken terug minuten geleden aan de vermenigvuldiging van twee 136 00:06:10,710 --> 00:06:15,690 getallen functie, wat we verwachten als Vermenigvuldigen we een integer van een integer 137 00:06:15,690 --> 00:06:18,502 de output zal zijn waarschijnlijk een integer, rechts. 138 00:06:18,502 --> 00:06:20,710 Vermenigvuldigd twee integers samen, krijg je een integer. 139 00:06:20,710 --> 00:06:24,167 Zodat de return type van die functie zou int. 140 00:06:24,167 --> 00:06:26,000 Naam is wat je wilt uw functie aan te roepen. 141 00:06:26,000 --> 00:06:29,330 Dit is waarschijnlijk het minst belangrijke deel van de functie verklaring 142 00:06:29,330 --> 00:06:30,827 in termen van functionaliteit. 143 00:06:30,827 --> 00:06:33,160 Maar is eigenlijk waarschijnlijk een van de belangrijkste onderdelen 144 00:06:33,160 --> 00:06:36,243 van de verklaring functie in termen te weten wat de functie eigenlijk 145 00:06:36,243 --> 00:06:37,120 doet. 146 00:06:37,120 --> 00:06:40,474 Als u de naam van uw functie f of g of h of mystery of iets dergelijks, 147 00:06:40,474 --> 00:06:42,765 ben je waarschijnlijk gaat krijgen een beetje struikelde up proberen 148 00:06:42,765 --> 00:06:44,650 om te onthouden wat die functies doen. 149 00:06:44,650 --> 00:06:47,880 Dus het is belangrijk om te geven uw betekenisvolle namen functie's. 150 00:06:47,880 --> 00:06:51,030 >> Ten slotte lijst met argumenten is de komma's gescheiden lijst 151 00:06:51,030 --> 00:06:55,260 alle ingangen uw functie, die elk een type en een naam. 152 00:06:55,260 --> 00:06:57,840 Dus niet alleen heb je te specificeren welk type variabele 153 00:06:57,840 --> 00:07:00,760 De functie wordt uitgang, u ook wilt opgeven 154 00:07:00,760 --> 00:07:07,694 wat voor soort en de aard van de variabelen functie accepteren als invoer. 155 00:07:07,694 --> 00:07:08,860 Dus laten we hier een voorbeeld. 156 00:07:08,860 --> 00:07:10,220 Laten we een kijkje nemen een concretere. 157 00:07:10,220 --> 00:07:13,130 Dus hier is een voorbeeld van een functie verklaring voor een functie die 158 00:07:13,130 --> 00:07:14,925 zou twee getallen bij elkaar optelt. 159 00:07:14,925 --> 00:07:17,800 De som van twee getallen gaat zijn een integer als goed, zoals we net 160 00:07:17,800 --> 00:07:18,450 besproken. 161 00:07:18,450 --> 00:07:21,610 En dus is de return type, Hier in groen, zou int. 162 00:07:21,610 --> 00:07:25,190 Dat alleen maar vertelt ons dat twee ints toevoegen gaat, aan het eind van de dag, 163 00:07:25,190 --> 00:07:28,799 uitgang, of spuug het terug naar ons, een integer. 164 00:07:28,799 --> 00:07:31,590 Gezien wat deze functie doet wij willen geven het een betekenisvolle naam. 165 00:07:31,590 --> 00:07:33,630 Voeg twee ints lijkt passend is 166 00:07:33,630 --> 00:07:37,574 we nemen twee integers als input en hopelijk ze samen te voegen. 167 00:07:37,574 --> 00:07:40,240 Het is misschien een beetje omslachtig naam en eerlijk gezegd deze functie 168 00:07:40,240 --> 00:07:42,430 is waarschijnlijk niet nodig want we hebben de toevoeging 169 00:07:42,430 --> 00:07:46,310 operator, als u zich herinneren van onze bespreking van de exploitanten, die eerder. 170 00:07:46,310 --> 00:07:49,650 Maar laten we zeggen omwille van argument dat deze functie is handig 171 00:07:49,650 --> 00:07:52,860 en zo zullen we noemen het toevoegen van twee gehele getallen. 172 00:07:52,860 --> 00:07:55,230 Tot slot, deze functie neemt twee ingangen. 173 00:07:55,230 --> 00:07:56,960 Die elk een integer. 174 00:07:56,960 --> 00:07:59,900 Dus hebben we dit komma gescheiden lijst van inputs. 175 00:07:59,900 --> 00:08:02,830 Nu over het algemeen willen we een naam te geven aan elk van hen 176 00:08:02,830 --> 00:08:05,070 zodat ze kunnen worden gebruikt binnen de functie. 177 00:08:05,070 --> 00:08:07,180 De namen zijn niet erg belangrijk. 178 00:08:07,180 --> 00:08:11,400 >> In dit geval hebben we niet noodzakelijkerwijs enige betekenis aan hen gehecht. 179 00:08:11,400 --> 00:08:13,140 Dus we kunnen gewoon bellen ze a en b. 180 00:08:13,140 --> 00:08:14,257 Dat is helemaal prima. 181 00:08:14,257 --> 00:08:16,090 Als u echter, vind je uzelf in een situatie 182 00:08:16,090 --> 00:08:19,497 waarbij de namen van de variabelen misschien wel belangrijk zijn, 183 00:08:19,497 --> 00:08:21,830 je zou willen om ze te bellen iets anders dan a en b 184 00:08:21,830 --> 00:08:24,701 ze iets meer te geven symbolisch zinvol. 185 00:08:24,701 --> 00:08:27,700 Maar in dit geval hebben we niet echt weet iets anders over de functie. 186 00:08:27,700 --> 00:08:29,320 We willen gewoon twee getallen toe te voegen. 187 00:08:29,320 --> 00:08:32,429 Dus we zullen gewoon bellen deze getallen a en b. 188 00:08:32,429 --> 00:08:33,990 Dat is een voorbeeld. 189 00:08:33,990 --> 00:08:36,287 >> Waarom ga je niet een tweede te nemen na te denken over deze, 190 00:08:36,287 --> 00:08:38,870 hoe zou je een functie schrijven verklaring voor een functie die 191 00:08:38,870 --> 00:08:42,940 vermenigvuldigt twee floating point getallen? 192 00:08:42,940 --> 00:08:45,910 Weet je nog wat een floating point nummer is? 193 00:08:45,910 --> 00:08:48,120 Wat zou deze functie verklaring eruit? 194 00:08:48,120 --> 00:08:53,330 Ik eigenlijk raden je de video pauzeren hier en neem hoeveel tijd je nodig hebt. 195 00:08:53,330 --> 00:08:55,521 Denk na over wat dit functie verklaring zou zijn? 196 00:08:55,521 --> 00:08:56,770 Wat zou het soort terugkeer? 197 00:08:56,770 --> 00:08:58,103 Wat zou een betekenisvolle naam zijn? 198 00:08:58,103 --> 00:08:59,580 Wat zou de ingangen zijn? 199 00:08:59,580 --> 00:09:03,190 Dus waarom ga je niet hier de video te pauzeren en schrijf-up functie verklaring 200 00:09:03,190 --> 00:09:07,640 een functie die zou vermenigvuldigen twee floating point getallen samen. 201 00:09:07,640 --> 00:09:09,330 Hopelijk u de video gepauzeerd. 202 00:09:09,330 --> 00:09:12,950 >> Dus laten we een kijkje nemen op een voorbeeld van een mogelijke verklaring. 203 00:09:12,950 --> 00:09:17,340 Zweven mult twee reals float x, y zweven. 204 00:09:17,340 --> 00:09:19,090 Het product van beide floating point getallen, 205 00:09:19,090 --> 00:09:21,710 die herinneren aan zijn hoe we vertegenwoordigen reële getallen 206 00:09:21,710 --> 00:09:26,770 of nummers met decimale waarden in c, gaat naar een floating point nummer. 207 00:09:26,770 --> 00:09:28,570 Wanneer u vermenigvuldigt een decimaal door een decimaal, 208 00:09:28,570 --> 00:09:30,460 je bent waarschijnlijk gaan om een ​​decimaal te krijgen. 209 00:09:30,460 --> 00:09:31,960 U wilt geven het een relevante naam. 210 00:09:31,960 --> 00:09:33,810 Vermenigvuldig twee reals lijkt in orde. 211 00:09:33,810 --> 00:09:36,620 Maar je kon echt noemen mult twee drijvers, of mult praalwagens. 212 00:09:36,620 --> 00:09:39,540 Iets dergelijks, zolang gaf enkele werkelijke betekenis aan wat 213 00:09:39,540 --> 00:09:41,469 Deze zwarte doos zou gaan doen. 214 00:09:41,469 --> 00:09:44,260 En nogmaals, in dit geval, we doen niet lijkt elke betekenis gehecht aan hebben 215 00:09:44,260 --> 00:09:46,390 de namen van de variabelen die we passeren, 216 00:09:46,390 --> 00:09:48,645 dus we noemen ze x en y. 217 00:09:48,645 --> 00:09:51,020 Nu als je ze iets te bellen anders, dat is helemaal prima. 218 00:09:51,020 --> 00:09:53,310 In feite, als je deed deze verklaring plaats 219 00:09:53,310 --> 00:09:55,450 met behulp van doubles plaats van drijvers, als je herinneren 220 00:09:55,450 --> 00:09:59,100 dat tweepersoonskamers zijn een ander manier om nauwkeuriger 221 00:09:59,100 --> 00:10:02,330 specificeren reële getallen of floating point variabelen. 222 00:10:02,330 --> 00:10:03,620 Dat is ook helemaal prima. 223 00:10:03,620 --> 00:10:04,670 Één van die zou fijn zijn. 224 00:10:04,670 --> 00:10:06,711 In feite zijn er diverse verschillende combinaties 225 00:10:06,711 --> 00:10:08,410 manieren om deze functie te verklaren. 226 00:10:08,410 --> 00:10:10,884 Maar dit zijn twee mooie goede. 227 00:10:10,884 --> 00:10:12,550 We hebben een functie verklaard, dat is geweldig. 228 00:10:12,550 --> 00:10:15,700 We hebben de compiler wat het gezegd wordt, wat we gaan doen. 229 00:10:15,700 --> 00:10:17,630 Laten we nu eigenlijk te schrijven die functie. 230 00:10:17,630 --> 00:10:20,750 Laten we het een definitie, zodat in de zwarte doos 231 00:10:20,750 --> 00:10:22,840 voorspelbaar gedrag gebeurt. 232 00:10:22,840 --> 00:10:26,270 In feite zijn er twee echte vermenigvuldigen getallen met elkaar, of het toevoegen van nummers 233 00:10:26,270 --> 00:10:29,760 samen, of het doen van wat het ook is dat we vroegen ons de functie te doen. 234 00:10:29,760 --> 00:10:32,780 >> Dus in feite, laten we proberen en definieer vermenigvuldigen twee reals die we zojuist 235 00:10:32,780 --> 00:10:35,350 sprak over een seconde geleden. 236 00:10:35,350 --> 00:10:38,560 Nu begin een functie-definitie 237 00:10:38,560 --> 00:10:41,720 ziet er bijna precies hetzelfde als een functie verklaring. 238 00:10:41,720 --> 00:10:43,170 Ik heb beiden hier. 239 00:10:43,170 --> 00:10:47,770 Bovenaan is de functie verklaring , naam, komma's gescheiden argumenten 240 00:10:47,770 --> 00:10:49,410 lijst, puntkomma. 241 00:10:49,410 --> 00:10:53,800 De puntkomma geeft aan dat dat is een functie declaratie. 242 00:10:53,800 --> 00:10:57,060 Het begin van de functie definitie ziet er bijna precies 243 00:10:57,060 --> 00:11:03,790 hetzelfde type, naam, komma's gescheiden lijst met argumenten, geen puntkomma, 244 00:11:03,790 --> 00:11:05,206 Open accolade. 245 00:11:05,206 --> 00:11:07,580 De open accolade, net zoals we hebben gedaan met de belangrijkste, 246 00:11:07,580 --> 00:11:09,540 betekent dat we nu beginnen te definiëren 247 00:11:09,540 --> 00:11:14,567 wat er gebeurt in de zwarte doos die hebben we besloten om mult twee reals noemen. 248 00:11:14,567 --> 00:11:15,900 Hier is een manier om het uit te voeren. 249 00:11:15,900 --> 00:11:20,370 We zouden kunnen zeggen, konden we een nieuwe te verklaren variabele van het type float genoemd product 250 00:11:20,370 --> 00:11:24,020 en wijst die variabele om de waarde x maal y. 251 00:11:24,020 --> 00:11:27,306 En dan terug product. 252 00:11:27,306 --> 00:11:28,430 Wat betekent de terugkeer hier bedoel. 253 00:11:28,430 --> 00:11:31,090 Goed rendement is de weg we geven dat is hoe 254 00:11:31,090 --> 00:11:33,400 we het passeren van de uitgang weer uit. 255 00:11:33,400 --> 00:11:38,160 Zo iets terug, is hetzelfde als, Dit is het uitgangssignaal van de zwarte doos. 256 00:11:38,160 --> 00:11:40,732 Dus dat is hoe je het doet. 257 00:11:40,732 --> 00:11:42,190 Hier is een andere manier om het te implementeren. 258 00:11:42,190 --> 00:11:45,050 We konden gewoon terug x maal y. 259 00:11:45,050 --> 00:11:45,870 x een float. 260 00:11:45,870 --> 00:11:46,660 y een float. 261 00:11:46,660 --> 00:11:48,490 Dus x maal y is een float. 262 00:11:48,490 --> 00:11:50,750 We niet eens nodig om maak een andere variabele. 263 00:11:50,750 --> 00:11:56,750 Dus dat is een andere manier om implementeren exact dezelfde zwarte doos. 264 00:11:56,750 --> 00:11:58,570 >> Neem nu een moment, de video opnieuw te pauzeren, 265 00:11:58,570 --> 00:12:01,680 en proberen en te definiëren voeg twee integers, dat de andere functie die we 266 00:12:01,680 --> 00:12:03,090 sprak over een moment geleden. 267 00:12:03,090 --> 00:12:06,440 Ook hier heb ik de functie gezet verklaring, en zo de puntkomma, 268 00:12:06,440 --> 00:12:08,420 en een open accolade en een gesloten krullend 269 00:12:08,420 --> 00:12:12,080 brace om aan te geven waar we zullen vullen de inhoud van de add twee gehele getallen, 270 00:12:12,080 --> 00:12:15,530 zodat we hier de specifieke gedrag in de zwarte doos. 271 00:12:15,530 --> 00:12:16,380 Dus pauzeren van de video. 272 00:12:16,380 --> 00:12:18,790 En neem zoveel tijd als je nodig hebt om te proberen en te bepalen 273 00:12:18,790 --> 00:12:25,040 een implementatie van voeg twee integers, zoals dat wanneer de functie voert een waarde, 274 00:12:25,040 --> 00:12:29,209 het, in feite, ruil de som van de twee invoeren. 275 00:12:29,209 --> 00:12:32,000 Dus net als het vorige voorbeeld, Er zijn verschillende manieren 276 00:12:32,000 --> 00:12:34,210 dat je zou kunnen implementeren voeg twee integers. 277 00:12:34,210 --> 00:12:35,130 Hier is een. 278 00:12:35,130 --> 00:12:37,172 Hier in oranje heb ik net wat comments-- 279 00:12:37,172 --> 00:12:38,880 Ik heb net een aantal extra commentaar te geven 280 00:12:38,880 --> 00:12:41,400 wat er gebeurt op elke regel code. 281 00:12:41,400 --> 00:12:45,430 Dus ik een variabele declareert genaamd som van het type int. 282 00:12:45,430 --> 00:12:47,279 Ik zeg bedrag komt overeen met een plus b. 283 00:12:47,279 --> 00:12:50,070 Dat is waar we eigenlijk mee bezig zijn het werk toe te voegen a en b samen. 284 00:12:50,070 --> 00:12:51,850 En ik som terug. 285 00:12:51,850 --> 00:12:56,460 En dat is logisch, want som is een variabele van het type int. 286 00:12:56,460 --> 00:13:00,180 En wat is het datatype dat dit functie vertelt me ​​dat het gaat om de productie? 287 00:13:00,180 --> 00:13:00,680 Int. 288 00:13:00,680 --> 00:13:03,072 Dus ik ben terug te keren bedrag, dat een integer variabele. 289 00:13:03,072 --> 00:13:06,030 En dat is logisch gezien wat we hebben verklaard en onze functie gedefinieerd 290 00:13:06,030 --> 00:13:07,320 Te doen. 291 00:13:07,320 --> 00:13:09,700 >> Nu kunt u ook definiëren de functie deze manier 292 00:13:09,700 --> 00:13:15,260 int som gelijk aan een plus B-- overslaan eerst step-- en dan terug bedrag. 293 00:13:15,260 --> 00:13:17,760 Nu kun je ook geïmplementeerd het op deze manier, 294 00:13:17,760 --> 00:13:19,180 die ik sterk niet aan te raden. 295 00:13:19,180 --> 00:13:22,540 Dit is slecht één stijl ding en echt slecht ontwerp, 296 00:13:22,540 --> 00:13:24,420 maar het doet in feite werken. 297 00:13:24,420 --> 00:13:30,199 Als u deze code, die is int nemen toe te voegen slecht adder punt c, en gebruik het. 298 00:13:30,199 --> 00:13:31,990 Het doet eigenlijk toe twee getallen met elkaar. 299 00:13:31,990 --> 00:13:37,632 Het is een zeer slechte uitvoering van dit gedrag. 300 00:13:37,632 --> 00:13:38,340 Maar het werkt. 301 00:13:38,340 --> 00:13:41,200 Het is gewoon hier om te illustreren het punt dat we niet echt 302 00:13:41,200 --> 00:13:44,530 schelen wat er gebeurt binnen de zwarte doos, zolang 303 00:13:44,530 --> 00:13:46,510 omdat het de output die we verwachten. 304 00:13:46,510 --> 00:13:48,870 Dit is een slecht ontworpen zwarte doos. 305 00:13:48,870 --> 00:13:53,801 Maar aan het eind van de dag, het doet nog steeds de output van de som van een plus b. 306 00:13:53,801 --> 00:13:54,300 Prima. 307 00:13:54,300 --> 00:13:56,320 Dus hebben we functies verklaard. 308 00:13:56,320 --> 00:13:57,490 En we hebben gedefinieerde functie. 309 00:13:57,490 --> 00:13:58,540 Dus dat is echt goed. 310 00:13:58,540 --> 00:14:03,020 Laten we nu eens beginnen om de functies te gebruiken dat we hebben verklaard en we hebben gedefinieerd. 311 00:14:03,020 --> 00:14:05,960 Om een ​​function-- het is eigenlijk noemen vrij easy-- alles wat je hoeft te doen 312 00:14:05,960 --> 00:14:09,070 is pas het passend argumenten, argumenten van het type data 313 00:14:09,070 --> 00:14:11,600 dat het verwacht, en dan is de return toewijzen 314 00:14:11,600 --> 00:14:15,190 waarde van die functie en dit-- excuus mij-- 315 00:14:15,190 --> 00:14:19,390 wijs de return waarde van die functie iets van het juiste type. 316 00:14:19,390 --> 00:14:22,410 >> Dus laten we eens een kijkje op Deze in de praktijk in een bestand 317 00:14:22,410 --> 00:14:27,730 riep adder 1 punt c, dat Ik heb in mijn CS50 IDE. 318 00:14:27,730 --> 00:14:31,042 Dus hier is adder 1 punt c. 319 00:14:31,042 --> 00:14:33,500 Aan het begin zie je ik heb mijn omvat, pond omvatten, 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 heb ik mijn functie verklaring. 322 00:14:37,700 --> 00:14:39,570 Dit is waar ik ben vertelt de compiler ik ben 323 00:14:39,570 --> 00:14:42,850 zal schrijven een functie genaamd voeg twee integers. 324 00:14:42,850 --> 00:14:45,780 Het gaat om de productie van een integer variabele. 325 00:14:45,780 --> 00:14:47,360 Dat is wat dit deel is hier. 326 00:14:47,360 --> 00:14:51,950 En dan heb ik twee ingangen om het een en b elk een geheel getal. 327 00:14:51,950 --> 00:14:58,250 Binnenkant van de belangrijkste, vraag ik de gebruiker ingang door te zeggen, geef me een integer. 328 00:14:58,250 --> 00:15:01,040 En ze wordt gevraagd om te vergeten int, die een functie 329 00:15:01,040 --> 00:15:03,240 is bij de CS50 bibliotheek. 330 00:15:03,240 --> 00:15:07,660 En dat wordt opgeslagen in x, een integer variabele. 331 00:15:07,660 --> 00:15:09,886 >> Ze dan vragen wij voor een integer. 332 00:15:09,886 --> 00:15:13,070 We krijgen nog een integer en op te slaan die in y. 333 00:15:13,070 --> 00:15:17,990 En dan, hier op lijn 28, is waar we onze functie-oproep. 334 00:15:17,990 --> 00:15:23,770 We zeggen, int z gelijken voeg 2 ints x komma y. 335 00:15:23,770 --> 00:15:25,980 Zie je waarom dit zinvol? 336 00:15:25,980 --> 00:15:29,710 x een integer type variabele en y een integer variabele. 337 00:15:29,710 --> 00:15:31,220 Dus dat is goed. 338 00:15:31,220 --> 00:15:34,570 Die zinvol met wat onze functie verklaring over de lijn 17 eruit ziet. 339 00:15:34,570 --> 00:15:38,300 De komma's gescheiden ingang lijst verwacht twee gehele getallen a en b. 340 00:15:38,300 --> 00:15:40,300 In dat geval kunnen we noemen ze wat we willen. 341 00:15:40,300 --> 00:15:42,300 Zij verwacht slechts twee getallen. 342 00:15:42,300 --> 00:15:44,930 En x een geheel getal is en y een geheel getal is. 343 00:15:44,930 --> 00:15:45,640 Dat werkt. 344 00:15:45,640 --> 00:15:48,680 >> En we weten dat de functie gaat output een integers ook. 345 00:15:48,680 --> 00:15:51,290 En zo zijn we het opslaan van de uitgang van de functie, 346 00:15:51,290 --> 00:15:56,050 voeg twee ints, in een integer variabele, die we bellen z. 347 00:15:56,050 --> 00:16:01,980 En dan kunnen we zeggen, de som van i procent en het percentage i procent i. 348 00:16:01,980 --> 00:16:06,210 respectievelijk x, y en z vullen die percent i's. 349 00:16:06,210 --> 00:16:08,334 Wat de definitie van voeg twee ints eruit? 350 00:16:08,334 --> 00:16:09,125 Het is vrij eenvoudig. 351 00:16:09,125 --> 00:16:11,270 Het is een van degenen die we zag net een tweede geleden, 352 00:16:11,270 --> 00:16:14,390 int som gelijk aan een plus b return som. 353 00:16:14,390 --> 00:16:15,420 Werkt dit? 354 00:16:15,420 --> 00:16:17,270 Laten we sla het bestand op. 355 00:16:17,270 --> 00:16:22,080 En dan naar beneden hier op mijn terminal Ik ga adder 1 te maken, 356 00:16:22,080 --> 00:16:23,000 en wis ik mijn scherm. 357 00:16:23,000 --> 00:16:25,791 Ik ga om te vergroten, omdat ik weet het is een beetje moeilijk te zien. 358 00:16:25,791 --> 00:16:31,520 359 00:16:31,520 --> 00:16:33,770 >> Dus we dit programma als adder 1 compileren. 360 00:16:33,770 --> 00:16:37,910 Dus we kunnen dot slash adder 1 doen. 361 00:16:37,910 --> 00:16:40,060 Geef me een integer, 10. 362 00:16:40,060 --> 00:16:42,380 Geef me nog een integer, 20. 363 00:16:42,380 --> 00:16:45,200 De som van 10 en 20 is 30. 364 00:16:45,200 --> 00:16:47,615 Zodat we een succesvolle functie oproep. 365 00:16:47,615 --> 00:16:55,820 U kunt de functie opnieuw uit te voeren, negatief 10, 17 som van negatieve 10 en 17 is 7. 366 00:16:55,820 --> 00:16:57,120 Deze functie werkt. 367 00:16:57,120 --> 00:16:59,240 Het heeft het gedrag dat wij verwachten dat het. 368 00:16:59,240 --> 00:17:03,610 En dus hebben we een succesvolle gemaakt functie, definitie, verklaring, 369 00:17:03,610 --> 00:17:07,288 en een succesvolle functie-oproep. 370 00:17:07,288 --> 00:17:09,079 Paar diversen punten over functies 371 00:17:09,079 --> 00:17:10,611 voordat we sluiten dit hoofdstuk. 372 00:17:10,611 --> 00:17:12,319 Herinneren van onze bespreking van data types, 373 00:17:12,319 --> 00:17:16,109 eerder, dat functioneert kan soms geen ingangen nemen. 374 00:17:16,109 --> 00:17:17,930 Als dat het geval is, hebben we verklaren de functie 375 00:17:17,930 --> 00:17:19,788 als het hebben van een leegte lijst met argumenten. 376 00:17:19,788 --> 00:17:21,579 Herinnert u zich wat de meest voorkomende functie 377 00:17:21,579 --> 00:17:25,036 we tot nu toe gezien dat neemt een leegte lijst met argumenten is? 378 00:17:25,036 --> 00:17:27,300 Het is de belangrijkste. 379 00:17:27,300 --> 00:17:30,850 Ook herinneren dat de functie soms eigenlijk niet over een uitgang. 380 00:17:30,850 --> 00:17:34,210 In dat geval, verklaren wij de functie als het hebben van een soort leegte return. 381 00:17:34,210 --> 00:17:37,880 Laten we sluiten dit hoofdstuk door aanpakken van een praktijk probleem. 382 00:17:37,880 --> 00:17:39,900 >> Dus hier is de aangelegd probleem. 383 00:17:39,900 --> 00:17:43,630 Ik wil dat je een functie schrijven genoemd geldige driehoek. 384 00:17:43,630 --> 00:17:47,410 Wat deze functie moet doen is neem drie reële getallen 385 00:17:47,410 --> 00:17:51,930 dat vertegenwoordigen de lengten van de drie zijden van een driehoek als parameters, 386 00:17:51,930 --> 00:17:54,550 of zijn argumenten, of zijn inputs-- andere set van synoniemen 387 00:17:54,550 --> 00:17:57,340 die u kunt tegenkomen. 388 00:17:57,340 --> 00:18:01,120 Deze functie moet ofwel uitgang waar of onwaar 389 00:18:01,120 --> 00:18:04,960 naargelang deze drie lengtes zijn in staat om een ​​driehoek. 390 00:18:04,960 --> 00:18:09,930 Herinnert u zich het soort gegevens dat we gebruikt om aan te geven waar of onwaar? 391 00:18:09,930 --> 00:18:11,436 Nu hoe doe je dit uit te voeren? 392 00:18:11,436 --> 00:18:13,810 Nou weet dat er een paar van de regels met betrekking tot driehoeken 393 00:18:13,810 --> 00:18:15,480 die eigenlijk pas kan komen. 394 00:18:15,480 --> 00:18:18,292 Een driehoek kan alleen kanten met positieve lengte. 395 00:18:18,292 --> 00:18:19,000 Dat is logisch. 396 00:18:19,000 --> 00:18:21,432 Je bent waarschijnlijk zeggen, duh. 397 00:18:21,432 --> 00:18:23,390 Het andere ding om op te merken echter dat de som 398 00:18:23,390 --> 00:18:25,484 van de lengte van elke twee zijden van de driehoek 399 00:18:25,484 --> 00:18:27,650 moet groter zijn dan de lengte van de derde zijde. 400 00:18:27,650 --> 00:18:28,690 Dat is eigenlijk waar. 401 00:18:28,690 --> 00:18:34,150 Je kunt niet een driehoek van zijden 1, 2 en 4, bijvoorbeeld omdat 1 plus 2 402 00:18:34,150 --> 00:18:36,270 niet groter is dan 4. 403 00:18:36,270 --> 00:18:38,870 Dus dat zijn de regels die bepalen of de drie 404 00:18:38,870 --> 00:18:42,740 ingangen denkbaar een driehoek. 405 00:18:42,740 --> 00:18:46,360 Dus neem een ​​paar minuten en te verklaren en vervolgens te definiëren 406 00:18:46,360 --> 00:18:49,810 Deze functie genaamd geldig driehoek, zodat het eigenlijk 407 00:18:49,810 --> 00:18:51,650 heeft de hier genoemde gedrag. 408 00:18:51,650 --> 00:18:57,030 >> Het zal de uitgang waar als de drie zijden in staat omvattende een driehoek, 409 00:18:57,030 --> 00:19:01,950 en anders false Klaar om te zien hoe je deed? 410 00:19:01,950 --> 00:19:04,650 Hier is een implementatie geldige driehoek. 411 00:19:04,650 --> 00:19:05,770 Het is niet de enige. 412 00:19:05,770 --> 00:19:07,770 Yours kan enigszins variëren. 413 00:19:07,770 --> 00:19:11,040 Maar dit doet in feite hebben het gedrag dat we verwachten. 414 00:19:11,040 --> 00:19:14,450 Wij verklaren onze functie op de top, bool geldig driehoek 415 00:19:14,450 --> 00:19:16,630 zweven x float y float z. 416 00:19:16,630 --> 00:19:18,930 Dus nogmaals, deze functie duurt drie reële getallen 417 00:19:18,930 --> 00:19:22,280 als zijn argumenten, drijvende puntenwaarde variabelen, 418 00:19:22,280 --> 00:19:26,510 en voert een waar of onwaar waarde, die een Booleaanse, recall. 419 00:19:26,510 --> 00:19:28,660 Dus dat is de reden waarom de return type is Bool. 420 00:19:28,660 --> 00:19:30,016 Dan is de functie te definiëren we. 421 00:19:30,016 --> 00:19:33,140 Het eerste wat we doen is controleren om er zeker dat alle kanten positief. 422 00:19:33,140 --> 00:19:37,010 Als x kleiner is dan of gelijk is aan 0, of wanneer y gelijk is aan 0, 423 00:19:37,010 --> 00:19:41,050 of wanneer z kleiner is dan of gelijk aan 0, die onmogelijk een driehoek. 424 00:19:41,050 --> 00:19:42,380 Ze hebben geen positieve kanten. 425 00:19:42,380 --> 00:19:45,790 En zo kunnen we terugkeren vals in die situatie. 426 00:19:45,790 --> 00:19:49,010 Vervolgens controleren we om ervoor te zorgen dat elk paar ingangen 427 00:19:49,010 --> 00:19:51,830 groter dan de derde. 428 00:19:51,830 --> 00:19:54,530 >> Dus als x plus y minder dan of gelijk aan z, 429 00:19:54,530 --> 00:19:57,060 of indien x plus z kleiner dan of gelijk aan y, 430 00:19:57,060 --> 00:20:01,730 of y plus z kleiner is dan of gelijk aan x, die ook geen geldig driehoek. 431 00:20:01,730 --> 00:20:03,800 Dus we terugkeren vals. 432 00:20:03,800 --> 00:20:06,900 Ervan uitgaande dat we allebei van de controles gepasseerd hoewel, dan kunnen we echt terug. 433 00:20:06,900 --> 00:20:09,440 Omdat deze drie zijden in staat returning-- 434 00:20:09,440 --> 00:20:11,647 het maken van een geldige driehoek. 435 00:20:11,647 --> 00:20:12,230 En dat is het. 436 00:20:12,230 --> 00:20:13,830 Je hebt nu verklaard en gedefinieerd. 437 00:20:13,830 --> 00:20:17,330 En u kunt nu in staat zijn om gebruiken en bel deze functie. 438 00:20:17,330 --> 00:20:19,470 Geweldig werk. 439 00:20:19,470 --> 00:20:20,650 Ik ben Doug Lloyd. 440 00:20:20,650 --> 00:20:22,820 Dit is CS50. 441 00:20:22,820 --> 00:20:24,340