1 00:00:00,000 --> 00:00:04,664 2 00:00:04,664 --> 00:00:05,580 DOUG LLOYD: Dobře. 3 00:00:05,580 --> 00:00:08,877 Takže teď pojďme vypořádávat s opravdu velké téma, funkce. 4 00:00:08,877 --> 00:00:11,460 Dosud se v průběhu, všechny programy, které jsme byli psaní 5 00:00:11,460 --> 00:00:12,969 byly psané uvnitř hlavní. 6 00:00:12,969 --> 00:00:14,260 Jsou to docela jednoduché programy. 7 00:00:14,260 --> 00:00:16,940 Nemusíte mít všechny tyto větve a všechno děje. 8 00:00:16,940 --> 00:00:18,773 Můžeme jen vejde všechno uvnitř hlavní, a to 9 00:00:18,773 --> 00:00:20,407 nedostane hrozně ohromující. 10 00:00:20,407 --> 00:00:22,990 Ale jak se kurz pokračuje a jak se vám začne rozvíjet programy 11 00:00:22,990 --> 00:00:26,260 nezávisle na sobě, oni jsou pravděpodobně bude začít se dostat mnohem více, než 10 12 00:00:26,260 --> 00:00:27,200 nebo 15 řádků. 13 00:00:27,200 --> 00:00:31,400 Ty by mohly získat stovky nebo tisíce nebo desítky tisíc řádků kódu. 14 00:00:31,400 --> 00:00:34,690 A je to opravdu není ta šílená myšlenka. 15 00:00:34,690 --> 00:00:39,720 Jako takový, je to asi není dobrý nápad aby vše vnitřek main. 16 00:00:39,720 --> 00:00:43,240 To může být trochu obtížné najít to, co hledáte, pokud to uděláte. 17 00:00:43,240 --> 00:00:47,040 >> Naštěstí, i když C, a do značné míry každý druhý programovací jazyk, který 18 00:00:47,040 --> 00:00:50,386 by mohlo fungovat s, umožňuje abychom se psát funkce. 19 00:00:50,386 --> 00:00:52,260 A já jsem prostě jít se rychle stranou zde 20 00:00:52,260 --> 00:00:54,971 se zmínit, že funkce je Jednou z oblastí informatiky. 21 00:00:54,971 --> 00:00:57,970 A uvidíte mnoho více z nich v různé body po celou dobu kurzu 22 00:00:57,970 --> 00:00:59,290 a pokud budete pokračovat dál. 23 00:00:59,290 --> 00:01:02,280 Tam, kde je hodně synonyma pro stejné slovo. 24 00:01:02,280 --> 00:01:03,390 Takže říkáme funkce. 25 00:01:03,390 --> 00:01:05,980 Ale můžete slyšet i jejich označovány jako postupy, 26 00:01:05,980 --> 00:01:09,570 nebo postupy, zejména, pokud jste někdy neučinily žádné objektově orientované programování 27 00:01:09,570 --> 00:01:11,950 before-- a nebojte se Máte-li ne, není 28 00:01:11,950 --> 00:01:14,280 velké deal-- ale v audit orientované jazyky 29 00:01:14,280 --> 00:01:16,129 jsou často volal metody. 30 00:01:16,129 --> 00:01:17,670 Někdy se jim říká podprogramy. 31 00:01:17,670 --> 00:01:20,690 Ale oni opravdu všichni se odkazují na stejnou základní myšlence. 32 00:01:20,690 --> 00:01:22,480 >> Pojďme se podívat, co to je nápad. 33 00:01:22,480 --> 00:01:23,310 Co je to funkce? 34 00:01:23,310 --> 00:01:26,470 No funkce je opravdu nic víc, než černé skříňky. 35 00:01:26,470 --> 00:01:31,430 Černá skříňka, která má sadu nula nebo více vstupy a jeden výstup. 36 00:01:31,430 --> 00:01:33,420 Tak například tento by mohla být funkcí. 37 00:01:33,420 --> 00:01:35,510 Jedná se o funkci s názvem FUNC. 38 00:01:35,510 --> 00:01:39,330 A to trvá tři vstupy a, b, c. 39 00:01:39,330 --> 00:01:42,580 A v té černé skříňky, my nevím přesně, co to dělá, 40 00:01:42,580 --> 00:01:45,100 ale zpracovává vstupy nějakým způsobem, a pak se 41 00:01:45,100 --> 00:01:48,680 dává jeden výstup, v tomto případě z. 42 00:01:48,680 --> 00:01:50,504 Nyní, aby se to trochu méně abstraktní, my 43 00:01:50,504 --> 00:01:52,420 Dalo by se říci, že bychom mají funkci nazvanou 44 00:01:52,420 --> 00:01:58,750 Dodávám, že trvá tři vstupy A, B, a c a zpracuje výstup v nějakým způsobem 45 00:01:58,750 --> 00:02:01,010 uvnitř černé skříňky do vyrábět jeden výstup. 46 00:02:01,010 --> 00:02:05,190 Takže v tomto případě, je-li přidá se 3, 6 a 7. 47 00:02:05,190 --> 00:02:07,020 Někde uvnitř přidat funkce, by jsme 48 00:02:07,020 --> 00:02:09,750 očekávat, že budou sečteny produkovat výstup, který 49 00:02:09,750 --> 00:02:13,220 je 3 plus 6 plus 7 nebo 16. 50 00:02:13,220 --> 00:02:17,940 >> Stejně tak, budete mít funkci nazvanou mult, že vezme dva vstupy, A a B, 51 00:02:17,940 --> 00:02:21,070 zpracovává je nějakým způsobem takovém že výstup funkce 52 00:02:21,070 --> 00:02:22,920 je produkt dvou vstupů. 53 00:02:22,920 --> 00:02:25,080 Tyto dva vstupy násobí. 54 00:02:25,080 --> 00:02:29,150 4 a 5 byly přeneseny do mult, se něco stane, výstup očekáváme 55 00:02:29,150 --> 00:02:31,090 je 20. 56 00:02:31,090 --> 00:02:32,507 Proč říkáme, že černá skříňka? 57 00:02:32,507 --> 00:02:34,840 No, pokud nejsme napsal svého funkce sami, což 58 00:02:34,840 --> 00:02:36,869 jsme udělali docela dost tak daleko cs50. 59 00:02:36,869 --> 00:02:39,910 Viděli jsme tiskovou f, například, které je funkce, která jsme nepsal 60 00:02:39,910 --> 00:02:42,305 sami, ale my používat po celou dobu. 61 00:02:42,305 --> 00:02:44,180 Pokud nejsme psát funkce sami, 62 00:02:44,180 --> 00:02:48,450 nemáme opravdu potřeba vědět, jak je to skutečně realizován pod kapotou. 63 00:02:48,450 --> 00:02:51,710 >> Tak například černá skříňka I Jen vám ukázal pro násobení, 64 00:02:51,710 --> 00:02:53,740 mult a, b mohou být defined-- a to je jen 65 00:02:53,740 --> 00:02:57,902 některé pseudocode-- může být definována jako výstup A krát b. 66 00:02:57,902 --> 00:02:58,860 To smysl, že jo. 67 00:02:58,860 --> 00:03:01,370 Máme-li funkci nazvanou mult, že vezme dva vstupy. 68 00:03:01,370 --> 00:03:04,750 Očekávali bychom, že výstup by být dva vstupy násobí, 69 00:03:04,750 --> 00:03:06,240 časů b. 70 00:03:06,240 --> 00:03:09,170 Ale může být také mult implementován jako je tento, 71 00:03:09,170 --> 00:03:13,150 máme proti proměnnou pozor uvnitř mult 0. 72 00:03:13,150 --> 00:03:18,000 A pak jsme tento proces opakovat b časy přidat do pultu. 73 00:03:18,000 --> 00:03:24,270 Například, pokud budeme násobit 3a 5b, mohli bychom říci nastavit počítadlo na 0, 74 00:03:24,270 --> 00:03:27,700 opakujte pětkrát, přidejte 3 do pultu. 75 00:03:27,700 --> 00:03:34,490 Takže začneme na 0 a pak děláme tento pětkrát 3, 6, 9, 12, 15. 76 00:03:34,490 --> 00:03:37,500 Je to stejný výsledek. My ještě dostat 3 krát 5 jen 77 00:03:37,500 --> 00:03:39,500 implementace je jiný. 78 00:03:39,500 --> 00:03:41,490 >> To je to, co máme na mysli když říkáme černé krabici. 79 00:03:41,490 --> 00:03:44,406 To jen znamená, že nemáme opravdu péče jak je implementováno pod kapotou 80 00:03:44,406 --> 00:03:46,170 tak dlouho, dokud je výstupní, je to, co očekáváme. 81 00:03:46,170 --> 00:03:49,045 Ve skutečnosti, že je součástí smlouvy použití funkcí, zejména 82 00:03:49,045 --> 00:03:50,630 funkce, které jiní píší. 83 00:03:50,630 --> 00:03:53,980 Chování je vždycky pro něž jsou typické, nepředvídatelný 84 00:03:53,980 --> 00:03:55,420 založené na název funkce. 85 00:03:55,420 --> 00:03:57,500 A to je důvod, proč je to opravdu důležité, když píšete funkcí 86 00:03:57,500 --> 00:04:00,020 nebo když jiní lidé napsat funkce, které můžete použít, 87 00:04:00,020 --> 00:04:03,590 že tyto funkce mají jasné, poměrně zjevné jména, 88 00:04:03,590 --> 00:04:04,990 a jsou dobře zdokumentovány. 89 00:04:04,990 --> 00:04:08,560 Což je jistě případ pro funkci tisku, jako je f. 90 00:04:08,560 --> 00:04:09,860 >> Tak proč používat funkce? 91 00:04:09,860 --> 00:04:14,220 No, jak jsem řekl dříve, pokud budeme psát všechny naše kódu uvnitř hlavních věcí, 92 00:04:14,220 --> 00:04:17,120 může dostat opravdu těžkopádné a opravdu složité. 93 00:04:17,120 --> 00:04:19,980 Funkce nám umožňují schopnost zorganizovat věci a rozbít 94 00:04:19,980 --> 00:04:24,540 velmi komplikovaný problém do mnohem více zvládnutelné sub náhradní díly. 95 00:04:24,540 --> 00:04:28,130 Funkce nám také umožňují zjednodušit proces kódování. 96 00:04:28,130 --> 00:04:33,080 Je to mnohem snazší ladění 10 Řádek Funkce versus 100 řádek 97 00:04:33,080 --> 00:04:35,890 Funkce nebo funkci 1000 online. 98 00:04:35,890 --> 00:04:38,400 Pokud máme jen ladit malé kousky najednou, 99 00:04:38,400 --> 00:04:42,110 nebo napsat malé kousky v té době, to dělá, že zkušenosti s programováním 100 00:04:42,110 --> 00:04:43,070 mnohem lépe. 101 00:04:43,070 --> 00:04:44,910 Věř mi, že jeden. 102 00:04:44,910 --> 00:04:48,400 >> A konečně, pokud budeme psát funkce jsme lze znovu použít tyto jednotlivé díly. 103 00:04:48,400 --> 00:04:49,880 Funkce mohou být recyklovány. 104 00:04:49,880 --> 00:04:51,880 Mohou být použity v jeden program nebo jiný. 105 00:04:51,880 --> 00:04:53,713 Už jste napsal Funkce, vše, co 106 00:04:53,713 --> 00:04:56,530 musíte udělat, je říci, že program, kde najít tuto funkci. 107 00:04:56,530 --> 00:04:59,680 Byli jsme recyklace a využívání tisknout f více než 40 let. 108 00:04:59,680 --> 00:05:02,150 Ale to byl jen napsán jednou. 109 00:05:02,150 --> 00:05:04,270 Docela užitečné, vpravo. 110 00:05:04,270 --> 00:05:04,830 Dobře. 111 00:05:04,830 --> 00:05:06,040 Takže funkce jsou skvělé. 112 00:05:06,040 --> 00:05:06,860 Víme, že. 113 00:05:06,860 --> 00:05:08,700 Nyní začněme ně psát. 114 00:05:08,700 --> 00:05:10,830 Pojďme začít se je do našich programů. 115 00:05:10,830 --> 00:05:13,869 Aby k tomu, že první věc, kterou děláme, je deklarovat funkce. 116 00:05:13,869 --> 00:05:16,160 Když deklarujete funkci co jste v podstatě děláte 117 00:05:16,160 --> 00:05:18,900 říká kompilátoru, hej, jen abyste věděli, 118 00:05:18,900 --> 00:05:20,850 Budu psát funkce později 119 00:05:20,850 --> 00:05:22,987 a tady je to, co to bude vypadat. 120 00:05:22,987 --> 00:05:24,820 Důvodem pro to je, protože kompilátory může 121 00:05:24,820 --> 00:05:27,900 pokud dělat nějaké divné věci oni vidí sadu symbolů 122 00:05:27,900 --> 00:05:29,560 že nejste obeznámeni s. 123 00:05:29,560 --> 00:05:33,000 Takže jsme prostě dát compiler heads up, jsem vytvořit funkci 124 00:05:33,000 --> 00:05:35,492 a bude to, jak to udělat. 125 00:05:35,492 --> 00:05:38,450 Funkční prohlášení obecně pokud jste organizování kódu způsobem, 126 00:05:38,450 --> 00:05:41,872 že ostatní budou moci porozumět a využít, 127 00:05:41,872 --> 00:05:44,330 obecně chcete dát všechny vaše deklarace funkce 128 00:05:44,330 --> 00:05:48,220 na samém vrcholu vašeho kódu, vpravo předtím, než začnete psát hlavní i. 129 00:05:48,220 --> 00:05:50,770 A pohodlně, je tu velmi standardní formulář 130 00:05:50,770 --> 00:05:53,500 že každá funkce prohlášení následuje. 131 00:05:53,500 --> 00:05:56,090 Všichni skoro vypadat takto. 132 00:05:56,090 --> 00:06:01,440 K dispozici jsou tři části do funkce prohlášení, návratový typ, název, 133 00:06:01,440 --> 00:06:03,420 a argument, seznam. 134 00:06:03,420 --> 00:06:07,180 >> Nyní je návratový typ je, jaký druh variabilní funkce bude výstup. 135 00:06:07,180 --> 00:06:10,710 Tak například, když si myslíme, že dozadu Před minutu násobící dva 136 00:06:10,710 --> 00:06:15,690 Čísla funkce, co očekáváme, pokud vynásobíme celé číslo od integer 137 00:06:15,690 --> 00:06:18,502 bude výstup Pravděpodobně celé číslo, ne. 138 00:06:18,502 --> 00:06:20,710 Násobí dvě celá čísla dohromady, dostanete číslo. 139 00:06:20,710 --> 00:06:24,167 Takže návratový typ, který funkce by bylo int. 140 00:06:24,167 --> 00:06:26,000 Jméno je to, co chcete, zavoláte funkci. 141 00:06:26,000 --> 00:06:29,330 To je pravděpodobně nejméně důležité Součástí deklarace funkce, 142 00:06:29,330 --> 00:06:30,827 z hlediska funkčnosti. 143 00:06:30,827 --> 00:06:33,160 Ale ve skutečnosti je pravděpodobně jedním z nejdůležitějších částí 144 00:06:33,160 --> 00:06:36,243 prohlášení funkce, pokud jde vědět, co vlastně funkce 145 00:06:36,243 --> 00:06:37,120 dělá. 146 00:06:37,120 --> 00:06:40,474 Pokud název vaší funkce f nebo g nebo h nebo tajemství nebo něco takového, 147 00:06:40,474 --> 00:06:42,765 jste pravděpodobně dostanou trochu zakopl nahoru snaží 148 00:06:42,765 --> 00:06:44,650 vzpomenout, co ty funkce dělat. 149 00:06:44,650 --> 00:06:47,880 Takže je důležité, aby vaše smysluplné názvy funkcí je. 150 00:06:47,880 --> 00:06:51,030 >> Konečně, seznam argumentů čárka oddělený seznam 151 00:06:51,030 --> 00:06:55,260 ze všech vstupů do vaší funkce, z nichž každý má typ a jméno. 152 00:06:55,260 --> 00:06:57,840 Takže nejen že máte specifikovat, jaký typ proměnné 153 00:06:57,840 --> 00:07:00,760 bude funkce výstup, Chcete také zadat 154 00:07:00,760 --> 00:07:07,694 jaký typ a typy proměnných funkce bude přijímat jako vstupy. 155 00:07:07,694 --> 00:07:08,860 Takže pojďme udělat příklad zde. 156 00:07:08,860 --> 00:07:10,220 Pojďme stačí se podívat na konkrétnější jeden. 157 00:07:10,220 --> 00:07:13,130 Tak tady je příklad funkce prohlášení o funkci, která 158 00:07:13,130 --> 00:07:14,925 Dodávám dvě celá čísla dohromady. 159 00:07:14,925 --> 00:07:17,800 Součet dvou celých čísel se chystá být celé, stejně, jak jsme právě 160 00:07:17,800 --> 00:07:18,450 projednat. 161 00:07:18,450 --> 00:07:21,610 A tak návratový typ, tady v zelené, by int. 162 00:07:21,610 --> 00:07:25,190 To nám, že přidání dvou celých čísel jen řekne bude, na konci dne, 163 00:07:25,190 --> 00:07:28,799 výstup, nebo vyplivnout zpět k nám, celé číslo. 164 00:07:28,799 --> 00:07:31,590 Vzhledem k tomu, co tato funkce dělá my chtějí dát mu smysluplný název. 165 00:07:31,590 --> 00:07:33,630 Přidejte dvě celých čísel se zdá je to vhodné, vzhledem k 166 00:07:33,630 --> 00:07:37,574 vezmeme dvě celá čísla jako vstupy a doufejme, že je součtem. 167 00:07:37,574 --> 00:07:40,240 To by mohlo být trochu těžkopádný jméno a upřímně řečeno, tato funkce 168 00:07:40,240 --> 00:07:42,430 pravděpodobně není nutná protože máme přidání 169 00:07:42,430 --> 00:07:46,310 operátor, pokud si vzpomínáte z našeho diskuse operátorů, dříve. 170 00:07:46,310 --> 00:07:49,650 Ale řekněme, že k zájmu Argument, že tato funkce je užitečná 171 00:07:49,650 --> 00:07:52,860 a tak budeme říkat to přidat dvě celých čísel. 172 00:07:52,860 --> 00:07:55,230 A konečně, tato funkce trvá dva vstupy. 173 00:07:55,230 --> 00:07:56,960 Z nichž každý je celé číslo. 174 00:07:56,960 --> 00:07:59,900 Takže máme tento čárka oddělený seznam vstupů. 175 00:07:59,900 --> 00:08:02,830 Teď jsme se obecně chceme pojmenovat každého z nich 176 00:08:02,830 --> 00:08:05,070 tak, aby mohly být používány v rámci funkce. 177 00:08:05,070 --> 00:08:07,180 Jména nejsou strašně důležité. 178 00:08:07,180 --> 00:08:11,400 >> V tomto případě jsme se nemusí nutně mají nějaký smysl s nimi spojené. 179 00:08:11,400 --> 00:08:13,140 Takže můžeme jen zavolat jim a a b. 180 00:08:13,140 --> 00:08:14,257 To je naprosto v pořádku. 181 00:08:14,257 --> 00:08:16,090 Pokud však zjistíte, ocitnete v situaci, 182 00:08:16,090 --> 00:08:19,497 kde názvy proměnných ve skutečnosti může být důležité, 183 00:08:19,497 --> 00:08:21,830 možná budete chtít volat něco jiného než a a b 184 00:08:21,830 --> 00:08:24,701 dát jim něco víc symbolicky smysl. 185 00:08:24,701 --> 00:08:27,700 Ale v tomto případě, my opravdu vědět něco jiného o funkci. 186 00:08:27,700 --> 00:08:29,320 Chceme jen přidat dvě celá čísla. 187 00:08:29,320 --> 00:08:32,429 Tak prostě budeme nazývat ti, celá čísla a a b. 188 00:08:32,429 --> 00:08:33,990 To je jeden příklad. 189 00:08:33,990 --> 00:08:36,287 >> Proč si vzít druhou přemýšlet o tomhle, 190 00:08:36,287 --> 00:08:38,870 jak byste napsat funkci prohlášení o funkci, která 191 00:08:38,870 --> 00:08:42,940 násobí dvěma plovoucí desetinnou čárkou? 192 00:08:42,940 --> 00:08:45,910 Vzpomínáte si, co je to číslo s plovoucí čárkou je? 193 00:08:45,910 --> 00:08:48,120 Jaká by tato funkce Prohlášení vypadat? 194 00:08:48,120 --> 00:08:53,330 Vlastně jsem Doporučuji vám video pozastavit tady a vzít kolik času budete potřebovat. 195 00:08:53,330 --> 00:08:55,521 Přemýšlejte o tom, co to deklarace funkce by byla? 196 00:08:55,521 --> 00:08:56,770 Co by návratový typ být? 197 00:08:56,770 --> 00:08:58,103 Co by smysluplné jméno být? 198 00:08:58,103 --> 00:08:59,580 Co by vstupy být? 199 00:08:59,580 --> 00:09:03,190 Tak proč si pozastavit video zde a psát-up deklaraci funkce 200 00:09:03,190 --> 00:09:07,640 pro funkci, která by se násobí dvě plovoucí čárkou čísla dohromady. 201 00:09:07,640 --> 00:09:09,330 Doufejme, že jste pozastavili video. 202 00:09:09,330 --> 00:09:12,950 >> Takže pojďme se podívat na příklad z jednoho z možných prohlášení. 203 00:09:12,950 --> 00:09:17,340 Float MULT dva reals float x, float y. 204 00:09:17,340 --> 00:09:19,090 Produkt z dvou plovoucí desetinnou čárkou, 205 00:09:19,090 --> 00:09:21,710 které jsou připomenout, jak jsme se představují reálná čísla 206 00:09:21,710 --> 00:09:26,770 nebo čísla s desetinnými hodnotami v C, bude plovoucí číslo bodu. 207 00:09:26,770 --> 00:09:28,570 Když násobit desetinná desetinnou, 208 00:09:28,570 --> 00:09:30,460 budete pravděpodobně získat desetinné místo. 209 00:09:30,460 --> 00:09:31,960 Chcete-li dát mu příslušný název. 210 00:09:31,960 --> 00:09:33,810 Vynásobte dvě reálů zdá být v pořádku. 211 00:09:33,810 --> 00:09:36,620 Ale vy jste opravdu mohl nazvat MULT dva plováky, nebo plováky MULT. 212 00:09:36,620 --> 00:09:39,540 Něco takového, tak dlouho, jak to dal nějaký skutečný význam na to, co 213 00:09:39,540 --> 00:09:41,469 tato černá skříňka se chystá udělat. 214 00:09:41,469 --> 00:09:44,260 A opět, v tomto případě, my ne Zdá se, že jakýkoliv význam připojen 215 00:09:44,260 --> 00:09:46,390 se jmény Proměnné jsme předáním, 216 00:09:46,390 --> 00:09:48,645 a tak jsme jen zavolat jim x a y. 217 00:09:48,645 --> 00:09:51,020 Nyní, když jim říkáte něco jinak, to je naprosto v pořádku. 218 00:09:51,020 --> 00:09:53,310 Ve skutečnosti, pokud jste toto prohlášení místo 219 00:09:53,310 --> 00:09:55,450 pomocí čtyřhře místo plováků, pokud si vzpomínáte 220 00:09:55,450 --> 00:09:59,100 že se zdvojnásobí být jiný způsob, jak přesněji 221 00:09:59,100 --> 00:10:02,330 specifikovat reálná čísla nebo s plovoucí desetinnou čárkou proměnných. 222 00:10:02,330 --> 00:10:03,620 To je naprosto v pohodě taky. 223 00:10:03,620 --> 00:10:04,670 Buď jeden z nich by bylo v pořádku. 224 00:10:04,670 --> 00:10:06,711 Ve skutečnosti existuje několik různých kombinací 225 00:10:06,711 --> 00:10:08,410 způsobů, jak deklarovat tuto funkci. 226 00:10:08,410 --> 00:10:10,884 Ale to jsou dvě docela dobří. 227 00:10:10,884 --> 00:10:12,550 Jsme vyhlásil funkci, to je skvělé. 228 00:10:12,550 --> 00:10:15,700 Řekli jsme si, co to kompilátor je to, co budeme dělat. 229 00:10:15,700 --> 00:10:17,630 Nyní pojďme vlastně psát tuto funkci. 230 00:10:17,630 --> 00:10:20,750 Pojďme dát definici, tak, že uvnitř černé skříňky 231 00:10:20,750 --> 00:10:22,840 předvídatelné chování se děje. 232 00:10:22,840 --> 00:10:26,270 Ve skutečnosti jsme se množí dvou skutečných čísla dohromady, nebo přidávání čísel 233 00:10:26,270 --> 00:10:29,760 dohromady, nebo dělat, co to je že jsme se zeptali naši funkci dělat. 234 00:10:29,760 --> 00:10:32,780 >> Takže ve skutečnosti, pojďme se pokusit definovat násobit dvě reálů, které jsme právě 235 00:10:32,780 --> 00:10:35,350 mluvil asi před druhým. 236 00:10:35,350 --> 00:10:38,560 Nyní začátek definice funkce 237 00:10:38,560 --> 00:10:41,720 Vypadá téměř přesně stejné jako deklaraci funkce. 238 00:10:41,720 --> 00:10:43,170 Mám oba tady. 239 00:10:43,170 --> 00:10:47,770 Na vrcholu je deklarace funkce, typ, název, oddělené čárkami argumentace 240 00:10:47,770 --> 00:10:49,410 seznam, středník. 241 00:10:49,410 --> 00:10:53,800 Středník naznačuje, že že je deklarace funkce. 242 00:10:53,800 --> 00:10:57,060 Začátek funkce Definice vypadá téměř přesně 243 00:10:57,060 --> 00:11:03,790 stejný, typ, název, oddělené čárkami seznam argumentů, ne středník, 244 00:11:03,790 --> 00:11:05,206 Otevřete složená závorka. 245 00:11:05,206 --> 00:11:07,580 Otevřená složená závorka, stejně jako jsme dělali s hlavní, 246 00:11:07,580 --> 00:11:09,540 Znamená to, že jsme nyní začínají definovat 247 00:11:09,540 --> 00:11:14,567 co se děje uvnitř černé skříňky, které jsme se rozhodli zavolat Vícenásobek dvě reálů. 248 00:11:14,567 --> 00:11:15,900 Zde je jeden způsob, jak k jeho provedení. 249 00:11:15,900 --> 00:11:20,370 Dalo by se říci, bychom mohli vyhlásit nový proměnná typu float s názvem výrobku 250 00:11:20,370 --> 00:11:24,020 a přiřaďte této proměnné na hodnotu x krát y. 251 00:11:24,020 --> 00:11:27,306 A pak se vrátit výrobek. 252 00:11:27,306 --> 00:11:28,430 Co to znamená návrat sem. 253 00:11:28,430 --> 00:11:31,090 No návrat je způsob, jsme ukazují, že to, jak 254 00:11:31,090 --> 00:11:33,400 jsme absolvování výstup vycouvat. 255 00:11:33,400 --> 00:11:38,160 Takže něco vracet, je stejná jako, to je výstup černé skříňky. 256 00:11:38,160 --> 00:11:40,732 Tak to je, jak to udělat. 257 00:11:40,732 --> 00:11:42,190 Tady je další způsob, jak k jeho provedení. 258 00:11:42,190 --> 00:11:45,050 Mohli bychom se vrátit x-krát y. 259 00:11:45,050 --> 00:11:45,870 x je float. 260 00:11:45,870 --> 00:11:46,660 y je plovák. 261 00:11:46,660 --> 00:11:48,490 Takže x krát y je také float. 262 00:11:48,490 --> 00:11:50,750 Nemáme ani potřeba vytvořte další proměnnou. 263 00:11:50,750 --> 00:11:56,750 Takže to je jiný způsob, jak implementovat přesně stejnou černou skříňku. 264 00:11:56,750 --> 00:11:58,570 >> Nyní se na chvíli, video pozastavit znovu, 265 00:11:58,570 --> 00:12:01,680 a pokusit se definovat přidat dvě celých čísel, což je další funkce, které jsme 266 00:12:01,680 --> 00:12:03,090 mluvil o před chvílí. 267 00:12:03,090 --> 00:12:06,440 Znovu tady, já jsem dal funkci prohlášení, a tak středník, 268 00:12:06,440 --> 00:12:08,420 a otevřený složená závorka a uzavřenou vlnité 269 00:12:08,420 --> 00:12:12,080 výztuha k označení, kde budeme vyplnit v obsahu přidat dvě celých čísel, 270 00:12:12,080 --> 00:12:15,530 tak, že definujeme konkrétní Chování uvnitř černé skříňky. 271 00:12:15,530 --> 00:12:16,380 Takže video pozastavit. 272 00:12:16,380 --> 00:12:18,790 A vzít tolik času, jak budete muset vyzkoušet a definovat 273 00:12:18,790 --> 00:12:25,040 implementace přidání dvou celých čísel, jako je že pokud je funkce, jako výstup, hodnotu, 274 00:12:25,040 --> 00:12:29,209 to dělá, ve skutečnosti, návrat součet dvou vstupů. 275 00:12:29,209 --> 00:12:32,000 Tak jako v předchozím příkladu, existuje několik různých způsobů, 276 00:12:32,000 --> 00:12:34,210 že byste mohli realizovat přidat dvě celých čísel. 277 00:12:34,210 --> 00:12:35,130 Tady je jeden. 278 00:12:35,130 --> 00:12:37,172 Tady v oranžové barvě jsem prostě musel nějaký comments-- 279 00:12:37,172 --> 00:12:38,880 Právě jsem přidal některé Komentáře k označení 280 00:12:38,880 --> 00:12:41,400 co se děje na každém řádku kódu. 281 00:12:41,400 --> 00:12:45,430 Tak jsem deklarovat proměnnou volal součet typu int. 282 00:12:45,430 --> 00:12:47,279 Říkám částka rovná A PLUS b. 283 00:12:47,279 --> 00:12:50,070 To je místo, kde jsme skutečně dělá práce přidávání A a B společně. 284 00:12:50,070 --> 00:12:51,850 A já jsem se vrátit částku. 285 00:12:51,850 --> 00:12:56,460 A to dává smysl, protože součet je proměnná typu int. 286 00:12:56,460 --> 00:13:00,180 A co je typ dat, které toto Funkce mi říká, že to bude na výstup? 287 00:13:00,180 --> 00:13:00,680 Int. 288 00:13:00,680 --> 00:13:03,072 Takže jsem se vrátí částku, která je celé číslo variabilní. 289 00:13:03,072 --> 00:13:06,030 A v tom je smysl vzhledem k tomu, co jsme deklarovat a naše funkce 290 00:13:06,030 --> 00:13:07,320 dělat. 291 00:13:07,320 --> 00:13:09,700 >> Nyní můžete také definovat funkce tímto způsobem, 292 00:13:09,700 --> 00:13:15,260 int částka se rovná plus B- přeskočení, že První step-- a pak se vrátit součet. 293 00:13:15,260 --> 00:13:17,760 Nyní můžete mít také implementován to takhle, 294 00:13:17,760 --> 00:13:19,180 což jsem velmi nedoporučuji. 295 00:13:19,180 --> 00:13:22,540 To je špatné pro jeden styl věc a opravdu špatné konstrukci, 296 00:13:22,540 --> 00:13:24,420 ale to dělá, ve skutečnosti práce. 297 00:13:24,420 --> 00:13:30,199 Pokud budete mít tento kód, který je int přidat špatné zmije bodů C, a používat ji. 298 00:13:30,199 --> 00:13:31,990 Je to vlastně dělá přidat dvě celá čísla dohromady. 299 00:13:31,990 --> 00:13:37,632 Je to velmi špatná implementace této konkrétní chování. 300 00:13:37,632 --> 00:13:38,340 Ale to funguje. 301 00:13:38,340 --> 00:13:41,200 Je tu jen pro ilustraci bod, že my opravdu 302 00:13:41,200 --> 00:13:44,530 jedno, co se děje uvnitř černá skříňka, jak dlouho 303 00:13:44,530 --> 00:13:46,510 jak to má výstup, který jsme očekávali. 304 00:13:46,510 --> 00:13:48,870 To je špatně navržen černá skříňka. 305 00:13:48,870 --> 00:13:53,801 Ale na konci dne, to dělá ještě výstup součet plus b. 306 00:13:53,801 --> 00:13:54,300 Dobře. 307 00:13:54,300 --> 00:13:56,320 Takže jsme prohlášen funkce. 308 00:13:56,320 --> 00:13:57,490 A my jsme definované funkce. 309 00:13:57,490 --> 00:13:58,540 Tak to je opravdu dobrý. 310 00:13:58,540 --> 00:14:03,020 Nyní pojďme začít používat funkce že jsme prohlásil, a my jsme definována. 311 00:14:03,020 --> 00:14:05,960 Chcete-li volat function-- je to vlastně hezká easy-- vše, co potřebujete udělat, 312 00:14:05,960 --> 00:14:09,070 je předat ji vhodné argumenty, Argumenty typu dat 313 00:14:09,070 --> 00:14:11,600 že očekává, a pak přiřadit návrat 314 00:14:11,600 --> 00:14:15,190 Hodnota této funkce a tohle-- výmluva me-- 315 00:14:15,190 --> 00:14:19,390 přiřazení návratové hodnoty této funkce na něco správného typu. 316 00:14:19,390 --> 00:14:22,410 >> Takže pojďme se podívat na V praxi je v souboru 317 00:14:22,410 --> 00:14:27,730 volal zmije 1 bod c, který Mám v cs50 IDE. 318 00:14:27,730 --> 00:14:31,042 Takže tady je zmije 1 bod c. 319 00:14:31,042 --> 00:14:33,500 Na začátku vidíte, mám My patří, libra patří, 320 00:14:33,500 --> 00:14:35,460 Standardní IO, a cs50 tečka h. 321 00:14:35,460 --> 00:14:37,700 A pak mám funkci prohlášení. 322 00:14:37,700 --> 00:14:39,570 To je místo, kde jsem si říká kompilátoru Jsem 323 00:14:39,570 --> 00:14:42,850 bude zapsáním Funkce tzv přidat dvě celých čísel. 324 00:14:42,850 --> 00:14:45,780 Bude to výstup an integer proměnná typu. 325 00:14:45,780 --> 00:14:47,360 To je to, co tato část je právě zde. 326 00:14:47,360 --> 00:14:51,950 A pak mám dva vstupy na to a b, z nichž každý je celé číslo. 327 00:14:51,950 --> 00:14:58,250 Uvnitř hlavní, žádám uživatele o vstup tím, že říká, dej mi celé číslo. 328 00:14:58,250 --> 00:15:01,040 A oni jsou vyzváni zapomenout int, což je funkce, která 329 00:15:01,040 --> 00:15:03,240 je obsažen v knihovně cs50. 330 00:15:03,240 --> 00:15:07,660 A to je uložena v x, celé číslo variabilní. 331 00:15:07,660 --> 00:15:09,886 >> Pak jsme přiměli je na další číslo. 332 00:15:09,886 --> 00:15:13,070 Dostaneme další číslo a obchod, který v r. 333 00:15:13,070 --> 00:15:17,990 A pak, zde na lince 28, je kde jsme, aby naše volání funkce. 334 00:15:17,990 --> 00:15:23,770 Říkáme, int Z rovná přidejte 2 celých čísel x čárka y. 335 00:15:23,770 --> 00:15:25,980 Vidíte, proč to má smysl? 336 00:15:25,980 --> 00:15:29,710 x je celé číslo typ proměnné a y je celé číslo typ variabilní. 337 00:15:29,710 --> 00:15:31,220 Tak to je dobře. 338 00:15:31,220 --> 00:15:34,570 To smysl s tím, co naše funkce Prohlášení na řádku 17 vypadá. 339 00:15:34,570 --> 00:15:38,300 Čárka seznam oddělený vstup očekává, že dvě celá čísla, a a b. 340 00:15:38,300 --> 00:15:40,300 V takovém případě můžeme zavolat je, co chceme. 341 00:15:40,300 --> 00:15:42,300 Je to prostě očekává dvě celá čísla. 342 00:15:42,300 --> 00:15:44,930 A x je celé číslo a y je celé číslo. 343 00:15:44,930 --> 00:15:45,640 To funguje. 344 00:15:45,640 --> 00:15:48,680 >> A my víme, že funkce se děje na výstup an celá čísla i. 345 00:15:48,680 --> 00:15:51,290 A tak jsme se ukládání Výstup z funkce, 346 00:15:51,290 --> 00:15:56,050 přidat dva celých čísel, v typu integer proměnná, kterou voláte z. 347 00:15:56,050 --> 00:16:01,980 A pak můžeme říci, součet procent i a procento i je i procento. 348 00:16:01,980 --> 00:16:06,210 x, y a z, resp vyplnění těch procentech i je. 349 00:16:06,210 --> 00:16:08,334 Jaká je definice přidat dvě ints vypadat? 350 00:16:08,334 --> 00:16:09,125 Je to docela jednoduché. 351 00:16:09,125 --> 00:16:11,270 Je to jeden z těch jsme právě viděli před druhým, 352 00:16:11,270 --> 00:16:14,390 int částka rovná a b vratnou částku. 353 00:16:14,390 --> 00:16:15,420 To funguje? 354 00:16:15,420 --> 00:16:17,270 Pojďme uložit soubor. 355 00:16:17,270 --> 00:16:22,080 A pak tady na mém terminálu Budu dělat výbavu 1, 356 00:16:22,080 --> 00:16:23,000 a vymažu obrazovku. 357 00:16:23,000 --> 00:16:25,791 Chystám se přiblížit, protože vím, je to trochu obtížné vidět. 358 00:16:25,791 --> 00:16:31,520 359 00:16:31,520 --> 00:16:33,770 >> Tak jsme se sestavit tento program jako zmije 1. 360 00:16:33,770 --> 00:16:37,910 Takže můžeme udělat tečku lomítko zmije 1. 361 00:16:37,910 --> 00:16:40,060 Dej mi celé číslo, 10. 362 00:16:40,060 --> 00:16:42,380 Dej mi ještě číslo, 20. 363 00:16:42,380 --> 00:16:45,200 Součet 10 a 20 je 30. 364 00:16:45,200 --> 00:16:47,615 Tak jsme udělali funkce úspěšné volání. 365 00:16:47,615 --> 00:16:55,820 Můžete spustit funkci znovu, negativní 10, 17 součet záporné 10 a 17, je 7. 366 00:16:55,820 --> 00:16:57,120 Tato funkce pracuje. 367 00:16:57,120 --> 00:16:59,240 To má chování že očekáváme, že ji. 368 00:16:59,240 --> 00:17:03,610 A tak jsme udělali úspěšný funkce, definice, prohlášení, 369 00:17:03,610 --> 00:17:07,288 a funkce úspěšný volání. 370 00:17:07,288 --> 00:17:09,079 Pár různé Body o funkcích 371 00:17:09,079 --> 00:17:10,611 Než jsme došli k závěru této části. 372 00:17:10,611 --> 00:17:12,319 Připomeňme z našeho diskuse o datových typů, 373 00:17:12,319 --> 00:17:16,109 již dříve, že funkce někdy může trvat žádné vstupy. 374 00:17:16,109 --> 00:17:17,930 Pokud tomu tak je, jsme se deklarovat funkce 375 00:17:17,930 --> 00:17:19,788 jak mít seznam void argument. 376 00:17:19,788 --> 00:17:21,579 Vzpomínáš si, co se Nejběžnější funkce 377 00:17:21,579 --> 00:17:25,036 jsme tak daleko, že se viděli seznam void argument? 378 00:17:25,036 --> 00:17:27,300 To je hlavní. 379 00:17:27,300 --> 00:17:30,850 Připomeňme také, že funkci někdy nejsou ve skutečnosti mají výstup. 380 00:17:30,850 --> 00:17:34,210 V tomto případě, my deklarovat funkce jak mít návratový typ void. 381 00:17:34,210 --> 00:17:37,880 Pojďme uzavřít tuto část by řešení problému praxe. 382 00:17:37,880 --> 00:17:39,900 >> Tak tady je ten problém stanoveno. 383 00:17:39,900 --> 00:17:43,630 Chci, abyste napsat funkci volal platný trojúhelník. 384 00:17:43,630 --> 00:17:47,410 Co tato funkce by měla učinit je mít tři reálná čísla 385 00:17:47,410 --> 00:17:51,930 které představují délky tří strany trojúhelníku jako jeho parametry, 386 00:17:51,930 --> 00:17:54,550 nebo její argumenty, nebo jeho inputs-- další sadu synonym 387 00:17:54,550 --> 00:17:57,340 které se mohou vyskytnout. 388 00:17:57,340 --> 00:18:01,120 Tato funkce by měla buď výstup true nebo false 389 00:18:01,120 --> 00:18:04,960 v závislosti na tom, zda tyto tři délky jsou schopni dělat trojúhelník. 390 00:18:04,960 --> 00:18:09,930 Vzpomínáte si na datový typ, který jsme se používá k označení pravdivé nebo nepravdivé? 391 00:18:09,930 --> 00:18:11,436 Nyní, jak se vám realizovat to? 392 00:18:11,436 --> 00:18:13,810 Dobře vědí, že jsou pár pravidel týkajících se trojúhelníky 393 00:18:13,810 --> 00:18:15,480 že jsou skutečně užitečné vědět. 394 00:18:15,480 --> 00:18:18,292 Trojúhelník může mít pouze stranách s pozitivní délky. 395 00:18:18,292 --> 00:18:19,000 To dává smysl. 396 00:18:19,000 --> 00:18:21,432 Jste pravděpodobně říkal, duh. 397 00:18:21,432 --> 00:18:23,390 Další věc, kterou si uvědomit, však je, že součet 398 00:18:23,390 --> 00:18:25,484 délek kteréhokoliv dvě strany trojúhelníku 399 00:18:25,484 --> 00:18:27,650 musí být větší než délka třetí strany. 400 00:18:27,650 --> 00:18:28,690 To je vlastně pravda. 401 00:18:28,690 --> 00:18:34,150 Nemůžete mít trojúhelník stran 1, 2 a 4, například proto, že 1 plus 2 402 00:18:34,150 --> 00:18:36,270 není větší než 4. 403 00:18:36,270 --> 00:18:38,870 Takže to jsou pravidla, která určení, zda je či není tří 404 00:18:38,870 --> 00:18:42,740 vstupy mohou teoreticky tvořit trojúhelník. 405 00:18:42,740 --> 00:18:46,360 Tak se pár minut a deklarovat a definovat 406 00:18:46,360 --> 00:18:49,810 Tato funkce s názvem platné trojúhelník, takže to vlastně 407 00:18:49,810 --> 00:18:51,650 má chování zde uvedenou. 408 00:18:51,650 --> 00:18:57,030 >> To bude výstup true, pokud těchto tří stran jsou schopné obsahující trojúhelník, 409 00:18:57,030 --> 00:19:01,950 a v opačném případě false Ready to vidět, jak jste? 410 00:19:01,950 --> 00:19:04,650 Tady je jedna implementace platných trojúhelníku. 411 00:19:04,650 --> 00:19:05,770 Není to jediná. 412 00:19:05,770 --> 00:19:07,770 Yours mohou mírně lišit. 413 00:19:07,770 --> 00:19:11,040 Ale to člověk dělá, ve skutečnosti, mají chování, které jsme očekávali. 414 00:19:11,040 --> 00:19:14,450 My prohlašujeme, že náš funkce u velmi top, bool platný trojúhelník 415 00:19:14,450 --> 00:19:16,630 float x float y float z. 416 00:19:16,630 --> 00:19:18,930 Takže znovu, tato funkce trvá tři reálná čísla 417 00:19:18,930 --> 00:19:22,280 jako jeho argumenty, plovoucí proměnné bodová hodnota, 418 00:19:22,280 --> 00:19:26,510 a výstupy pravda nebo lež hodnota, která je logická, odvolání. 419 00:19:26,510 --> 00:19:28,660 Takže to je důvod, proč je návratový typ bool. 420 00:19:28,660 --> 00:19:30,016 Pak definujeme funkci. 421 00:19:30,016 --> 00:19:33,140 První věc, kterou děláme, je zkontrolujte, zda že všechny strany jsou pozitivní. 422 00:19:33,140 --> 00:19:37,010 Je-li x je menší než nebo se rovná na 0, nebo v případě, y je rovno 0, 423 00:19:37,010 --> 00:19:41,050 nebo pokud z je menší nebo rovno 0, že nemůže být trojúhelník. 424 00:19:41,050 --> 00:19:42,380 Nemají pozitivní stránky. 425 00:19:42,380 --> 00:19:45,790 A tak se můžeme vrátit false v této situaci. 426 00:19:45,790 --> 00:19:49,010 Dále jsme zkontrolujte, zda že každá dvojice vstupů 427 00:19:49,010 --> 00:19:51,830 je větší než třetí. 428 00:19:51,830 --> 00:19:54,530 >> Takže pokud x a y je méně než nebo rovno z, 429 00:19:54,530 --> 00:19:57,060 nebo-li x a z menší než nebo rovno y, 430 00:19:57,060 --> 00:20:01,730 nebo v případě, y a z je menší než nebo se rovná x, to také nemůže být platný trojúhelník. 431 00:20:01,730 --> 00:20:03,800 Takže se vracíme opět false. 432 00:20:03,800 --> 00:20:06,900 Za předpokladu, že jsme prošli oba kontrol i když, pak se můžeme vrátit pravda. 433 00:20:06,900 --> 00:20:09,440 Protože těchto tří stran jsou schopné returning-- 434 00:20:09,440 --> 00:20:11,647 vytvoření platné trojúhelník. 435 00:20:11,647 --> 00:20:12,230 A to je vše. 436 00:20:12,230 --> 00:20:13,830 Nyní jste deklarovány a definován. 437 00:20:13,830 --> 00:20:17,330 A můžete být schopni teď použití a volání této funkce. 438 00:20:17,330 --> 00:20:19,470 Dobrá práce. 439 00:20:19,470 --> 00:20:20,650 Jsem Doug Lloyd. 440 00:20:20,650 --> 00:20:22,820 To je cs50. 441 00:20:22,820 --> 00:20:24,340