1 00:00:00,000 --> 00:00:04,664 2 00:00:04,664 --> 00:00:05,580 Даг LLOYD: Во ред. 3 00:00:05,580 --> 00:00:08,877 Па сега ајде да се справи со навистина голема тема, функции. 4 00:00:08,877 --> 00:00:11,460 Досега во се разбира, сите програми кои ние сме биле пишување 5 00:00:11,460 --> 00:00:12,969 се напишани во внатрешноста на главниот. 6 00:00:12,969 --> 00:00:14,260 Тие се прилично едноставни програми. 7 00:00:14,260 --> 00:00:16,940 Вие не треба да ги имаат сите овие гранки и работите што се случуваат. 8 00:00:16,940 --> 00:00:18,773 Ние само може да го собере сите во внатрешноста на главниот и 9 00:00:18,773 --> 00:00:20,407 не се ужасно огромно. 10 00:00:20,407 --> 00:00:22,990 Но, како што се разбира продолжува и како ќе почнат да се развијат програми 11 00:00:22,990 --> 00:00:26,260 независно, тие веројатно ќе за да почне да се добие многу повеќе од 10 12 00:00:26,260 --> 00:00:27,200 или 15 линии. 13 00:00:27,200 --> 00:00:31,400 Може да се добие стотици или илјадници или десетици илјади линии на код. 14 00:00:31,400 --> 00:00:34,690 И навистина не е дека луди мисла. 15 00:00:34,690 --> 00:00:39,720 Како таква, таа веројатно не е добра идеја да се задржи сето во внатрешноста на главниот. 16 00:00:39,720 --> 00:00:43,240 Тоа може да се добие малку тешко да се најде она што го барате за, ако го направите тоа. 17 00:00:43,240 --> 00:00:47,040 >> За среќа, иако Ц, и доста секој друг програмски јазик кој 18 00:00:47,040 --> 00:00:50,386 би можеле да работат со тоа, им овозможува на не да напишеме функции. 19 00:00:50,386 --> 00:00:52,260 И јас сум само ќе земе брз настрана овде 20 00:00:52,260 --> 00:00:54,971 да се спомене дека функции е една област на компјутерски науки. 21 00:00:54,971 --> 00:00:57,970 И ќе видите многу повеќе од нив во различни точки во текот на курсот 22 00:00:57,970 --> 00:00:59,290 и ако се продолжи натаму. 23 00:00:59,290 --> 00:01:02,280 Каде што има многу синонима за ист збор. 24 00:01:02,280 --> 00:01:03,390 За да можеме да се јавите на функции. 25 00:01:03,390 --> 00:01:05,980 Но вие исто така може да ги слушне наведени како процедури, 26 00:01:05,980 --> 00:01:09,570 или методи, особено, ако некогаш сте се направиле било објектно ориентирано програмирање 27 00:01:09,570 --> 00:01:11,950 before-- и не грижете се ако не, нема да има 28 00:01:11,950 --> 00:01:14,280 голема deal-- но во ориентирана ревизија јазици 29 00:01:14,280 --> 00:01:16,129 често се нарекува методи. 30 00:01:16,129 --> 00:01:17,670 Понекогаш тие се наречени subroutines. 31 00:01:17,670 --> 00:01:20,690 Но тие навистина сите се однесуваат на истата основна идеја. 32 00:01:20,690 --> 00:01:22,480 >> Ајде да видиме што е тоа што идејата. 33 00:01:22,480 --> 00:01:23,310 Она што е во функција? 34 00:01:23,310 --> 00:01:26,470 И функција е навистина ништо повеќе од црна кутија. 35 00:01:26,470 --> 00:01:31,430 Црна кутија која има множество на нула или повеќе влезови и еден излез. 36 00:01:31,430 --> 00:01:33,420 Така на пример, овој Може да биде во функција. 37 00:01:33,420 --> 00:01:35,510 Ова е во функција се нарекува функционална. 38 00:01:35,510 --> 00:01:39,330 И тоа трае три влеза a, b и c. 39 00:01:39,330 --> 00:01:42,580 И во внатрешноста дека црната кутија, ние не знаат точно она што го прави, 40 00:01:42,580 --> 00:01:45,100 но тоа процеси влезови на некој начин, а потоа го 41 00:01:45,100 --> 00:01:48,680 дава еден излез, во овој случај, z. 42 00:01:48,680 --> 00:01:50,504 Како да се направи тоа малку помалку апстрактен, 43 00:01:50,504 --> 00:01:52,420 Може да се каже дека можеби ние имаат функција наречена 44 00:01:52,420 --> 00:01:58,750 додадете кој ги зема три влеза, б, и в и процеси на производството на некој начин 45 00:01:58,750 --> 00:02:01,010 во внатрешноста на црна кутија за произведе еден излез. 46 00:02:01,010 --> 00:02:05,190 Значи во овој случај, ако додадете трае 3, 6 и 7. 47 00:02:05,190 --> 00:02:07,020 Некаде во внатрешноста на додадете функција, ние би 48 00:02:07,020 --> 00:02:09,750 очекува од нив да се собираат заедно за да се произведе излез, што 49 00:02:09,750 --> 00:02:13,220 е 3 плус 6 плус 7 или 16. 50 00:02:13,220 --> 00:02:17,940 >> Слично на тоа, ќе имаат функција наречена mult кој трае два елемента, А и Б, 51 00:02:17,940 --> 00:02:21,070 ги обработува на некој начин како дека на излез од функцијата 52 00:02:21,070 --> 00:02:22,920 е производ на две влезови. 53 00:02:22,920 --> 00:02:25,080 Двата влеза множи заедно. 54 00:02:25,080 --> 00:02:29,150 4 и 5 се пренесува во mult, нешто се случува, на излез очекуваме 55 00:02:29,150 --> 00:02:31,090 е 20. 56 00:02:31,090 --> 00:02:32,507 Зошто ние го нарекуваме црна кутија? 57 00:02:32,507 --> 00:02:34,840 Па ако не пишуваме Функционира самите себе, што 58 00:02:34,840 --> 00:02:36,869 ние го направивме доста досега CS50. 59 00:02:36,869 --> 00:02:39,910 Видовме печатење ѓ, на пример, кој е функција која ние не пишувам 60 00:02:39,910 --> 00:02:42,305 нас, но го користат во секое време. 61 00:02:42,305 --> 00:02:44,180 Ако ние не се пишува самите функции, 62 00:02:44,180 --> 00:02:48,450 ние навистина не треба да знаете како тоа е всушност спроведени под хауба. 63 00:02:48,450 --> 00:02:51,710 >> Така на пример на црна кутија јас само што ја покажавте за множење, 64 00:02:51,710 --> 00:02:53,740 mult А, Б може да биде defined-- и ова е само 65 00:02:53,740 --> 00:02:57,902 некои може да биде pseudocode-- дефинирани како излез пати b. 66 00:02:57,902 --> 00:02:58,860 Тоа има смисла, нели. 67 00:02:58,860 --> 00:03:01,370 Ако имаме функција наречена mult кој трае два влеза. 68 00:03:01,370 --> 00:03:04,750 Ние би очекувале дека излезот би биде два влеза множи заедно, 69 00:03:04,750 --> 00:03:06,240 пати b. 70 00:03:06,240 --> 00:03:09,170 Mult но, исто така, би можело да биде спроведува, како таков, 71 00:03:09,170 --> 00:03:13,150 имаме контра променливата се поставени во внатрешноста на mult на 0. 72 00:03:13,150 --> 00:03:18,000 А потоа ние го повторите овој процес б пати додадете до шанкот. 73 00:03:18,000 --> 00:03:24,270 На пример, ако ние се размножуваат 3а страна 5б, би можеле да кажеме постави контра на 0, 74 00:03:24,270 --> 00:03:27,700 повтори пет пати, додадете 3 до шанкот. 75 00:03:27,700 --> 00:03:34,490 Па ние да почне на 0, а потоа го правиме ова пет пати 3, 6, 9, 12, 15. 76 00:03:34,490 --> 00:03:37,500 Тоа е истиот резултат. Ние уште се 3 пати само 5 77 00:03:37,500 --> 00:03:39,500 спроведувањето е поинаква. 78 00:03:39,500 --> 00:03:41,490 >> Тоа е она што ние подразбираме кога велиме црна кутија. 79 00:03:41,490 --> 00:03:44,406 Тоа само значи дека ние навистина не се грижат како тоа се спроведува под хауба 80 00:03:44,406 --> 00:03:46,170 додека производството е она што го очекуваме. 81 00:03:46,170 --> 00:03:49,045 Всушност, тоа е дел од договорот на користење на функции, особено 82 00:03:49,045 --> 00:03:50,630 функции што другите пишуваат. 83 00:03:50,630 --> 00:03:53,980 Однесувањето е секогаш ќе да биде типична, непредвидливи 84 00:03:53,980 --> 00:03:55,420 врз основа на името на функцијата. 85 00:03:55,420 --> 00:03:57,500 А тоа е зошто тоа е навистина важно кога ќе се напише функции 86 00:03:57,500 --> 00:04:00,020 или кога има други луѓе пишуваат функции на кои можете да го користите, 87 00:04:00,020 --> 00:04:03,590 дека оние функции имаат јасно, релативно очигледни имиња, 88 00:04:03,590 --> 00:04:04,990 и се добро документирани. 89 00:04:04,990 --> 00:04:08,560 Што е секако случај за функција како печати f. 90 00:04:08,560 --> 00:04:09,860 >> Па зошто ние ги користиме функции? 91 00:04:09,860 --> 00:04:14,220 И како што реков претходно, ако ние пишуваме сите на нашиот код во внатрешноста на главниот нешта 92 00:04:14,220 --> 00:04:17,120 може да се навистина незгодни и навистина комплицирано. 93 00:04:17,120 --> 00:04:19,980 Функции ни овозможува на способноста да се организираат работите и да ги разбие 94 00:04:19,980 --> 00:04:24,540 многу комплициран проблем во многу повеќе податлив суб делови. 95 00:04:24,540 --> 00:04:28,130 Функции, исто така, ни овозможи да се поедноставување на процесот на кодирање. 96 00:04:28,130 --> 00:04:33,080 Тоа е многу полесно да се debug 10 линија функција наспроти 100 линија 97 00:04:33,080 --> 00:04:35,890 функција или функција на 1.000 линија. 98 00:04:35,890 --> 00:04:38,400 Ако ние само треба да се debug мали парчиња во исто време, 99 00:04:38,400 --> 00:04:42,110 или да напишете мали парчиња во тоа време, тоа го прави што програмирање искуство 100 00:04:42,110 --> 00:04:43,070 многу подобро. 101 00:04:43,070 --> 00:04:44,910 Верувај ми на оној. 102 00:04:44,910 --> 00:04:48,400 >> И на крај, ако ние пишуваме функции ние може повторно да ги користите тие различни делови. 103 00:04:48,400 --> 00:04:49,880 Функции може да се рециклираат. 104 00:04:49,880 --> 00:04:51,880 Тие може да се користи во една или друга програма. 105 00:04:51,880 --> 00:04:53,713 Веќе сте писмени функцијата, се што 106 00:04:53,713 --> 00:04:56,530 треба да направите е да се каже дека програмата каде да се најде таа функција. 107 00:04:56,530 --> 00:04:59,680 Ние сме биле за рециклирање и користење печати ѓ за над 40 години. 108 00:04:59,680 --> 00:05:02,150 Но тоа беше само напишано едно време. 109 00:05:02,150 --> 00:05:04,270 Доста корисно, во право. 110 00:05:04,270 --> 00:05:04,830 Во ред. 111 00:05:04,830 --> 00:05:06,040 Па функции се големи. 112 00:05:06,040 --> 00:05:06,860 Ние знаеме дека. 113 00:05:06,860 --> 00:05:08,700 Сега ајде да почнеме да ги пишувате. 114 00:05:08,700 --> 00:05:10,830 Ајде да започне да добива нив во нашите програми. 115 00:05:10,830 --> 00:05:13,869 Со цел да го направат тоа, првиот нешто што го правиме е да изјави функцијата. 116 00:05:13,869 --> 00:05:16,160 Кога ќе се изјасни за функцијата она што го прави во основа 117 00:05:16,160 --> 00:05:18,900 кажува компајлер, еј, само да знаете, 118 00:05:18,900 --> 00:05:20,850 Одам да се пишува функција подоцна 119 00:05:20,850 --> 00:05:22,987 и тука е она што тоа ќе изгледа. 120 00:05:22,987 --> 00:05:24,820 Причината за ова е бидејќи може компајлери 121 00:05:24,820 --> 00:05:27,900 направи некои чудни работи ако тие го гледаат збир на симболи 122 00:05:27,900 --> 00:05:29,560 дека тие не се запознаени со. 123 00:05:29,560 --> 00:05:33,000 Па ние само им даде на компајлерот на челото, јас сум една функција 124 00:05:33,000 --> 00:05:35,492 и тоа се случува да го направите тоа. 125 00:05:35,492 --> 00:05:38,450 Декларации функција генерално ако што го организира вашиот код на некој начин 126 00:05:38,450 --> 00:05:41,872 дека и другите ќе бидат во можност да се разбере и да се направи употреба на, 127 00:05:41,872 --> 00:05:44,330 обично сакаат да се стави сите на функцијата на вашиот декларации 128 00:05:44,330 --> 00:05:48,220 во самиот врв на вашиот код, право пред да почнете да пишувате главните дури. 129 00:05:48,220 --> 00:05:50,770 И погодно, има многу стандардна форма 130 00:05:50,770 --> 00:05:53,500 дека секоја функција декларација следува. 131 00:05:53,500 --> 00:05:56,090 Тие се сите речиси изгледа вака. 132 00:05:56,090 --> 00:06:01,440 Постојат три дела на функција декларација, врати видот, име, 133 00:06:01,440 --> 00:06:03,420 и листа на аргументи. 134 00:06:03,420 --> 00:06:07,180 >> Сега врати видот е каков вид на променлива излез функција волја. 135 00:06:07,180 --> 00:06:10,710 Така на пример, ако мислиме назад Пред минута до две множење 136 00:06:10,710 --> 00:06:15,690 броеви функција, што очекуваме, ако множете цел број со цел број 137 00:06:15,690 --> 00:06:18,502 на излез ќе биде Веројатно цел број, во право. 138 00:06:18,502 --> 00:06:20,710 Множи два цели броја заедно, добивате цел број. 139 00:06:20,710 --> 00:06:24,167 Па врати видот на таа функција би било Инт. 140 00:06:24,167 --> 00:06:26,000 Име е она што го сакате за да го повикате вашите функција. 141 00:06:26,000 --> 00:06:29,330 Ова е веројатно најмалку важен дел од декларацијата на функција, 142 00:06:29,330 --> 00:06:30,827 во однос на функционалноста. 143 00:06:30,827 --> 00:06:33,160 Но всушност е веројатно една од најважните делови 144 00:06:33,160 --> 00:06:36,243 на декларацијата за улога во поглед на знаејќи што на функцијата, всушност, 145 00:06:36,243 --> 00:06:37,120 го прави тоа. 146 00:06:37,120 --> 00:06:40,474 Ако името на вашата функција f и g или h или мистерија или нешто слично, 147 00:06:40,474 --> 00:06:42,765 ти си веројатно се случува да се добие малку сопнат обидува 148 00:06:42,765 --> 00:06:44,650 да се сетам на она што го прават тие функции. 149 00:06:44,650 --> 00:06:47,880 Па затоа е важно да им даде на вашиот значајни имиња функција е. 150 00:06:47,880 --> 00:06:51,030 >> И на крај, е аргумент листа листа на разделени со запирки 151 00:06:51,030 --> 00:06:55,260 на сите влезови на вашата функција, од кои секоја има тип и име. 152 00:06:55,260 --> 00:06:57,840 Затоа, не само што мора да се определи што тип на променлива 153 00:06:57,840 --> 00:07:00,760 излез функција волја, исто така, сакаат да се определи 154 00:07:00,760 --> 00:07:07,694 каков тип и типови на променливи функција ќе биде прифаќањето како влезови. 155 00:07:07,694 --> 00:07:08,860 Значи, да се направи еден пример тука. 156 00:07:08,860 --> 00:07:10,220 Ајде да ги разгледаме на поконкретни еден. 157 00:07:10,220 --> 00:07:13,130 Па еве еден пример на функција декларација за функција што 158 00:07:13,130 --> 00:07:14,925 ќе додадете два цели броја заедно. 159 00:07:14,925 --> 00:07:17,800 Збирот на два цели броја ќе да биде цел број, како и, како што само 160 00:07:17,800 --> 00:07:18,450 дискутира. 161 00:07:18,450 --> 00:07:21,610 И така на врати видот, тука во зелено, ќе биде Инт. 162 00:07:21,610 --> 00:07:25,190 Кои само ни кои додаваат два ints раскажува се случува да се, на крајот на денот, 163 00:07:25,190 --> 00:07:28,799 излез, или плукаат назад до нас, цел број. 164 00:07:28,799 --> 00:07:31,590 Оглед на тоа што на оваа функција го прави тоа сакате да го даде некое значајно име. 165 00:07:31,590 --> 00:07:33,630 Додадете две ints чини што е соодветно, со оглед на 166 00:07:33,630 --> 00:07:37,574 ние сме преземање два цели броја како влезови и се надевам да ги додавате заедно. 167 00:07:37,574 --> 00:07:40,240 Тоа може да биде малку тежок име и искрено оваа функција 168 00:07:40,240 --> 00:07:42,430 веројатно не е потребно бидејќи имаме додавање 169 00:07:42,430 --> 00:07:46,310 оператор, ако се потсетиме на нашите дискусија на оператори, претходно. 170 00:07:46,310 --> 00:07:49,650 Но, да речеме за доброто на аргумент дека оваа функција е корисна 171 00:07:49,650 --> 00:07:52,860 и така ќе го наречеме тоа додадете две ints. 172 00:07:52,860 --> 00:07:55,230 И на крај, оваа функција се два влеза. 173 00:07:55,230 --> 00:07:56,960 Од кои секоја е цел број. 174 00:07:56,960 --> 00:07:59,900 Па ние имаме овој запирка одделени листа на влезови. 175 00:07:59,900 --> 00:08:02,830 Сега ние генерално сакаат да даде име на секој од нив 176 00:08:02,830 --> 00:08:05,070 така што тие може да се користи во рамките на функција. 177 00:08:05,070 --> 00:08:07,180 Имињата не се многу важни. 178 00:08:07,180 --> 00:08:11,400 >> Во овој случај, ние не мора имаат смисла прикачен на нив. 179 00:08:11,400 --> 00:08:13,140 Па ние само може да ги наречеме a и b. 180 00:08:13,140 --> 00:08:14,257 Тоа е сосема во ред. 181 00:08:14,257 --> 00:08:16,090 Ако сепак, ќе се најде во ситуација 182 00:08:16,090 --> 00:08:19,497 каде што имињата на променливите всушност би можеле да бидат важни, 183 00:08:19,497 --> 00:08:21,830 можеби ќе сакате да ги нарекуваат нешто друго од А и Б 184 00:08:21,830 --> 00:08:24,701 да им даде нешто повеќе симболично значење. 185 00:08:24,701 --> 00:08:27,700 Но, во овој случај, ние навистина не знам ништо во врска со функцијата. 186 00:08:27,700 --> 00:08:29,320 Ние само сакаме да додадете два цели броеви. 187 00:08:29,320 --> 00:08:32,429 Па ние само ќе се јавите оние кои се цели броеви a и b. 188 00:08:32,429 --> 00:08:33,990 Тоа е еден пример. 189 00:08:33,990 --> 00:08:36,287 >> Зошто не можете да се земе втора да се размислува за ова, 190 00:08:36,287 --> 00:08:38,870 како ќе се напише функција декларација за функција што 191 00:08:38,870 --> 00:08:42,940 Множење на две децимални броеви? 192 00:08:42,940 --> 00:08:45,910 Се сеќаваш ли на лебдат број поента е? 193 00:08:45,910 --> 00:08:48,120 Што би ова функција декларација изгледа? 194 00:08:48,120 --> 00:08:53,330 Јас всушност препорачуваме да го паузирате видео тука и да се земе колку време ви треба. 195 00:08:53,330 --> 00:08:55,521 Размислете за тоа што овој функција декларација ќе биде? 196 00:08:55,521 --> 00:08:56,770 Она што ќе биде од типот за возврат? 197 00:08:56,770 --> 00:08:58,103 Што ќе биде значајно име? 198 00:08:58,103 --> 00:08:59,580 Кој би бил влезови? 199 00:08:59,580 --> 00:09:03,190 Па зошто да не го паузирате видео тука и да пишува-up декларација функција 200 00:09:03,190 --> 00:09:07,640 за функција која ќе се размножуваат две лебдат точка броеви заедно. 201 00:09:07,640 --> 00:09:09,330 Се надевам дека ќе паузира видеото. 202 00:09:09,330 --> 00:09:12,950 >> Па ајде да ги разгледаме во еден пример на едно можно декларација. 203 00:09:12,950 --> 00:09:17,340 Плови mult две reals плови x, y плови. 204 00:09:17,340 --> 00:09:19,090 На производот на две на децимални броеви, 205 00:09:19,090 --> 00:09:21,710 кои се потсетиме како ние претставуваат реални броеви 206 00:09:21,710 --> 00:09:26,770 или броеви со децимален вредности во в, ќе биде децимален број. 207 00:09:26,770 --> 00:09:28,570 Кога ќе се размножуваат на децималниот од децималниот, 208 00:09:28,570 --> 00:09:30,460 ти си веројатно се случува да се добие децимални. 209 00:09:30,460 --> 00:09:31,960 Сакате да го даде релевантни име. 210 00:09:31,960 --> 00:09:33,810 Размножуваат две reals чини парична казна. 211 00:09:33,810 --> 00:09:36,620 Но, навистина би можеле да го наречеме mult две плови, или mult плови. 212 00:09:36,620 --> 00:09:39,540 Такво нешто, се додека тоа даде некои вистинската смисла на она што 213 00:09:39,540 --> 00:09:41,469 оваа црна кутија што се случува да се направи. 214 00:09:41,469 --> 00:09:44,260 И повторно, во овој случај, ние не се чини дека имаат некакво значење во прилог 215 00:09:44,260 --> 00:09:46,390 за имињата на променливи сме поминува во, 216 00:09:46,390 --> 00:09:48,645 па ние само ги нарекуваат x и y. 217 00:09:48,645 --> 00:09:51,020 Сега ако ги нарекуваат нешто друго, тоа е сосема во ред. 218 00:09:51,020 --> 00:09:53,310 Всушност, ако не оваа декларација наместо 219 00:09:53,310 --> 00:09:55,450 наместо користење на двојки на лебди, ако се потсетиме 220 00:09:55,450 --> 00:09:59,100 кој двојки се различна начин да се поточно 221 00:09:59,100 --> 00:10:02,330 наведете реални броеви или подвижна запирка променливи. 222 00:10:02,330 --> 00:10:03,620 Тоа е сосема во ред. 223 00:10:03,620 --> 00:10:04,670 Или еден од оние ќе биде во ред. 224 00:10:04,670 --> 00:10:06,711 Всушност, постојат неколку различни комбинации 225 00:10:06,711 --> 00:10:08,410 начини да се изјасни за оваа функција. 226 00:10:08,410 --> 00:10:10,884 Но, ова се две прилично добри. 227 00:10:10,884 --> 00:10:12,550 Ние се изјаснивме функција, тоа е одлично. 228 00:10:12,550 --> 00:10:15,700 Ние сме изјави компајлерот она што е, она што ние ќе треба да се прави. 229 00:10:15,700 --> 00:10:17,630 Сега ајде да всушност пишува таа функција. 230 00:10:17,630 --> 00:10:20,750 Ајде да се даде дефиниција, така што во внатрешноста на црна кутија 231 00:10:20,750 --> 00:10:22,840 предвидливо однесување се случува. 232 00:10:22,840 --> 00:10:26,270 Всушност, ние се размножуваат два реални броеви заедно, или додавање на броеви 233 00:10:26,270 --> 00:10:29,760 заедно, или прави што и да е кои ги прашавме нашите функцијата за да се направи. 234 00:10:29,760 --> 00:10:32,780 >> Така, всушност, да се обидеме и да ги дефинира размножуваат две reals кои ние едноставно 235 00:10:32,780 --> 00:10:35,350 зборуваше пред една секунда за. 236 00:10:35,350 --> 00:10:38,560 Сега на почетокот на дефиниција функција 237 00:10:38,560 --> 00:10:41,720 изгледа речиси иста како декларација на функција. 238 00:10:41,720 --> 00:10:43,170 Имам и двете од нив тука. 239 00:10:43,170 --> 00:10:47,770 На врвот е декларација на функцијата, тип, име, разделени со запирки аргумент 240 00:10:47,770 --> 00:10:49,410 листа, точка-запирка. 241 00:10:49,410 --> 00:10:53,800 Запирка укажува дека тоа е изјава на функција. 242 00:10:53,800 --> 00:10:57,060 На почетокот на функција дефиниција изгледа речиси исто 243 00:10:57,060 --> 00:11:03,790 истиот, тип, име, разделени со запирки листа на аргументи, без запирка, 244 00:11:03,790 --> 00:11:05,206 отвори кадрава голема заграда. 245 00:11:05,206 --> 00:11:07,580 Отворениот кадрава голема заграда, исто како ние сме прави со главниот, 246 00:11:07,580 --> 00:11:09,540 значи дека ние сме сега започнуваат да ја дефинираат 247 00:11:09,540 --> 00:11:14,567 она што се случува во внатрешноста на црна кутија што ние одлучивме да се јавите mult две reals. 248 00:11:14,567 --> 00:11:15,900 Еве еден начин да се имплементира. 249 00:11:15,900 --> 00:11:20,370 Би можеле да кажеме, ние би можеле да се изјасни за новиот променлива од тип float нарекува производ 250 00:11:20,370 --> 00:11:24,020 и му ја додели таа променлива за вредноста на y x пати. 251 00:11:24,020 --> 00:11:27,306 И потоа да се вратите производот. 252 00:11:27,306 --> 00:11:28,430 Што не значи враќање тука. 253 00:11:28,430 --> 00:11:31,090 И враќање е начинот на кој укажуваме на тоа е начинот на 254 00:11:31,090 --> 00:11:33,400 ние сме полагање на излез врати надвор. 255 00:11:33,400 --> 00:11:38,160 Па се врати нешто, е исто како и, ова е излезот од црната кутија. 256 00:11:38,160 --> 00:11:40,732 Па тоа е како да го направи тоа. 257 00:11:40,732 --> 00:11:42,190 Еве уште еден начин да се имплементира. 258 00:11:42,190 --> 00:11:45,050 Ние може само да се вратат x пати y. 259 00:11:45,050 --> 00:11:45,870 x е број со подвижна запирка. 260 00:11:45,870 --> 00:11:46,660 y е број со подвижна запирка. 261 00:11:46,660 --> 00:11:48,490 Толку пати х у е, исто така, да се одржи. 262 00:11:48,490 --> 00:11:50,750 Ние дури и не треба да се се создаде уште една променлива. 263 00:11:50,750 --> 00:11:56,750 Значи тоа е еден поинаков начин да имплементираат исти црна кутија. 264 00:11:56,750 --> 00:11:58,570 >> Сега, земи еден момент, паузирате видеото, повторно, 265 00:11:58,570 --> 00:12:01,680 и да се обиде и да ги дефинира додадете две ints, што е од друга функција која 266 00:12:01,680 --> 00:12:03,090 зборуваше за еден миг. 267 00:12:03,090 --> 00:12:06,440 Повторно тука, јас сум се стави во функција декларација, така и на запирка, 268 00:12:06,440 --> 00:12:08,420 и отворен кадрава голема заграда и затворен кадрава 269 00:12:08,420 --> 00:12:12,080 се подготвуваат да се покаже каде ќе ги пополнат во содржината додадете две ints, 270 00:12:12,080 --> 00:12:15,530 така што ние се дефинираат одделни однесување во внатрешноста на црна кутија. 271 00:12:15,530 --> 00:12:16,380 Па го паузирате видео. 272 00:12:16,380 --> 00:12:18,790 И да ги преземат онолку време колку што треба да се обиде и да ги дефинира 273 00:12:18,790 --> 00:12:25,040 имплементација на додадете две ints, како дека кога функцијата излези на вредност, 274 00:12:25,040 --> 00:12:29,209 тоа го прави, всушност, враќање збирот на два влеза. 275 00:12:29,209 --> 00:12:32,000 Па исто како и во претходниот пример, постојат неколку различни начини 276 00:12:32,000 --> 00:12:34,210 дека може да се имплементира додадете две ints. 277 00:12:34,210 --> 00:12:35,130 Еве еден. 278 00:12:35,130 --> 00:12:37,172 Овде во портокалова сум само имаше некои comments-- 279 00:12:37,172 --> 00:12:38,880 Јас сум само додаде некои коментари за да се покаже 280 00:12:38,880 --> 00:12:41,400 она што се случува на секоја линија код. 281 00:12:41,400 --> 00:12:45,430 Па јас декларирате променлива наречен сума од тип int. 282 00:12:45,430 --> 00:12:47,279 Велам сума еднаква на плус б. 283 00:12:47,279 --> 00:12:50,070 Тоа е местото каде што ние, всушност, прави работата додавање на А и Б заедно. 284 00:12:50,070 --> 00:12:51,850 И ќе се вратам сума. 285 00:12:51,850 --> 00:12:56,460 И дека има смисла, бидејќи Сумата е променлива од тип int. 286 00:12:56,460 --> 00:13:00,180 И, што е дека овој тип на податоци Функцијата ми кажува дека ќе излез? 287 00:13:00,180 --> 00:13:00,680 Инт. 288 00:13:00,680 --> 00:13:03,072 Па јас сум враќање сума, која е целобројна променлива. 289 00:13:03,072 --> 00:13:06,030 И кој што има смисла со оглед на тоа што сме го прогласена и дефинирани нашата функција 290 00:13:06,030 --> 00:13:07,320 да направиш. 291 00:13:07,320 --> 00:13:09,700 >> Сега можете исто така може да се дефинира на функцијата на овој начин, 292 00:13:09,700 --> 00:13:15,260 int сума еднаква на плус b-- прескокнете дека Првиот step-- а потоа, да се вратите сума. 293 00:13:15,260 --> 00:13:17,760 Сега можете исто така може да има го спроведува овој начин, 294 00:13:17,760 --> 00:13:19,180 кои јас многу не се препорачува. 295 00:13:19,180 --> 00:13:22,540 Ова е лошо за еден стил работа и навистина лош дизајн, 296 00:13:22,540 --> 00:13:24,420 но тоа го прави, всушност, се работи. 297 00:13:24,420 --> 00:13:30,199 Ако се земе овој код, кој е цел број додадете лоша ехидна точка в, и го користат. 298 00:13:30,199 --> 00:13:31,990 Тоа всушност се додаде два цели броја заедно. 299 00:13:31,990 --> 00:13:37,632 Тоа е многу слаба имплементација на овој особено однесување. 300 00:13:37,632 --> 00:13:38,340 Но, тоа не функционира. 301 00:13:38,340 --> 00:13:41,200 Тоа е само тука за да се илустрира точка дека ние навистина не 302 00:13:41,200 --> 00:13:44,530 е гајле што се случува во внатрешноста црна кутија, колку 303 00:13:44,530 --> 00:13:46,510 како што има излез кој што очекуваме. 304 00:13:46,510 --> 00:13:48,870 Ова е лошо дизајниран црна кутија. 305 00:13:48,870 --> 00:13:53,801 Но, на крајот на денот, тоа го прави уште излез збирот од а плус b. 306 00:13:53,801 --> 00:13:54,300 Во ред. 307 00:13:54,300 --> 00:13:56,320 Значи ние се изјаснивме функции. 308 00:13:56,320 --> 00:13:57,490 И ние дефинирана функција. 309 00:13:57,490 --> 00:13:58,540 Така што е навистина добро. 310 00:13:58,540 --> 00:14:03,020 Сега ајде да почнеме да ги користите функциите дека ние се изјаснивме и ние го дефинира. 311 00:14:03,020 --> 00:14:05,960 За да повикате function-- тоа е всушност прилично easy-- сите што треба да направите 312 00:14:05,960 --> 00:14:09,070 е да го давате соодветни аргументи, аргументи од типот на податоците 313 00:14:09,070 --> 00:14:11,600 дека очекува и потоа му ја додели на враќање 314 00:14:11,600 --> 00:14:15,190 вредноста на таа функција и this-- изговор me-- 315 00:14:15,190 --> 00:14:19,390 доделите на повратната вредност на таа функција до нешто од точниот тип. 316 00:14:19,390 --> 00:14:22,410 >> Па ајде да го погледне во Ова во пракса во датотека 317 00:14:22,410 --> 00:14:27,730 наречен ехидна 1 точка в кој Имам во мојата CS50 ИРО. 318 00:14:27,730 --> 00:14:31,042 Па тука е ехидна 1 точка в. 319 00:14:31,042 --> 00:14:33,500 На почетокот го гледате Јас имам мојата вклучува, фунта вклучуваат, 320 00:14:33,500 --> 00:14:35,460 стандард IO и CS50 точка ч. 321 00:14:35,460 --> 00:14:37,700 А потоа имам декларација мојата функција. 322 00:14:37,700 --> 00:14:39,570 Ова е местото каде сум кажување на компајлерот сум 323 00:14:39,570 --> 00:14:42,850 ќе треба да се пишува функција наречена додадете две ints. 324 00:14:42,850 --> 00:14:45,780 Тоа се случува да излез на целобројна променлива тип. 325 00:14:45,780 --> 00:14:47,360 Тоа е она што овој дел е во право тука. 326 00:14:47,360 --> 00:14:51,950 А потоа имам два влезови за тоа и b, од кои секоја е цел број. 327 00:14:51,950 --> 00:14:58,250 Во внатрешноста на главниот, јас побара од корисникот за внесување, велејќи, дај ми цел број. 328 00:14:58,250 --> 00:15:01,040 И тие се поттикнати да се заборави int, која е функција која 329 00:15:01,040 --> 00:15:03,240 е вклучена во CS50 библиотека. 330 00:15:03,240 --> 00:15:07,660 И дека добива чуваат во x, целобројна променлива. 331 00:15:07,660 --> 00:15:09,886 >> Потоа го прашува за уште еден цел број. 332 00:15:09,886 --> 00:15:13,070 Ние се добие уште еден цел број и чување на кои во y. 333 00:15:13,070 --> 00:15:17,990 И потоа, тука на линија 28, е каде што ние правиме повик на функција. 334 00:15:17,990 --> 00:15:23,770 Ние велиме, int z еднаквите додадете 2 ints x y запирка. 335 00:15:23,770 --> 00:15:25,980 Дали ви се види зошто ова има смисла? 336 00:15:25,980 --> 00:15:29,710 x е променлива број тип и y е променлива број тип. 337 00:15:29,710 --> 00:15:31,220 Па тоа е добро. 338 00:15:31,220 --> 00:15:34,570 Тоа има смисла со она што нашата функција изјава на линија 17 изгледа како. 339 00:15:34,570 --> 00:15:38,300 Запирки листа за внес очекува два цели броеви, a и b. 340 00:15:38,300 --> 00:15:40,300 Во тој случај, може да се јавите нив она што го сакаме. 341 00:15:40,300 --> 00:15:42,300 Тоа едноставно се очекува два цели броја. 342 00:15:42,300 --> 00:15:44,930 И x е цел број и y е цел број. 343 00:15:44,930 --> 00:15:45,640 Која работи. 344 00:15:45,640 --> 00:15:48,680 >> И знаеме дека функцијата ќе до излез на цели броеви, како и. 345 00:15:48,680 --> 00:15:51,290 Така, ние чување на излез на функцијата, 346 00:15:51,290 --> 00:15:56,050 додадете две ints, во број тип променлива, што ние повикуваме на ●. 347 00:15:56,050 --> 00:16:01,980 И тогаш можеме да кажеме, збирот на проценти i и проценти i е посто. 348 00:16:01,980 --> 00:16:06,210 x, y и z, соодветно пополнување на овие проценти i е. 349 00:16:06,210 --> 00:16:08,334 Што е дефиницијата на додадете две ints изгледа? 350 00:16:08,334 --> 00:16:09,125 Тоа е прилично едноставна. 351 00:16:09,125 --> 00:16:11,270 Тоа е еден од оние што ги само видов пред една секунда, 352 00:16:11,270 --> 00:16:14,390 int сума еднаква на плус б враќање сума. 353 00:16:14,390 --> 00:16:15,420 Оваа работа? 354 00:16:15,420 --> 00:16:17,270 Ајде да ја зачувам датотеката. 355 00:16:17,270 --> 00:16:22,080 А потоа надолу тука на мојот терминал Одам да се направи ехидна 1, 356 00:16:22,080 --> 00:16:23,000 и јас го исчистите мојот екран. 357 00:16:23,000 --> 00:16:25,791 Одам да зумирате, бидејќи знам тоа е малку тешко да се види. 358 00:16:25,791 --> 00:16:31,520 359 00:16:31,520 --> 00:16:33,770 >> Па ние собере на оваа програма како ехидна 1. 360 00:16:33,770 --> 00:16:37,910 За да можеме да се направи точка црта ехидна 1. 361 00:16:37,910 --> 00:16:40,060 Дај ми цел број, 10. 362 00:16:40,060 --> 00:16:42,380 Дај ми друга цел број, 20. 363 00:16:42,380 --> 00:16:45,200 Сума од 10 и 20 е 30. 364 00:16:45,200 --> 00:16:47,615 Така, направивме успешна повик на функција. 365 00:16:47,615 --> 00:16:55,820 Можете да се кандидира за функција еднаш, негативни 10, 17 збир на негативни 10 и 17 е 7. 366 00:16:55,820 --> 00:16:57,120 Оваа функција работи. 367 00:16:57,120 --> 00:16:59,240 Таа има за однесување дека е можно да. 368 00:16:59,240 --> 00:17:03,610 И така ние ги направивме успешна функција, дефиниција, декларација, 369 00:17:03,610 --> 00:17:07,288 и успешна повик на функција. 370 00:17:07,288 --> 00:17:09,079 Двојката Разно поени за функциите 371 00:17:09,079 --> 00:17:10,611 пред да се заклучи оваа секција. 372 00:17:10,611 --> 00:17:12,319 Да се ​​потсетиме на нашите дискусија на типови на податоци, 373 00:17:12,319 --> 00:17:16,109 претходно, која функционира понекогаш може да потрае не влезови. 374 00:17:16,109 --> 00:17:17,930 Ако тоа е случај, ние прогласи за функцијата 375 00:17:17,930 --> 00:17:19,788 како што имаат листа на аргумент неважечки. 376 00:17:19,788 --> 00:17:21,579 Се сеќаваш ли на она што Најчестата функција 377 00:17:21,579 --> 00:17:25,036 ние сме виделе досега дека го листа празнина аргумент е? 378 00:17:25,036 --> 00:17:27,300 Тоа е главна. 379 00:17:27,300 --> 00:17:30,850 Потсетиме, исто така таа функција понекогаш не, всушност имаат излез. 380 00:17:30,850 --> 00:17:34,210 Во тој случај, ние прогласи функцијата како што имаат тип неважечки враќање. 381 00:17:34,210 --> 00:17:37,880 Да заклучиме овој дел од справување со проблемот на пракса. 382 00:17:37,880 --> 00:17:39,900 >> Значи, тука е проблемот поставени. 383 00:17:39,900 --> 00:17:43,630 Сакам да се напише функција нарекува валидна триаголник. 384 00:17:43,630 --> 00:17:47,410 Она што на оваа функција треба да се направи се земе три реални броеви 385 00:17:47,410 --> 00:17:51,930 кои ги претставуваат должините на три страни на еден триаголник како параметри, 386 00:17:51,930 --> 00:17:54,550 или нејзините аргументи, или нејзиниот inputs-- друг сет на синоними 387 00:17:54,550 --> 00:17:57,340 кои може да се судрите. 388 00:17:57,340 --> 00:18:01,120 Оваа функција треба да или излез точно или неточно 389 00:18:01,120 --> 00:18:04,960 зависност од тоа дали тие три должини се способни за изработка триаголник. 390 00:18:04,960 --> 00:18:09,930 Дали се сеќавате на типот податоци кои ние се користи за да се покаже точно или погрешно? 391 00:18:09,930 --> 00:18:11,436 Сега како да се спроведе тоа? 392 00:18:11,436 --> 00:18:13,810 Добро знаат постојат неколку на правила во однос на триаголници 393 00:18:13,810 --> 00:18:15,480 кои се всушност корисно да се знае. 394 00:18:15,480 --> 00:18:18,292 Триаголник само може да има страни со позитивни должина. 395 00:18:18,292 --> 00:18:19,000 Кој што има смисла. 396 00:18:19,000 --> 00:18:21,432 Ти си веројатно се велејќи, Duh. 397 00:18:21,432 --> 00:18:23,390 Од друга работа е да се напомене сепак, е дека збирот 398 00:18:23,390 --> 00:18:25,484 во должините на било која двете страни на триаголник 399 00:18:25,484 --> 00:18:27,650 мора да биде поголема од должина на третата страна. 400 00:18:27,650 --> 00:18:28,690 Тоа е всушност вистинит. 401 00:18:28,690 --> 00:18:34,150 Вие не може да имаат триаголник на страни 1, 2 и 4, на пример, бидејќи 1 плус 2 402 00:18:34,150 --> 00:18:36,270 не е поголема од 4. 403 00:18:36,270 --> 00:18:38,870 Значи тоа се правилата кои се утврди дали на три или не 404 00:18:38,870 --> 00:18:42,740 влезови разбирливо може да се формира триаголник. 405 00:18:42,740 --> 00:18:46,360 Така да потрае неколку минути и изјавува а потоа се дефинира 406 00:18:46,360 --> 00:18:49,810 оваа функција се нарекува валидна триаголник, како што тоа всушност 407 00:18:49,810 --> 00:18:51,650 има однесување се наведени тука. 408 00:18:51,650 --> 00:18:57,030 >> Тоа ќе излез точно ако тие три страни се способни да се состои од еден триаголник, 409 00:18:57,030 --> 00:19:01,950 и лажно поинаку Подготвени да се види како ќе се направи? 410 00:19:01,950 --> 00:19:04,650 Тука е една имплементација од важечки триаголник. 411 00:19:04,650 --> 00:19:05,770 Тоа не е само еден. 412 00:19:05,770 --> 00:19:07,770 Твое може да се разликува малку. 413 00:19:07,770 --> 00:19:11,040 Но, ова не го прави тоа, всушност, имаат однесувањето што го очекуваме. 414 00:19:11,040 --> 00:19:14,450 Сакаме да укажеме нашата функција на самиот врв, bool валидна триаголник 415 00:19:14,450 --> 00:19:16,630 x плови плови плови y z. 416 00:19:16,630 --> 00:19:18,930 Значи, повторно, оваа функција зема три реални броеви 417 00:19:18,930 --> 00:19:22,280 како нејзините аргументи, лебдејќи променливи точка вредност, 418 00:19:22,280 --> 00:19:26,510 и излези на вистински или лажни вредност, која е Булова, да се потсетиме. 419 00:19:26,510 --> 00:19:28,660 Па тоа е зошто видот враќање е bool. 420 00:19:28,660 --> 00:19:30,016 Тогаш ние се дефинира функција. 421 00:19:30,016 --> 00:19:33,140 Првото нешто што го правиме е да се провери да бидете сигурни дека дека сите страни се позитивни. 422 00:19:33,140 --> 00:19:37,010 Ако x е помалку од или еднакво на 0, или, ако y е еднаков на 0, 423 00:19:37,010 --> 00:19:41,050 или ако z е помалку од или еднакво на 0, кои не можат да бидат триаголник. 424 00:19:41,050 --> 00:19:42,380 Тие немаат позитивни страни. 425 00:19:42,380 --> 00:19:45,790 И за да можеме да се вратат лажно во таква ситуација. 426 00:19:45,790 --> 00:19:49,010 Следно, проверете да бидете сигурни дека секој пар на влезови 427 00:19:49,010 --> 00:19:51,830 е поголема од третиот. 428 00:19:51,830 --> 00:19:54,530 >> Значи, ако x плус у е помалку од или еднакво на z, 429 00:19:54,530 --> 00:19:57,060 или ако x плус z е помалку од или еднакво на y, 430 00:19:57,060 --> 00:20:01,730 или ако y плус z е помалку од или еднакво на x, кои, исто така, не може да биде валидна триаголник. 431 00:20:01,730 --> 00:20:03,800 Па ние return false повторно. 432 00:20:03,800 --> 00:20:06,900 Претпоставувајќи го поминавме двата проверки Но, тогаш можеме да се врати вистина. 433 00:20:06,900 --> 00:20:09,440 Бидејќи тие три страни се способни за returning-- 434 00:20:09,440 --> 00:20:11,647 на создавање валидна триаголник. 435 00:20:11,647 --> 00:20:12,230 И тоа е тоа. 436 00:20:12,230 --> 00:20:13,830 Сте сега прогласена и дефинирани. 437 00:20:13,830 --> 00:20:17,330 А вие може да биде во можност да го сега употреба и се јавите на оваа функција. 438 00:20:17,330 --> 00:20:19,470 Одлична работа. 439 00:20:19,470 --> 00:20:20,650 Јас сум Даг Лојд. 440 00:20:20,650 --> 00:20:22,820 Ова е CS50. 441 00:20:22,820 --> 00:20:24,340