1 00:00:00,000 --> 00:00:04,664 2 00:00:04,664 --> 00:00:05,580 Doug LLOYD: U redu. 3 00:00:05,580 --> 00:00:08,877 Dakle, sada ćemo se borila stvarno velika tema, funkcije. 4 00:00:08,877 --> 00:00:11,460 Do sada je u tijeku, sve Programi koje smo pisali 5 00:00:11,460 --> 00:00:12,969 napisane su unutar glavne. 6 00:00:12,969 --> 00:00:14,260 Oni su prilično jednostavne programe. 7 00:00:14,260 --> 00:00:16,940 Ne morate imati sve ove grane i stvari događa. 8 00:00:16,940 --> 00:00:18,773 Mi jednostavno može sve stati unutar i glavni 9 00:00:18,773 --> 00:00:20,407 ne dobiti užasno neodoljiv. 10 00:00:20,407 --> 00:00:22,990 No, kao što je naravno ide na i kao što se početi razvijati programe 11 00:00:22,990 --> 00:00:26,260 samostalno, vjerojatno ćemo za početak da biste dobili puno više od 10 12 00:00:26,260 --> 00:00:27,200 ili 15 redaka. 13 00:00:27,200 --> 00:00:31,400 Možda ćete dobiti stotine ili tisuće ili nekoliko desetaka tisuća linija koda. 14 00:00:31,400 --> 00:00:34,690 I to je zapravo ne koji ludi misao. 15 00:00:34,690 --> 00:00:39,720 Kao takav, to vjerojatno nije dobra ideja zadržati sve unutar glavni. 16 00:00:39,720 --> 00:00:43,240 To može dobiti malo teško naći ono što tražite, ako to učiniti. 17 00:00:43,240 --> 00:00:47,040 >> Srećom, iako C i prilično mnogo svaki drugi programski jezik koji 18 00:00:47,040 --> 00:00:50,386 možda raditi, omogućuje nam pisati funkcija. 19 00:00:50,386 --> 00:00:52,260 A ja sam samo ide uzeti brzo stranu ovdje 20 00:00:52,260 --> 00:00:54,971 spomenuti da je funkcija jedno područje računalnih znanosti. 21 00:00:54,971 --> 00:00:57,970 I vidjet ćete mnogo više od njih na različite točke tijekom tečaja 22 00:00:57,970 --> 00:00:59,290 a ako nastavite dalje. 23 00:00:59,290 --> 00:01:02,280 Gdje ima puno sinonimi za iste riječi. 24 00:01:02,280 --> 00:01:03,390 Tako zovemo funkcija. 25 00:01:03,390 --> 00:01:05,980 Ali možda i čuti nazivaju postupcima, 26 00:01:05,980 --> 00:01:09,570 ili postupci, osobito ako ste ikada učinio bilo Objektno orijentirano programiranje 27 00:01:09,570 --> 00:01:11,950 before-- i ne brinite ako niste, ne 28 00:01:11,950 --> 00:01:14,280 veliki deal-- ali revizije orijentirani jezici 29 00:01:14,280 --> 00:01:16,129 često nazivaju metode. 30 00:01:16,129 --> 00:01:17,670 Ponekad oni zovu potprograme. 31 00:01:17,670 --> 00:01:20,690 Ali oni stvarno sve odnose na istom osnovnom idejom. 32 00:01:20,690 --> 00:01:22,480 >> Da vidimo što je to ideja. 33 00:01:22,480 --> 00:01:23,310 Što je funkcija? 34 00:01:23,310 --> 00:01:26,470 Pa funkcija stvarno ništa više od crne kutije. 35 00:01:26,470 --> 00:01:31,430 Crna kutija koja ima niz nula ili više ulaza i jedan izlaz. 36 00:01:31,430 --> 00:01:33,420 Tako na primjer, to može biti funkcija. 37 00:01:33,420 --> 00:01:35,510 Ova je funkcija zove FUNC. 38 00:01:35,510 --> 00:01:39,330 I to traje tri ulaza a, b i c. 39 00:01:39,330 --> 00:01:42,580 A unutar te crne kutije, mi Ne znam točno što radi, 40 00:01:42,580 --> 00:01:45,100 ali to obrađuje ulazne podatke na neki način, a zatim ga 41 00:01:45,100 --> 00:01:48,680 daje jedan izlaz, u ovom slučaju, Ž. 42 00:01:48,680 --> 00:01:50,504 Sada bi to malo manje apstraktno, mi 43 00:01:50,504 --> 00:01:52,420 Moglo bi se reći da je možda smo imaju funkciju pod nazivom 44 00:01:52,420 --> 00:01:58,750 dodati da traje tri ulaza A, B, i C i obrađuje izlaz na neki način 45 00:01:58,750 --> 00:02:01,010 unutar crne kutije proizvesti jedan izlaz. 46 00:02:01,010 --> 00:02:05,190 Dakle, u ovom slučaju, ako dodaj traje 3, 6 i 7. 47 00:02:05,190 --> 00:02:07,020 Negdje unutar dodaj funkciju, mi bi 48 00:02:07,020 --> 00:02:09,750 očekivati ​​da će se zbrojiti za proizvodnju, koji izlaz 49 00:02:09,750 --> 00:02:13,220 je 3 plus 6 plus 7 ili 16. 50 00:02:13,220 --> 00:02:17,940 >> Isto tako, imate funkciju pod nazivom mult koji traje dva ulaza, A i B, 51 00:02:17,940 --> 00:02:21,070 obrađuje ih na neki način takav da je izlaz funkcije 52 00:02:21,070 --> 00:02:22,920 Produkt je dva ulaza. 53 00:02:22,920 --> 00:02:25,080 Dva ulaza pomnožen zajedno. 54 00:02:25,080 --> 00:02:29,150 4 i 5 se prošao u mult, nešto dogodi, izlaz očekujemo 55 00:02:29,150 --> 00:02:31,090 20. 56 00:02:31,090 --> 00:02:32,507 Zašto mi to nazivamo crna kutija? 57 00:02:32,507 --> 00:02:34,840 Pa, ako mi se ne pisanje Djeluje sebe, što 58 00:02:34,840 --> 00:02:36,869 smo učinili vrlo malo dosad cs50. 59 00:02:36,869 --> 00:02:39,910 Vidjeli smo ispisa f, primjerice, koje je funkcija koja nismo pisati 60 00:02:39,910 --> 00:02:42,305 sami, ali mi ne koristite sve vrijeme. 61 00:02:42,305 --> 00:02:44,180 Ako mi ne pišu funkcije sebe, 62 00:02:44,180 --> 00:02:48,450 ne stvarno trebate znati kako je to zapravo provodi ispod haube. 63 00:02:48,450 --> 00:02:51,710 >> Tako na primjer crna kutija I samo ti pokazali za množenja, 64 00:02:51,710 --> 00:02:53,740 mult a, b mogu biti defined-- a to je samo 65 00:02:53,740 --> 00:02:57,902 Neki pseudocode-- mogao biti definira kao izlaz puta b. 66 00:02:57,902 --> 00:02:58,860 Koje imaju smisla, zar ne. 67 00:02:58,860 --> 00:03:01,370 Ako imamo funkciju pod nazivom mult koji traje dva ulaza. 68 00:03:01,370 --> 00:03:04,750 Mi bi se očekivati ​​da bi izlaz biti dva ulaza množi zajedno, 69 00:03:04,750 --> 00:03:06,240 puta b. 70 00:03:06,240 --> 00:03:09,170 Ali mult također može biti provoditi ovako, 71 00:03:09,170 --> 00:03:13,150 imamo varijablu counter pozor unutar mult 0. 72 00:03:13,150 --> 00:03:18,000 A onda smo ponoviti ovaj postupak b puta dodati na šalter. 73 00:03:18,000 --> 00:03:24,270 Na primjer, ako pomnožimo 3a strane 5b, mogli bismo reći postaviti brojač na 0, 74 00:03:24,270 --> 00:03:27,700 ponovite pet puta, dodati 3 do pulta. 75 00:03:27,700 --> 00:03:34,490 Tako smo započeli na 0, a zatim radimo to pet puta 3, 6, 9, 12, 15. 76 00:03:34,490 --> 00:03:37,500 To je isti rezultat. Mi ipak dobiti 3 puta 5 samo 77 00:03:37,500 --> 00:03:39,500 provedba je drugačiji. 78 00:03:39,500 --> 00:03:41,490 >> To je ono što mislimo kada kažemo crnu kutiju. 79 00:03:41,490 --> 00:03:44,406 To samo znači da mi ne stvarno briga kako se to provodi ispod haube 80 00:03:44,406 --> 00:03:46,170 dok je izlaz je ono što očekujemo. 81 00:03:46,170 --> 00:03:49,045 U stvari, to je dio ugovora pomoću funkcije, osobito 82 00:03:49,045 --> 00:03:50,630 Funkcije koje drugi pišu. 83 00:03:50,630 --> 00:03:53,980 Ponašanje uvijek ide biti tipičan, nepredvidljiv 84 00:03:53,980 --> 00:03:55,420 temelju ime funkcije. 85 00:03:55,420 --> 00:03:57,500 I to je razlog zašto je zapravo važno kada pišete funkcije 86 00:03:57,500 --> 00:04:00,020 ili kada drugi ljudi pišu Funkcije koje bi mogli koristiti, 87 00:04:00,020 --> 00:04:03,590 da te funkcije ima jasne, relativno očiti imena, 88 00:04:03,590 --> 00:04:04,990 i dobro su dokumentirani. 89 00:04:04,990 --> 00:04:08,560 Što je svakako slučaj za funkcije poput ispisa f. 90 00:04:08,560 --> 00:04:09,860 >> Pa zašto mi koristimo funkcije? 91 00:04:09,860 --> 00:04:14,220 Pa kao što sam rekao ranije, ako pišemo sve naše koda unutar glavnih stvari 92 00:04:14,220 --> 00:04:17,120 možete dobiti stvarno težak i stvarno komplicirano. 93 00:04:17,120 --> 00:04:19,980 Funkcije omogućuju nam mogućnost organizirati stvari i razbiti 94 00:04:19,980 --> 00:04:24,540 vrlo komplicirano problema u mnogo više rukovanje pod dijelovi. 95 00:04:24,540 --> 00:04:28,130 Funkcije nam također omogućuju da se pojednostaviti proces kodiranja. 96 00:04:28,130 --> 00:04:33,080 To je puno lakše ispravljanje 10 crta funkcija u odnosu na 100 linije 97 00:04:33,080 --> 00:04:35,890 funkcija ili funkcija 1.000 linija. 98 00:04:35,890 --> 00:04:38,400 Ako imamo samo ispravljanje male komadiće na vrijeme, 99 00:04:38,400 --> 00:04:42,110 ili pisati male komadiće u to vrijeme, čini da iskustva u programiranju 100 00:04:42,110 --> 00:04:43,070 puno bolje. 101 00:04:43,070 --> 00:04:44,910 Vjeruj mi na tome. 102 00:04:44,910 --> 00:04:48,400 >> Na kraju, ako pišemo funkcije smo može ponovno one različite dijelove. 103 00:04:48,400 --> 00:04:49,880 Funkcije može reciklirati. 104 00:04:49,880 --> 00:04:51,880 Oni se mogu koristiti u jedan program ili neki drugi. 105 00:04:51,880 --> 00:04:53,713 Već sam napisao funkcija, sve što 106 00:04:53,713 --> 00:04:56,530 trebate učiniti je reći taj program gdje naći tu funkciju. 107 00:04:56,530 --> 00:04:59,680 Mi smo recikliranje i korištenjem ispis F za više od 40 godina. 108 00:04:59,680 --> 00:05:02,150 Ali to je samo napisao jedan put. 109 00:05:02,150 --> 00:05:04,270 Prilično koristan, pravo. 110 00:05:04,270 --> 00:05:04,830 U redu. 111 00:05:04,830 --> 00:05:06,040 Dakle funkcije su super. 112 00:05:06,040 --> 00:05:06,860 Znamo da. 113 00:05:06,860 --> 00:05:08,700 Sada ćemo ih početi pisati. 114 00:05:08,700 --> 00:05:10,830 Počnimo dobivanje ih u naše programe. 115 00:05:10,830 --> 00:05:13,869 Da bi to postigli, prvo što mi je izjaviti funkciju. 116 00:05:13,869 --> 00:05:16,160 Kada proglasiti funkciju ono što zapravo radi 117 00:05:16,160 --> 00:05:18,900 govori prevodilac, hej, samo da znaš, 118 00:05:18,900 --> 00:05:20,850 Ja ću biti pisanje funkcija kasnije 119 00:05:20,850 --> 00:05:22,987 a evo što će to izgledati. 120 00:05:22,987 --> 00:05:24,820 Razlog za to je jer kompilatora mogu 121 00:05:24,820 --> 00:05:27,900 učiniti neke čudne stvari, ako vide skup simbola 122 00:05:27,900 --> 00:05:29,560 da oni nisu upoznati s. 123 00:05:29,560 --> 00:05:33,000 Dakle, mi samo dati prevodilac A glave gore, ja sam stvara funkciju 124 00:05:33,000 --> 00:05:35,492 i to će to učiniti. 125 00:05:35,492 --> 00:05:38,450 Funkcija deklaracije općenito, ako koju organizira svoj kod na način 126 00:05:38,450 --> 00:05:41,872 da će i drugi moći razumjeti i iskoristiti, 127 00:05:41,872 --> 00:05:44,330 općenito žele staviti sve Vaše funkcija izjava 128 00:05:44,330 --> 00:05:48,220 na samom vrhu vašeg koda, pravo Prije nego što počnete pisati Glavni čak. 129 00:05:48,220 --> 00:05:50,770 I jednostavno, tu je vrlo standardni obrazac 130 00:05:50,770 --> 00:05:53,500 da je svaka funkcija izjava slijedi. 131 00:05:53,500 --> 00:05:56,090 Svi su prilično mnogo izgledati ovako. 132 00:05:56,090 --> 00:06:01,440 Postoje tri dijela u funkciji izjava, tipa povrata, naziv, 133 00:06:01,440 --> 00:06:03,420 i popis argument. 134 00:06:03,420 --> 00:06:07,180 >> Sada je vrsta povratak Kakav varijabla funkcija će ispisati. 135 00:06:07,180 --> 00:06:10,710 Tako na primjer, ako mislimo unatrag Prije minutu do dvije množenjem 136 00:06:10,710 --> 00:06:15,690 Brojevi funkcija, što očekujemo, ako pomnožimo cijeli broj od cijelog broja 137 00:06:15,690 --> 00:06:18,502 izlaz će biti Vjerojatno cijeli, zar ne. 138 00:06:18,502 --> 00:06:20,710 Množe dva prirodna broja zajedno, te dobiti cijeli broj. 139 00:06:20,710 --> 00:06:24,167 Dakle, vrsti koja povratka Funkcija bi int. 140 00:06:24,167 --> 00:06:26,000 Ime je ono što želite nazvati svoju funkciju. 141 00:06:26,000 --> 00:06:29,330 To je vjerojatno najmanje važno dio funkcije deklaracije, 142 00:06:29,330 --> 00:06:30,827 u smislu funkcionalnosti. 143 00:06:30,827 --> 00:06:33,160 No, zapravo je vjerojatno jedan od najvažnijih dijelova 144 00:06:33,160 --> 00:06:36,243 funkcije izjave u smislu znajući što je funkcija zapravo 145 00:06:36,243 --> 00:06:37,120 ne. 146 00:06:37,120 --> 00:06:40,474 Ako ime vašeg funkcija f ili g ili h ili tajna ili nešto slično, 147 00:06:40,474 --> 00:06:42,765 ste vjerojatno idući u dobiti malo iskočio odustao 148 00:06:42,765 --> 00:06:44,650 sjetiti što te funkcije učiniti. 149 00:06:44,650 --> 00:06:47,880 Tako da je važno dati svoj smislene imena funkciju a. 150 00:06:47,880 --> 00:06:51,030 >> Na kraju, popis argument zarez odvojeni popis 151 00:06:51,030 --> 00:06:55,260 svih ulaza u vašem funkciju, od kojih svaki ima tip i naziv. 152 00:06:55,260 --> 00:06:57,840 Dakle, ne samo da ćete morati navesti koju vrstu varijable 153 00:06:57,840 --> 00:07:00,760 Funkcija će izlaz, također žele odrediti 154 00:07:00,760 --> 00:07:07,694 Koji tip i vrste varijabli u Funkcija će prihvaćanje kao ulaza. 155 00:07:07,694 --> 00:07:08,860 Tako ćemo učiniti ovdje primjer. 156 00:07:08,860 --> 00:07:10,220 Ajmo pogledati na konkretniji jedan. 157 00:07:10,220 --> 00:07:13,130 Dakle ovdje je primjer ovisnosti Deklaracija za funkcije koje 158 00:07:13,130 --> 00:07:14,925 bi dodali dva broja zajedno. 159 00:07:14,925 --> 00:07:17,800 Zbroj dvaju brojeva će biti cijeli broj, kao i, kao što smo upravo 160 00:07:17,800 --> 00:07:18,450 razgovarali. 161 00:07:18,450 --> 00:07:21,610 I tako je vrsta povratka, ovdje u zeleno, biti int. 162 00:07:21,610 --> 00:07:25,190 To nas je dodati dva Ints samo govori će se, na kraju dana, 163 00:07:25,190 --> 00:07:28,799 izlaz, ili ga ispljune nazad na nas, cijeli broj. 164 00:07:28,799 --> 00:07:31,590 S obzirom na ono što ova funkcija mi radi želite dati smisleni naziv. 165 00:07:31,590 --> 00:07:33,630 Dodajte dvije Ints izgleda prikladno, s obzirom 166 00:07:33,630 --> 00:07:37,574 mi smo uzimajući dva broja kao ulazi i nadamo se da ih dodate zajedno. 167 00:07:37,574 --> 00:07:40,240 To bi moglo biti malo težak Ime i iskreno ova funkcija 168 00:07:40,240 --> 00:07:42,430 vjerojatno nije potrebno jer imamo dodatak 169 00:07:42,430 --> 00:07:46,310 operater, ako se sjećate iz naše rasprava operatera, prije. 170 00:07:46,310 --> 00:07:49,650 Ali recimo samo za dobrobit Argument da je ova funkcija je korisna 171 00:07:49,650 --> 00:07:52,860 i tako ćemo nazvati dodajte dvije Ints. 172 00:07:52,860 --> 00:07:55,230 Na kraju, ova funkcija traje dva ulaza. 173 00:07:55,230 --> 00:07:56,960 Od kojih je svaki cijeli broj. 174 00:07:56,960 --> 00:07:59,900 Dakle, imamo ovaj zarez odvojeni popis ulaza. 175 00:07:59,900 --> 00:08:02,830 Sada mi općenito želimo dati ime svakog od njih 176 00:08:02,830 --> 00:08:05,070 tako da se može koristiti u funkciju. 177 00:08:05,070 --> 00:08:07,180 Imena nisu strašno važno. 178 00:08:07,180 --> 00:08:11,400 >> U ovom slučaju, mi ne nužno imati značenje povezanih s njima. 179 00:08:11,400 --> 00:08:13,140 Dakle, mi samo možemo ih nazvati i b. 180 00:08:13,140 --> 00:08:14,257 To je sasvim u redu. 181 00:08:14,257 --> 00:08:16,090 Ako, međutim, možete pronaći sebe u situaciji 182 00:08:16,090 --> 00:08:19,497 gdje su imena varijabli može zapravo biti važno, 183 00:08:19,497 --> 00:08:21,830 možda ih želite nazvati nešto drugo nego i B 184 00:08:21,830 --> 00:08:24,701 da im daju nešto više simbolično značenje. 185 00:08:24,701 --> 00:08:27,700 No, u ovom slučaju, mi ne stvarno znaju ništa drugo o funkciji. 186 00:08:27,700 --> 00:08:29,320 Mi samo želimo dodati dva prirodna broja. 187 00:08:29,320 --> 00:08:32,429 Dakle, samo ćemo nazvati oni cijeli brojevi a i b. 188 00:08:32,429 --> 00:08:33,990 To je jedan primjer. 189 00:08:33,990 --> 00:08:36,287 >> Zašto ne uzmete drugi razmišljati o ovome, 190 00:08:36,287 --> 00:08:38,870 kako bi ti napisati funkciju Deklaracija za funkcije koje 191 00:08:38,870 --> 00:08:42,940 umnožava dvije brojeve s pomičnim zarezom? 192 00:08:42,940 --> 00:08:45,910 Sjećate li se što je plutajući broj je točka? 193 00:08:45,910 --> 00:08:48,120 Što bi ova funkcija Deklaracija izgledati? 194 00:08:48,120 --> 00:08:53,330 Ja zapravo preporučiti te pauziranje videozapisa ovdje i uzeti koliko vremena vam je potrebno. 195 00:08:53,330 --> 00:08:55,521 Razmislite o tome što je to Funkcija deklaracija će biti? 196 00:08:55,521 --> 00:08:56,770 Što bi vrsta povratak biti? 197 00:08:56,770 --> 00:08:58,103 Što bi smisleni naziv biti? 198 00:08:58,103 --> 00:08:59,580 Što bi ulazi se? 199 00:08:59,580 --> 00:09:03,190 Pa zašto ne pauzirati video ovdje i pisati-up funkcije izjavu 200 00:09:03,190 --> 00:09:07,640 za funkcije koji će umnožiti Dva brojeve s pomičnim zarezom zajedno. 201 00:09:07,640 --> 00:09:09,330 Nadam se da je zastao video. 202 00:09:09,330 --> 00:09:12,950 >> Tako ćemo pogledati primjer jednog mogućeg deklaracije. 203 00:09:12,950 --> 00:09:17,340 Float mult dva reals plutaju x, y float. 204 00:09:17,340 --> 00:09:19,090 Produkt dva brojeve s pomičnim zarezom, 205 00:09:19,090 --> 00:09:21,710 koji prisjetiti se kako smo predstavlja realne brojeve 206 00:09:21,710 --> 00:09:26,770 ili brojeve s decimalnim vrijednostima u C, će biti plutajući niz točka. 207 00:09:26,770 --> 00:09:28,570 Kada pomnožite decimale po decimale, 208 00:09:28,570 --> 00:09:30,460 ste vjerojatno idući u dobiti decimale. 209 00:09:30,460 --> 00:09:31,960 Želiš mu dati relevantne ime. 210 00:09:31,960 --> 00:09:33,810 Pomnoži dva reals čini u redu. 211 00:09:33,810 --> 00:09:36,620 Ali stvarno bi mogao nazvati mult dva pluta ili mult pluta. 212 00:09:36,620 --> 00:09:39,540 Nešto slično, sve dok to dao neki stvarni smisao onoga što 213 00:09:39,540 --> 00:09:41,469 ova crna kutija će učiniti. 214 00:09:41,469 --> 00:09:44,260 I opet, u ovom slučaju, mi ne Čini se da imaju ikakav smisao u prilogu 215 00:09:44,260 --> 00:09:46,390 na imena varijable smo prolaze u, 216 00:09:46,390 --> 00:09:48,645 pa smo samo ih zvati X i Y. 217 00:09:48,645 --> 00:09:51,020 Sada, ako ste ih nazvati nešto drugo, to je sasvim u redu. 218 00:09:51,020 --> 00:09:53,310 U stvari, ako nije ova izjava umjesto 219 00:09:53,310 --> 00:09:55,450 pomoću parovima umjesto od pluta, ako se sjećate 220 00:09:55,450 --> 00:09:59,100 da parovi su različiti način da preciznije 221 00:09:59,100 --> 00:10:02,330 odrediti realne brojeve ili pomičnim zarezom varijable. 222 00:10:02,330 --> 00:10:03,620 To je sasvim u redu previše. 223 00:10:03,620 --> 00:10:04,670 Ili jedan od onih koji će biti u redu. 224 00:10:04,670 --> 00:10:06,711 Zapravo, postoji nekoliko različite kombinacije 225 00:10:06,711 --> 00:10:08,410 načina da se proglasi tu funkciju. 226 00:10:08,410 --> 00:10:10,884 No, to su dvije jako dobre. 227 00:10:10,884 --> 00:10:12,550 Mi smo proglasili funkciju, to je super. 228 00:10:12,550 --> 00:10:15,700 Mi smo rekli prevodilac ono što je, što ćemo raditi. 229 00:10:15,700 --> 00:10:17,630 Sada zapravo pisati tu funkciju. 230 00:10:17,630 --> 00:10:20,750 Dajmo mu definiciju, tako da unutar crne kutije 231 00:10:20,750 --> 00:10:22,840 predvidljivo ponašanje se događa. 232 00:10:22,840 --> 00:10:26,270 U stvari, mi smo množenjem dva prava brojeve zajedno, ili dodavanje brojeva 233 00:10:26,270 --> 00:10:29,760 zajedno, ili radi ono što je da smo pitali naše funkciju veze. 234 00:10:29,760 --> 00:10:32,780 >> Dakle, u stvari, pokušajmo i definirati pomnožiti dva reals koje smo upravo 235 00:10:32,780 --> 00:10:35,350 govorio o prije sekundu. 236 00:10:35,350 --> 00:10:38,560 Sada početak definicija funkcija 237 00:10:38,560 --> 00:10:41,720 izgleda gotovo posve isti kao funkcija deklaracije. 238 00:10:41,720 --> 00:10:43,170 Imam ih oboje ovdje. 239 00:10:43,170 --> 00:10:47,770 Na vrhu je funkcija deklaracija, Vrsta, naziv, odvojene zarezom argument 240 00:10:47,770 --> 00:10:49,410 Popis, točka i zarez. 241 00:10:49,410 --> 00:10:53,800 Zarez označava da da je funkcija izjava. 242 00:10:53,800 --> 00:10:57,060 Početak funkcije Definicija izgleda gotovo točno 243 00:10:57,060 --> 00:11:03,790 isti, vrsta, naziv, odvojene zarezom Popis argument, ne zarez, 244 00:11:03,790 --> 00:11:05,206 otvori kovrčavu braće. 245 00:11:05,206 --> 00:11:07,580 Otvorena kovrčava braće, kao što smo radili s glavnom, 246 00:11:07,580 --> 00:11:09,540 znači da smo sada na početku definirati 247 00:11:09,540 --> 00:11:14,567 ono što se događa unutar crne kutije koja odlučili smo pozvati mult dva reals. 248 00:11:14,567 --> 00:11:15,900 Ovdje je jedan od načina da ga provede. 249 00:11:15,900 --> 00:11:20,370 Mogli bismo reći, mogli bismo proglasiti novi varijabla tipa float naziva proizvoda 250 00:11:20,370 --> 00:11:24,020 i dodijeliti tu varijablu na vrijednost x puta y. 251 00:11:24,020 --> 00:11:27,306 A onda se vratiti proizvod. 252 00:11:27,306 --> 00:11:28,430 Što znači povratak ovdje. 253 00:11:28,430 --> 00:11:31,090 Pa povratak je način mi pokazuju da je kako 254 00:11:31,090 --> 00:11:33,400 mi prolazi izlaz odustati. 255 00:11:33,400 --> 00:11:38,160 Tako vratiti nešto, je isto kao, to je izlaz iz crne kutije. 256 00:11:38,160 --> 00:11:40,732 Dakle, to je kako to učiniti. 257 00:11:40,732 --> 00:11:42,190 Evo još jedan način da se to provede. 258 00:11:42,190 --> 00:11:45,050 Mi smo samo mogli vratiti x puta y. 259 00:11:45,050 --> 00:11:45,870 X je plovak. 260 00:11:45,870 --> 00:11:46,660 y je plovak. 261 00:11:46,660 --> 00:11:48,490 Dakle, x puta y je i plovak. 262 00:11:48,490 --> 00:11:50,750 Mi ni ne trebaju stvoriti drugu varijablu. 263 00:11:50,750 --> 00:11:56,750 Dakle, to je drugačiji način implementirati isti crnu kutiju. 264 00:11:56,750 --> 00:11:58,570 >> Sada uzmite trenutak, opet pauzirati video, 265 00:11:58,570 --> 00:12:01,680 i pokušati definirati dodajte dvije Ints, što je druga funkcija koje smo 266 00:12:01,680 --> 00:12:03,090 govorio o maloprije. 267 00:12:03,090 --> 00:12:06,440 Opet ovdje sam stavio funkciju izjava, pa je zarez, 268 00:12:06,440 --> 00:12:08,420 i otvoren kovrčave vitice i zatvorena vitičasta 269 00:12:08,420 --> 00:12:12,080 braće naznačiti gdje ćemo ispuniti u sadržaju dodali dvije Ints, 270 00:12:12,080 --> 00:12:15,530 tako da smo definirati poseban Ponašanje unutar crne kutije. 271 00:12:15,530 --> 00:12:16,380 Dakle pauzirati video. 272 00:12:16,380 --> 00:12:18,790 I uzeti što više vremena morate probati i definirati 273 00:12:18,790 --> 00:12:25,040 provedba dodajte dvije Ints, kao da kada je funkcija izlazi vrijednosti, 274 00:12:25,040 --> 00:12:29,209 to se, zapravo, povratak zbroj dva ulaza. 275 00:12:29,209 --> 00:12:32,000 Dakle, baš kao u prethodnom primjeru, postoji nekoliko različitih načina 276 00:12:32,000 --> 00:12:34,210 da biste mogli provesti dodajte dvije Ints. 277 00:12:34,210 --> 00:12:35,130 Evo jedan. 278 00:12:35,130 --> 00:12:37,172 Ovdje narančasto imam Samo je imao neke comments-- 279 00:12:37,172 --> 00:12:38,880 Upravo sam dodao neke komentari za označavanje 280 00:12:38,880 --> 00:12:41,400 što se događa na svakom retku koda. 281 00:12:41,400 --> 00:12:45,430 Tako sam proglasiti varijablu zove suma tipa int. 282 00:12:45,430 --> 00:12:47,279 Kažem zbroj jednak plus b. 283 00:12:47,279 --> 00:12:50,070 To je mjesto gdje smo zapravo radite rad dodavanjem i B zajedno. 284 00:12:50,070 --> 00:12:51,850 I ja sam se vratiti svotu. 285 00:12:51,850 --> 00:12:56,460 I to ima smisla, jer Zbroj je varijabla tipa int. 286 00:12:56,460 --> 00:13:00,180 A što je podatke da je taj tip Funkcija mi govori da će to izlaz? 287 00:13:00,180 --> 00:13:00,680 Int. 288 00:13:00,680 --> 00:13:03,072 Tako sam povratka iznos koji je varijabla broj. 289 00:13:03,072 --> 00:13:06,030 I to ima smisla s obzirom što smo proglasio i definira naš funkciju 290 00:13:06,030 --> 00:13:07,320 napraviti. 291 00:13:07,320 --> 00:13:09,700 >> Sada također možete definirati funkcija na ovaj način, 292 00:13:09,700 --> 00:13:15,260 int zbroj jednak plus B- preskočiti Prvi step-- a zatim vratiti iznos. 293 00:13:15,260 --> 00:13:17,760 Sada možete imati i provodi se na ovaj način, 294 00:13:17,760 --> 00:13:19,180 što sam visoko ne preporučujem. 295 00:13:19,180 --> 00:13:22,540 To je loše za jedan stil stvar i stvarno loše dizajn, 296 00:13:22,540 --> 00:13:24,420 ali to ipak, u stvari, na poslu. 297 00:13:24,420 --> 00:13:30,199 Ako vam se ovaj kod, koji je int dodaj loše guja točkica C, i koristiti ga. 298 00:13:30,199 --> 00:13:31,990 To zapravo ne dodati dva prirodna broja zajedno. 299 00:13:31,990 --> 00:13:37,632 To je vrlo loša provedba ove određene ponašanja. 300 00:13:37,632 --> 00:13:38,340 No, to ne rade. 301 00:13:38,340 --> 00:13:41,200 To je samo ovdje za ilustraciju poanta da mi ne stvarno 302 00:13:41,200 --> 00:13:44,530 zanima me što se događa unutar crne kutije, dok 303 00:13:44,530 --> 00:13:46,510 jer ima izlaz koji očekujemo. 304 00:13:46,510 --> 00:13:48,870 To je loše dizajniran crna kutija. 305 00:13:48,870 --> 00:13:53,801 Ali na kraju dana, to ne uvijek izlaz suma plus b. 306 00:13:53,801 --> 00:13:54,300 U redu. 307 00:13:54,300 --> 00:13:56,320 Tako smo proglasili funkcije. 308 00:13:56,320 --> 00:13:57,490 A mi smo definirana funkcija. 309 00:13:57,490 --> 00:13:58,540 Tako da je stvarno dobar. 310 00:13:58,540 --> 00:14:03,020 Sada ćemo početi koristiti funkcije da smo proglasili, a mi smo definirani. 311 00:14:03,020 --> 00:14:05,960 Za nazivanje function-- to je zapravo lijepa easy-- sve što trebate učiniti 312 00:14:05,960 --> 00:14:09,070 je proslijediti odgovarajuće argumente, Argumenti tipa podataka 313 00:14:09,070 --> 00:14:11,600 da očekuje i zatim dodijeliti povratak 314 00:14:11,600 --> 00:14:15,190 vrijednost te funkcije i this-- izgovor me-- 315 00:14:15,190 --> 00:14:19,390 dodijeliti povratnu vrijednost te funkcije nešto od odgovarajuće vrste. 316 00:14:19,390 --> 00:14:22,410 >> Tako ćemo imati pogled na to u praksi u datoteku 317 00:14:22,410 --> 00:14:27,730 zove guja 1 točka c, koji se Imam u mom cs50 IDE. 318 00:14:27,730 --> 00:14:31,042 Dakle, ovdje je guja 1 točka c. 319 00:14:31,042 --> 00:14:33,500 Na početku vidite imam moj uključuje, funta su, 320 00:14:33,500 --> 00:14:35,460 standardni IO i cs50 točka h. 321 00:14:35,460 --> 00:14:37,700 A onda imam funkciju izjavu. 322 00:14:37,700 --> 00:14:39,570 Ovo je mjesto gdje sam govori prevodilac ja sam 323 00:14:39,570 --> 00:14:42,850 će se pisanje funkcija zove dodajte dvije Ints. 324 00:14:42,850 --> 00:14:45,780 To će, na izlazu broj vrsta promjenjiva. 325 00:14:45,780 --> 00:14:47,360 To je ono što ovaj dio je upravo ovdje. 326 00:14:47,360 --> 00:14:51,950 A onda imam dva ulaza da bi ga i b, od kojih je svaki cijeli broj. 327 00:14:51,950 --> 00:14:58,250 Unutar glavni, sam pitati korisnika za ulaz govoreći, daj mi cijeli broj. 328 00:14:58,250 --> 00:15:01,040 I oni zatraži zaboraviti int, što je funkcija koja 329 00:15:01,040 --> 00:15:03,240 uključena u cs50 knjižnici. 330 00:15:03,240 --> 00:15:07,660 I to dobiva pohranjene u x, varijabla broj. 331 00:15:07,660 --> 00:15:09,886 >> Onda smo ih pitati za neki drugi cijeli broj. 332 00:15:09,886 --> 00:15:13,070 Mi smo dobili još jedan cijeli broj i pohraniti da u y. 333 00:15:13,070 --> 00:15:17,990 A onda, ovdje na liniji 28, je gdje smo napraviti naš funkcija poziva. 334 00:15:17,990 --> 00:15:23,770 Mi smo govoreći, int Z jednako dodati 2 Ints x y zarezom. 335 00:15:23,770 --> 00:15:25,980 Vidite li zašto je ovo smisla? 336 00:15:25,980 --> 00:15:29,710 X je varijabla tipa cijeli broj i y je varijabla tipa cijeli broj. 337 00:15:29,710 --> 00:15:31,220 Dakle, to je dobro. 338 00:15:31,220 --> 00:15:34,570 To smisla s onim što naš funkciji izjava na liniji 17 izgleda. 339 00:15:34,570 --> 00:15:38,300 Zarez odvojeni popis ulaz očekuje se dva prirodna broja A i B. 340 00:15:38,300 --> 00:15:40,300 U tom slučaju, možemo nazvati im što god želimo. 341 00:15:40,300 --> 00:15:42,300 To samo očekuje dva prirodna broja. 342 00:15:42,300 --> 00:15:44,930 I x je cijeli broj, a y je cijeli broj. 343 00:15:44,930 --> 00:15:45,640 To radi. 344 00:15:45,640 --> 00:15:48,680 >> A mi znamo da je funkcija ide na izlazu cijeli brojevi, kao dobro. 345 00:15:48,680 --> 00:15:51,290 I tako smo se pohranjivanjem Izlaz iz funkcije, 346 00:15:51,290 --> 00:15:56,050 dodajte dva Ints, u cjelobrojni tip varijabla, koju zovete z. 347 00:15:56,050 --> 00:16:01,980 A onda možemo reći, suma posto sam i posto sam je ja posto. 348 00:16:01,980 --> 00:16:06,210 x, y i z, odnosno ispunjavanje tih posto sam je. 349 00:16:06,210 --> 00:16:08,334 Koja je definicija dodaj dvije Ints izgledati? 350 00:16:08,334 --> 00:16:09,125 To je prilično jednostavan. 351 00:16:09,125 --> 00:16:11,270 To je jedna od onih koje Upravo sam vidio prije sekundu, 352 00:16:11,270 --> 00:16:14,390 int suma jednaka je plus b povratak svotu. 353 00:16:14,390 --> 00:16:15,420 Ovo radi? 354 00:16:15,420 --> 00:16:17,270 Idemo spremite datoteku. 355 00:16:17,270 --> 00:16:22,080 A onda je ovdje dolje na moj terminalu Idem napraviti zbrajalo 1, 356 00:16:22,080 --> 00:16:23,000 i ja razbistriti zaslon. 357 00:16:23,000 --> 00:16:25,791 Idem za povećavanje, jer znam to je malo teško vidjeti. 358 00:16:25,791 --> 00:16:31,520 359 00:16:31,520 --> 00:16:33,770 >> Tako smo sastaviti ovaj program kao guja ljutica 1. 360 00:16:33,770 --> 00:16:37,910 Dakle, što možemo učiniti dot kose crte zbrajalo 1. 361 00:16:37,910 --> 00:16:40,060 Daj mi cijeli broj, 10. 362 00:16:40,060 --> 00:16:42,380 Daj mi još jedan cijeli broj, 20. 363 00:16:42,380 --> 00:16:45,200 Zbroj od 10 i 20 je 30. 364 00:16:45,200 --> 00:16:47,615 Tako smo napravili uspješnu funkciju poziv. 365 00:16:47,615 --> 00:16:55,820 Možete ponovno pokrenuti funkciju, negativna 10, 17 zbroj negativnih 10 i 17 je 7. 366 00:16:55,820 --> 00:16:57,120 Ova funkcija radi. 367 00:16:57,120 --> 00:16:59,240 To ima ponašanje da ga očekuju. 368 00:16:59,240 --> 00:17:03,610 I tako smo napravili uspješan funkcija, definicija, deklaracija, 369 00:17:03,610 --> 00:17:07,288 i uspješan funkcija poziva. 370 00:17:07,288 --> 00:17:09,079 Par razno točke o funkcijama 371 00:17:09,079 --> 00:17:10,611 prije nego što smo se zaključiti ovo poglavlje. 372 00:17:10,611 --> 00:17:12,319 Podsjetimo iz naše rasprava o vrstama podataka, 373 00:17:12,319 --> 00:17:16,109 prethodno, koji djeluje ponekad može potrajati ne ulaze. 374 00:17:16,109 --> 00:17:17,930 Ako je to slučaj, proglasiti funkciju 375 00:17:17,930 --> 00:17:19,788 kao da ima popis ništavan argument. 376 00:17:19,788 --> 00:17:21,579 Sjećate li se što se Najčešće funkcija 377 00:17:21,579 --> 00:17:25,036 smo do sada vidjeli da traje popis praznina argument? 378 00:17:25,036 --> 00:17:27,300 To je glavni. 379 00:17:27,300 --> 00:17:30,850 Sjetite se također da je funkciju ponekad ne zapravo imaju izlaz. 380 00:17:30,850 --> 00:17:34,210 U tom slučaju, možemo proglasiti funkciju kao da ima povratnu nevažeće tip. 381 00:17:34,210 --> 00:17:37,880 Ajmo zaključiti ovo poglavlje koje rješavanje problema prakse. 382 00:17:37,880 --> 00:17:39,900 >> Dakle ovdje je problem iznio. 383 00:17:39,900 --> 00:17:43,630 Želim napisati funkciju naziva valjana trokut. 384 00:17:43,630 --> 00:17:47,410 Što ova funkcija treba učiniti je uzeti tri realne brojeve 385 00:17:47,410 --> 00:17:51,930 koji predstavljaju duljine od tri strane trokuta kao svojim parametrima, 386 00:17:51,930 --> 00:17:54,550 ili njegovi argumenti, ili njegova inputs-- drugi skup sinonima 387 00:17:54,550 --> 00:17:57,340 koje možete naići. 388 00:17:57,340 --> 00:18:01,120 Ova funkcija trebala ili izlaz točno ili netočno 389 00:18:01,120 --> 00:18:04,960 ovisno o tome je li ta tri duljine su sposobni za stvaranje trokut. 390 00:18:04,960 --> 00:18:09,930 Sjećate li se tip podataka koji koristili smo ukazati točno ili netočno? 391 00:18:09,930 --> 00:18:11,436 Sada kako provodite ovo? 392 00:18:11,436 --> 00:18:13,810 Pa znam ima par pravila u vezi trokuta 393 00:18:13,810 --> 00:18:15,480 da su zapravo korisno znati. 394 00:18:15,480 --> 00:18:18,292 Trokut može imati samo strane s pozitivnim duljine. 395 00:18:18,292 --> 00:18:19,000 To ima smisla. 396 00:18:19,000 --> 00:18:21,432 Vjerojatno govoreći duh. 397 00:18:21,432 --> 00:18:23,390 Druga stvar na umu ipak, da je zbroj 398 00:18:23,390 --> 00:18:25,484 od duljine bilo dvije strane trokuta 399 00:18:25,484 --> 00:18:27,650 mora biti veća od Duljina treće strane. 400 00:18:27,650 --> 00:18:28,690 To je zapravo istina. 401 00:18:28,690 --> 00:18:34,150 Ne možete imati trokut strana 1, 2 i 4, na primjer, zbog 1 plus 2 402 00:18:34,150 --> 00:18:36,270 nije veći od 4. 403 00:18:36,270 --> 00:18:38,870 Dakle, to su pravila koja utvrditi da li ili ne tri 404 00:18:38,870 --> 00:18:42,740 Ulazi ubjedljivo može formirati trokut. 405 00:18:42,740 --> 00:18:46,360 Tako potrajati nekoliko minuta i proglasiti te definirati 406 00:18:46,360 --> 00:18:49,810 ova funkcija zove valjana trokut, tako da je zapravo 407 00:18:49,810 --> 00:18:51,650 ima ponašanje ovdje naveden. 408 00:18:51,650 --> 00:18:57,030 >> To će izlaz vrijedi ako ta tri strane su sposobni sadrži trokut, 409 00:18:57,030 --> 00:19:01,950 i lažna inače Spremni za vidjeti kako si učinio? 410 00:19:01,950 --> 00:19:04,650 Evo jedna implementacija od valjana trokut. 411 00:19:04,650 --> 00:19:05,770 To je ne samo jedan. 412 00:19:05,770 --> 00:19:07,770 Tvoja možda malo razlikuju. 413 00:19:07,770 --> 00:19:11,040 Ali ovaj ne, u stvari, ima ponašanje koje očekujemo. 414 00:19:11,040 --> 00:19:14,450 Mi objavljujemo djeluje u samom vrhu, bool valjanu trokut 415 00:19:14,450 --> 00:19:16,630 float x float y float z. 416 00:19:16,630 --> 00:19:18,930 Pa opet, ova funkcija traje tri realne brojeve 417 00:19:18,930 --> 00:19:22,280 kao svoje argumente, pluta Točka vrijednost varijable, 418 00:19:22,280 --> 00:19:26,510 i izlazi pravi ili lažni vrijednost, što je logička, opoziv. 419 00:19:26,510 --> 00:19:28,660 Dakle, to je razlog zašto je vrsta povratak je bool. 420 00:19:28,660 --> 00:19:30,016 Onda smo definirati funkcije. 421 00:19:30,016 --> 00:19:33,140 Prva stvar koju radimo je provjerite je li da sve strane su pozitivni. 422 00:19:33,140 --> 00:19:37,010 Ako je x manja od ili jednaka 0, ili ako je Y jednak 0, 423 00:19:37,010 --> 00:19:41,050 ili ako je z manji od ili jednak 0, koji ne može biti trokut. 424 00:19:41,050 --> 00:19:42,380 Oni nemaju pozitivne strane. 425 00:19:42,380 --> 00:19:45,790 I tako smo se vratiti netočno u toj situaciji. 426 00:19:45,790 --> 00:19:49,010 Zatim provjerite da biste bili sigurni da je svaki par ulaza 427 00:19:49,010 --> 00:19:51,830 veća od treći. 428 00:19:51,830 --> 00:19:54,530 >> Dakle, ako je x plus y manji od ili jednak z, 429 00:19:54,530 --> 00:19:57,060 ili ako X plus z manje od ili jednako y 430 00:19:57,060 --> 00:20:01,730 ili ako Y plus z je manji od ili jednak X, koji također ne mogu biti valjan trokut. 431 00:20:01,730 --> 00:20:03,800 Tako smo se vratili opet lažna. 432 00:20:03,800 --> 00:20:06,900 Pod pretpostavkom smo prošli oba pregleda iako, onda možemo vratiti istinito. 433 00:20:06,900 --> 00:20:09,440 Zbog tih tri strane su sposobni returning-- 434 00:20:09,440 --> 00:20:11,647 stvaranja valjanu trokut. 435 00:20:11,647 --> 00:20:12,230 I to je to. 436 00:20:12,230 --> 00:20:13,830 Sada sam proglasio definiran. 437 00:20:13,830 --> 00:20:17,330 A vi svibanj biti u mogućnosti da se sada koristiti i nazvati tu funkciju. 438 00:20:17,330 --> 00:20:19,470 Odličan posao. 439 00:20:19,470 --> 00:20:20,650 Ja sam Doug Lloyd. 440 00:20:20,650 --> 00:20:22,820 To je cs50. 441 00:20:22,820 --> 00:20:24,340