1 00:00:00,000 --> 00:00:04,664 2 00:00:04,664 --> 00:00:05,580 DOUG LLOYD: Bone. 3 00:00:05,580 --> 00:00:08,877 Do nun ni pritrakti vere granda temo, funkcioj. 4 00:00:08,877 --> 00:00:11,460 Ĝis nun en la kurso, ĉiuj programoj kiuj ni estis skribante 5 00:00:11,460 --> 00:00:12,969 estis skribita ene de ĉefa. 6 00:00:12,969 --> 00:00:14,260 Ili estas belaj simplaj programoj. 7 00:00:14,260 --> 00:00:16,940 Vi ne bezonas havi cxiujn tiujn branĉoj kaj aĵoj okazas. 8 00:00:16,940 --> 00:00:18,773 Ni povas nur konveni ĉion ene de ĉefa kaj ĝi 9 00:00:18,773 --> 00:00:20,407 ne ricevas terure abrumadora. 10 00:00:20,407 --> 00:00:22,990 Sed kiel la kurso daŭriĝas kaj kiel vi ekdisvolviĝas programoj 11 00:00:22,990 --> 00:00:26,260 sendepende, ili probable tuj komenci akiri multan pli ol 10 12 00:00:26,260 --> 00:00:27,200 aŭ 15 linioj. 13 00:00:27,200 --> 00:00:31,400 Vi eble ricevos centoj aŭ miloj aŭ dekoj de miloj da linioj de kodo. 14 00:00:31,400 --> 00:00:34,690 Kaj estas vere ne ke freneza penso. 15 00:00:34,690 --> 00:00:39,720 Kiel tia, ĝi estas verŝajne ne bona ideo teni ĉio ene de ĉefa. 16 00:00:39,720 --> 00:00:43,240 Ĝi povas akiri malgrandan malfacila trovi kion vi serĉas, se vi faros tion. 17 00:00:43,240 --> 00:00:47,040 >> Feliĉe, kvankam C, kaj preskaux ĉiu alia programlingvo ke 18 00:00:47,040 --> 00:00:50,386 povus labori kun, permesas nin skribi funkciojn. 19 00:00:50,386 --> 00:00:52,260 Kaj mi simple tuj preni rapidan flanken tie 20 00:00:52,260 --> 00:00:54,971 Mencii ke funkcioj estas unu areo de komputiko. 21 00:00:54,971 --> 00:00:57,970 Kaj vi vidos multaj pli da ili diversaj punktoj ĉie en la kurso 22 00:00:57,970 --> 00:00:59,290 kaj se vi daŭre plu. 23 00:00:59,290 --> 00:01:02,280 Kie ekzistas multe de sinonimojn por la sama vorto. 24 00:01:02,280 --> 00:01:03,390 Do ni nomas la funkcioj. 25 00:01:03,390 --> 00:01:05,980 Sed eble vi ankaŭ aŭdi ilin referita kiel proceduroj, 26 00:01:05,980 --> 00:01:09,570 aŭ metodoj, precipe, se vi iam faris ajnan objektema programado 27 00:01:09,570 --> 00:01:11,950 before-- kaj ne maltrankviliĝu se vi ne havas, ne 28 00:01:11,950 --> 00:01:14,280 grandan deal-- sed en auditoría orientitaj lingvoj 29 00:01:14,280 --> 00:01:16,129 estas ofte nomitaj metodoj. 30 00:01:16,129 --> 00:01:17,670 Kelkfoje ili estas nomitaj subrutinoj. 31 00:01:17,670 --> 00:01:20,690 Sed ili vere ĉiuj referi al la sama baza ideo. 32 00:01:20,690 --> 00:01:22,480 >> Ni vidu kion tiu ideo estas. 33 00:01:22,480 --> 00:01:23,310 Kio estas funkcio? 34 00:01:23,310 --> 00:01:26,470 Nu funkcio estas vere nenio pli ol nigran skatolon. 35 00:01:26,470 --> 00:01:31,430 Nigra skatolo kiu havas aron de nulo aŭ pli enigaĵoj kaj sola eligo. 36 00:01:31,430 --> 00:01:33,420 Do ekzemple, ĉi povus esti funkcio. 37 00:01:33,420 --> 00:01:35,510 Tiu estas funkcio nomita func. 38 00:01:35,510 --> 00:01:39,330 Kaj ĝi prenas tri enigoj a, b, kaj c. 39 00:01:39,330 --> 00:01:42,580 Kaj ene de tiu nigra skatolo, ni ne scias precize kion ĝi faras, 40 00:01:42,580 --> 00:01:45,100 sed ĝi procesas la enigoj iel kaj tiam 41 00:01:45,100 --> 00:01:48,680 donas sola eligo, en tiu kazo, z. 42 00:01:48,680 --> 00:01:50,504 Nun fari ĝin iom malpli abstrakta, ni 43 00:01:50,504 --> 00:01:52,420 povus diri ke eble ni havas funkcion nomita 44 00:01:52,420 --> 00:01:58,750 aldonu kiu prenas tri enigoj a, b, kaj c kaj procesas la eligo iel 45 00:01:58,750 --> 00:02:01,010 ene la nigra skatolo produkti solan eliron. 46 00:02:01,010 --> 00:02:05,190 Do en tiu kazo, se aldonu prenas 3, 6, kaj 7. 47 00:02:05,190 --> 00:02:07,020 Ie ene la aldonu funkcio, ni farus 48 00:02:07,020 --> 00:02:09,750 atendi ilin esti aldonitaj kune produkti la eligo, kiu 49 00:02:09,750 --> 00:02:13,220 estas 3 plus 6 plus 7 aŭ 16. 50 00:02:13,220 --> 00:02:17,940 >> Simile, vi havas funkcion nomita mult kiu prenas du enigoj, a kaj b, 51 00:02:17,940 --> 00:02:21,070 procesas ilin iel tia ke la eligo de la funkcio 52 00:02:21,070 --> 00:02:22,920 estas la produkto de la du eniroj. 53 00:02:22,920 --> 00:02:25,080 La du enigaĵoj multiplikitaj kune. 54 00:02:25,080 --> 00:02:29,150 4 kaj 5 aprobotaj en mult, io okazas, la eligo ni atendas 55 00:02:29,150 --> 00:02:31,090 estas 20. 56 00:02:31,090 --> 00:02:32,507 Kial ni nomas ĝin nigra skatolo? 57 00:02:32,507 --> 00:02:34,840 Nu, se ni ne skribas la funkcias mem, kiu 58 00:02:34,840 --> 00:02:36,869 ni faris sufiĉe ĝis nun CS50. 59 00:02:36,869 --> 00:02:39,910 Ni vidis print f, ekzemple, kiu estas funkcio kiu ni ne skribis 60 00:02:39,910 --> 00:02:42,305 nin, sed ni uzas la tutan tempon. 61 00:02:42,305 --> 00:02:44,180 Se ni ne skribas la funkcioj ni mem, 62 00:02:44,180 --> 00:02:48,450 ni ne vere bezonas scii kiom estas implementó sub la kapuĉo. 63 00:02:48,450 --> 00:02:51,710 >> Do ekzemple la nigra skatolo Mi ĵus montris al vi por multipliko, 64 00:02:51,710 --> 00:02:53,740 Mult a b povus esti defined-- kaj tio estas nur 65 00:02:53,740 --> 00:02:57,902 iuj pseudocode-- povus esti difinita kiel elirigi fojojn b. 66 00:02:57,902 --> 00:02:58,860 Ke sencon, dekstre. 67 00:02:58,860 --> 00:03:01,370 Se ni havas funkcion nomis mult kiu prenas du enigoj. 68 00:03:01,370 --> 00:03:04,750 Ni atendus ke la eligo volus esti la du enigaĵoj multiplikitaj kune, 69 00:03:04,750 --> 00:03:06,240 fojoj b. 70 00:03:06,240 --> 00:03:09,170 Sed mult povis ankaŭ esti implementado kiel tiu, 71 00:03:09,170 --> 00:03:13,150 ni havas vendotablo variablo por get starigis ene de mult al 0. 72 00:03:13,150 --> 00:03:18,000 Kaj tiam ni ripetu ĉi procezo b fojojn aldoni al vendotablo. 73 00:03:18,000 --> 00:03:24,270 Ekzemple, se ni multiplikas 3al per 5b, ni povus diri starigis vendotablo al 0, 74 00:03:24,270 --> 00:03:27,700 ripeti kvinfoje, aldonu 3 al vendotablo. 75 00:03:27,700 --> 00:03:34,490 Do ni komencu ĉe 0 kaj tiam ni fari ĉi kvinfoje 3, 6, 9, 12, 15. 76 00:03:34,490 --> 00:03:37,500 Ĝi estas la sama rezulto. Ni ankoraŭ ricevas 3 fojojn 5 ​​ĵus 77 00:03:37,500 --> 00:03:39,500 la efektivigo estas malsama. 78 00:03:39,500 --> 00:03:41,490 >> Tion ni signifi kiam ni diras nigran skatolon. 79 00:03:41,490 --> 00:03:44,406 Tio simple signifas ke ni ne vere gravas kiel ĝi estas efektivigita sub la kapuĉo 80 00:03:44,406 --> 00:03:46,170 tiel longe kiel la eligo estas kion ni atendas. 81 00:03:46,170 --> 00:03:49,045 Fakte, tio estas parto de la kontrakto de uzante funkcioj, aparte 82 00:03:49,045 --> 00:03:50,630 funkcioj kiuj aliaj skribas. 83 00:03:50,630 --> 00:03:53,980 La konduto estas ĉiam tuj esti tipa, neantaŭvidebla 84 00:03:53,980 --> 00:03:55,420 bazita sur la nomo de la funkcio. 85 00:03:55,420 --> 00:03:57,500 Kaj tio estas kial ĝi estas vere grava kiam vi skribas funkcioj 86 00:03:57,500 --> 00:04:00,020 aŭ kiam aliaj personoj skribi funkcioj kiujn vi povus uzi, 87 00:04:00,020 --> 00:04:03,590 ke tiuj funkcioj havas klara, relative evidentaj nomoj, 88 00:04:03,590 --> 00:04:04,990 kaj estas bone dokumentita. 89 00:04:04,990 --> 00:04:08,560 Kiu estas certe la kazo por funkcio kiel print f. 90 00:04:08,560 --> 00:04:09,860 >> Do kial ni uzu funkcioj? 91 00:04:09,860 --> 00:04:14,220 Nu, kiel mi diris antaŭe, se ni skribas ĉiuj niaj kodon ene de ĉefaj aferoj 92 00:04:14,220 --> 00:04:17,120 povas akiri vere maloportuna kaj vere komplika. 93 00:04:17,120 --> 00:04:19,980 Funkcioj permesi al ni la eblon organizi aferojn kaj disrompi 94 00:04:19,980 --> 00:04:24,540 tre komplika problemo en multe pli manageable sub partoj. 95 00:04:24,540 --> 00:04:28,130 Funkcioj ankaŭ permesas nin simpligi la kodigo procezo. 96 00:04:28,130 --> 00:04:33,080 Ĝi estas multe pli facila elpurigi 10 linio funkcio kontre 100 linio 97 00:04:33,080 --> 00:04:35,890 funkcio aŭ 1.000 linio funkcio. 98 00:04:35,890 --> 00:04:38,400 Se ni nur devas elpurigi malgrandajn pecojn samtempe, 99 00:04:38,400 --> 00:04:42,110 aŭ skribi malgrandajn pecojn tiutempe, ĝi faras ke programado sperto 100 00:04:42,110 --> 00:04:43,070 multe pli bone. 101 00:04:43,070 --> 00:04:44,910 Fidu min tiu. 102 00:04:44,910 --> 00:04:48,400 >> Laste, se ni skribas funkcioj ni povas reuzi tiuj diversaj partoj. 103 00:04:48,400 --> 00:04:49,880 Funkcioj povas esti reciklita. 104 00:04:49,880 --> 00:04:51,880 Ili povas esti uzataj en unu programo aŭ alia. 105 00:04:51,880 --> 00:04:53,713 Vi jam skribis la funkcio, oni nur 106 00:04:53,713 --> 00:04:56,530 devas fari estas diri ke programo kie trovi domadministranto. 107 00:04:56,530 --> 00:04:59,680 Ni estis reciclaje kaj uzante presi f por super 40 jaroj. 108 00:04:59,680 --> 00:05:02,150 Sed ĝi estis nur skribita unu tempon. 109 00:05:02,150 --> 00:05:04,270 Sufiĉe utila, prava. 110 00:05:04,270 --> 00:05:04,830 Bone. 111 00:05:04,830 --> 00:05:06,040 Do funkcioj estas granda. 112 00:05:06,040 --> 00:05:06,860 Ni scias tion. 113 00:05:06,860 --> 00:05:08,700 Nun ni komencu skribi ilin. 114 00:05:08,700 --> 00:05:10,830 Komencu atingi ilin en niajn programojn. 115 00:05:10,830 --> 00:05:13,869 Por fari tion, la unuaj afero ni fari estas deklari la funkcio. 116 00:05:13,869 --> 00:05:16,160 Kiam vi deklaras funkcio kion vi estas esence fari 117 00:05:16,160 --> 00:05:18,900 diras la kompililo, hej, nur do vi scias, 118 00:05:18,900 --> 00:05:20,850 Mi tuj skribos funkcio poste 119 00:05:20,850 --> 00:05:22,987 kaj jen kion ĝi tuj aspekti. 120 00:05:22,987 --> 00:05:24,820 La kialo estas ĉar tradukiloj povas 121 00:05:24,820 --> 00:05:27,900 fari kelkajn strangajn aferojn, se ili vidas aron de simboloj 122 00:05:27,900 --> 00:05:29,560 ke ili ne estas familiara kun. 123 00:05:29,560 --> 00:05:33,000 Do ni simple donu la kompililo a Kapoj supren, mi kreanta funkcio 124 00:05:33,000 --> 00:05:35,492 kaj tuj fari tion. 125 00:05:35,492 --> 00:05:38,450 Funkcio deklaroj ĝenerale se vi organizi vian kodon en maniero 126 00:05:38,450 --> 00:05:41,872 ke aliaj povos kompreni kaj uzi, 127 00:05:41,872 --> 00:05:44,330 vi ĝenerale volas meti ĉiuj de via funkcio deklaroj 128 00:05:44,330 --> 00:05:48,220 ĉe la plejsupro de via kodo, dekstra antaŭ vi komencas skribanta ĉefa vespero. 129 00:05:48,220 --> 00:05:50,770 Kaj oportune, ekzistas tre norma formo 130 00:05:50,770 --> 00:05:53,500 ke ĉiu funkcio deklaro sekvas. 131 00:05:53,500 --> 00:05:56,090 Ili ĉiuj sufiĉe multe aspekti ĉi. 132 00:05:56,090 --> 00:06:01,440 Ekzistas tri partoj al funkcio deklaro, reveno tipo, nomo, 133 00:06:01,440 --> 00:06:03,420 kaj argumento listo. 134 00:06:03,420 --> 00:06:07,180 >> Nun la reveno tipo estas kia ŝanĝiĝema la funkcio volo eligo. 135 00:06:07,180 --> 00:06:10,710 Do ekzemple, se ni pensas reen minuto al la multipliki du 136 00:06:10,710 --> 00:06:15,690 nombroj funkcio, kion ni atendas, se ni multigos entjero per entjero 137 00:06:15,690 --> 00:06:18,502 la eligo estos verŝajne entjero, dekstre. 138 00:06:18,502 --> 00:06:20,710 Multiplikita du entjeroj kune, vi ricevas entjero. 139 00:06:20,710 --> 00:06:24,167 Do la reveno tipo de ke funkcio estus int. 140 00:06:24,167 --> 00:06:26,000 Nomo estas kio vi deziras voki vian funkcion. 141 00:06:26,000 --> 00:06:29,330 Tio estas verŝajne la malplej grava parto de la funkcio deklaro, 142 00:06:29,330 --> 00:06:30,827 en terminoj de funkciojn. 143 00:06:30,827 --> 00:06:33,160 Sed estas fakte probable unu de la plej gravaj partoj 144 00:06:33,160 --> 00:06:36,243 de la funkcio deklaro en terminoj de scii kion la funkcio reale 145 00:06:36,243 --> 00:06:37,120 faras. 146 00:06:37,120 --> 00:06:40,474 Se vi nomu viajn funkcio f aŭ g aŭ h aŭ mistero aŭ io simila, 147 00:06:40,474 --> 00:06:42,765 vi probable ricevos iom stumblis supren provas 148 00:06:42,765 --> 00:06:44,650 memori kio tiuj funkcioj fari. 149 00:06:44,650 --> 00:06:47,880 Do estas grave doni vian funkcia signifoplenaj nomoj. 150 00:06:47,880 --> 00:06:51,030 >> Laste, argumento estas lerta la komo apartigis liston 151 00:06:51,030 --> 00:06:55,260 de ĉiuj enigoj al via funkcio, ĉiu el kiuj havas tipon kaj nomon. 152 00:06:55,260 --> 00:06:57,840 Do ne nur vi devas specifi kion tipo de variablo 153 00:06:57,840 --> 00:07:00,760 la funkcio volo eligo, vi ankaŭ volas specifi 154 00:07:00,760 --> 00:07:07,694 kio tipo kaj tipoj de variabloj la funkcio estos akceptanta kiel enigoj. 155 00:07:07,694 --> 00:07:08,860 Do ni faru ekzemplon tie. 156 00:07:08,860 --> 00:07:10,220 Ni simple rigardu je pli konkreta. 157 00:07:10,220 --> 00:07:13,130 Do jen ekzemplo de funkcio deklaro por funkcio ke 158 00:07:13,130 --> 00:07:14,925 aldonus du entjeroj kune. 159 00:07:14,925 --> 00:07:17,800 La sumo de du entjeroj tuj esti entjero tiel, kiel ni ĵus 160 00:07:17,800 --> 00:07:18,450 diskutis. 161 00:07:18,450 --> 00:07:21,610 Kaj tial la reveno tipo, tie en verda, estus int. 162 00:07:21,610 --> 00:07:25,190 Ke nur klarigas ke aldoni du ints tuj, fine de la tago, 163 00:07:25,190 --> 00:07:28,799 eligo, aŭ kraĉi ĝin reen al ni, por entjero. 164 00:07:28,799 --> 00:07:31,590 Donita kion tiu funkcio faras ni volas doni ĝin senchava nomo. 165 00:07:31,590 --> 00:07:33,630 Aldoni du ints ŝajnas taŭga, konsiderante 166 00:07:33,630 --> 00:07:37,574 ni prenas du entjeroj kiel enigoj Kaj espereble aldonante ilin kune. 167 00:07:37,574 --> 00:07:40,240 Ĝi povus esti iom de maloportunan nomo kaj sincere tiun funkcion 168 00:07:40,240 --> 00:07:42,430 Estas probable ne necesa ĉar ni havas la aldono 169 00:07:42,430 --> 00:07:46,310 operatoro, se vi memoras de nia diskuto de telefonistoj, antaŭe. 170 00:07:46,310 --> 00:07:49,650 Sed ni simple diri por ties argumento ke tiu funkcio estas utila 171 00:07:49,650 --> 00:07:52,860 kaj do ni nomas ĝin aldoni du ints. 172 00:07:52,860 --> 00:07:55,230 Finfine, tiu funkcio prenas du enigoj. 173 00:07:55,230 --> 00:07:56,960 El kiuj ĉiu estas entjero. 174 00:07:56,960 --> 00:07:59,900 Do ni havas ĉi komo disigita listo de enigoj. 175 00:07:59,900 --> 00:08:02,830 Nun ni ĝenerale volas doni nomon al ĉiu el ili 176 00:08:02,830 --> 00:08:05,070 tiel ke ili povas esti uzitaj ene de la funkcio. 177 00:08:05,070 --> 00:08:07,180 La nomoj ne terure grava. 178 00:08:07,180 --> 00:08:11,400 >> En tiu kazo, ni ne nepre havas neniun sencon alkroĉita al ili. 179 00:08:11,400 --> 00:08:13,140 Do ni povas simple nomi ilin a kaj b. 180 00:08:13,140 --> 00:08:14,257 Tio estas tute bone. 181 00:08:14,257 --> 00:08:16,090 Se tamen, vi trovas mem en situacio 182 00:08:16,090 --> 00:08:19,497 kie la nomoj de la variabloj efektive povus esti grava, 183 00:08:19,497 --> 00:08:21,830 vi eble volas nomi ilin io alia ol a kaj b 184 00:08:21,830 --> 00:08:24,701 doni ilin io pli simbole signfa. 185 00:08:24,701 --> 00:08:27,700 Sed en ĉi tiu kazo, ni ne vere scias ion ajn pri la funkcio. 186 00:08:27,700 --> 00:08:29,320 Ni nur volas aldoni du entjeroj. 187 00:08:29,320 --> 00:08:32,429 Do ni simple nomas tiuj entjeroj a kaj b. 188 00:08:32,429 --> 00:08:33,990 Tio estas unu ekzemplo. 189 00:08:33,990 --> 00:08:36,287 >> Kial ne preni duan pensi pri ĉi tiu, 190 00:08:36,287 --> 00:08:38,870 Kiel volus vin skribi funkcion deklaro por funkcio ke 191 00:08:38,870 --> 00:08:42,940 multiplikas du glitpunktaj nombroj? 192 00:08:42,940 --> 00:08:45,910 Ĉu vi memoras kia Reela nombro estas? 193 00:08:45,910 --> 00:08:48,120 Kion cxi funkcio deklaro aspektas? 194 00:08:48,120 --> 00:08:53,330 Mi vere rekomendas vin paŭzo la video tie kaj preni kiom tempon vi bezonos. 195 00:08:53,330 --> 00:08:55,521 Pensu pri kio tiu funkcio deklaro estus? 196 00:08:55,521 --> 00:08:56,770 Kio estus la reveno tipo estas? 197 00:08:56,770 --> 00:08:58,103 Kio estus signifoplena nomo estu? 198 00:08:58,103 --> 00:08:59,580 Kio estus la enigoj okazi? 199 00:08:59,580 --> 00:09:03,190 Do kial vi ne paŭzi la video ĉi tie kaj skribi-supren funkcio deklaro 200 00:09:03,190 --> 00:09:07,640 por funkcio kiu multiplikas du glitpunktaj nombroj kune. 201 00:09:07,640 --> 00:09:09,330 Espereble vi paŭzis la video. 202 00:09:09,330 --> 00:09:12,950 >> Do ni rigardu ekzemplon de unu ebla deklaro. 203 00:09:12,950 --> 00:09:17,340 Flosi mult du reelaj nombroj flosi x, kaleŝego kaj. 204 00:09:17,340 --> 00:09:19,090 La produkto de du glitpunktaj nombroj, 205 00:09:19,090 --> 00:09:21,710 kiu memoras estas kio ni reprezenti reelaj nombroj 206 00:09:21,710 --> 00:09:26,770 aŭ nombroj kun decimalaj valoroj en c, tuj esti glitpunkta nombro. 207 00:09:26,770 --> 00:09:28,570 Kiam vi multipliki dekuma per dekuma, 208 00:09:28,570 --> 00:09:30,460 vi probable ricevos dekuma. 209 00:09:30,460 --> 00:09:31,960 Vi volas doni al ĝi rilata nomo. 210 00:09:31,960 --> 00:09:33,810 Multipliki du reelaj nombroj ŝajnas bone. 211 00:09:33,810 --> 00:09:36,620 Sed vi povus vere nomas ĝin mult du kaleŝegoj, aŭ mult kaleŝegoj. 212 00:09:36,620 --> 00:09:39,540 Io tia, tiel longe kiel ĝi donis iujn fakta signifo al kio 213 00:09:39,540 --> 00:09:41,469 tiu nigra skatolo faros. 214 00:09:41,469 --> 00:09:44,260 Kaj denove, en ĉi tiu kazo, ni ne ŝajnas havi neniun signifon alkroĉita 215 00:09:44,260 --> 00:09:46,390 al la nomoj de la variabloj ni pasante en, 216 00:09:46,390 --> 00:09:48,645 do ni simple nomas ilin x kaj y. 217 00:09:48,645 --> 00:09:51,020 Nun se vi nomas ilin ion alie, ke estas tute bone. 218 00:09:51,020 --> 00:09:53,310 Fakte, se vi faris ĉi deklaro anstataŭe 219 00:09:53,310 --> 00:09:55,450 uzante duobloj anstataŭe de flosas, se vi memoras 220 00:09:55,450 --> 00:09:59,100 ke duobloj estas malsama maniero pli precize 221 00:09:59,100 --> 00:10:02,330 specifi reelaj nombroj aŭ glitpunktaj variabloj. 222 00:10:02,330 --> 00:10:03,620 Tio estas tute bone ankaŭ. 223 00:10:03,620 --> 00:10:04,670 Ĉu unu el tiuj estus bone. 224 00:10:04,670 --> 00:10:06,711 Fakte, ekzistas pluraj malsamaj kombinoj 225 00:10:06,711 --> 00:10:08,410 manierojn por deklari tiun funkcion. 226 00:10:08,410 --> 00:10:10,884 Sed tiuj estas du belaj bonaj. 227 00:10:10,884 --> 00:10:12,550 Ni deklaris funkcio, tio estas granda. 228 00:10:12,550 --> 00:10:15,700 Ni diris al la tradukilo kio estas, kion ni tuj faros. 229 00:10:15,700 --> 00:10:17,630 Nun ni vere skribi tiun funkcion. 230 00:10:17,630 --> 00:10:20,750 Ni donu difinon, tiel ke ene la nigra skatolo 231 00:10:20,750 --> 00:10:22,840 antaŭvidebla konduto okazas. 232 00:10:22,840 --> 00:10:26,270 Fakte, ni multiplikante du reelaj nombroj kune, aŭ aldonante nombroj 233 00:10:26,270 --> 00:10:29,760 kune, aŭ faras kion ajn ĝi estas ke ni petis nian funkcio fari. 234 00:10:29,760 --> 00:10:32,780 >> Do fakte, ni provu kaj difini multipliki du reelaj nombroj, kiujn ni ĵus 235 00:10:32,780 --> 00:10:35,350 parolis pri dua antaŭ. 236 00:10:35,350 --> 00:10:38,560 Nun la komenco de funkcio difino 237 00:10:38,560 --> 00:10:41,720 aspektas preskaŭ ekzakte la saman kiel funkcio deklaro. 238 00:10:41,720 --> 00:10:43,170 Mi havas ilin ambaŭ tie. 239 00:10:43,170 --> 00:10:47,770 Ĉe la pinto estas la funkcio deklaro, tipo, nomo, komo apartigis argumento 240 00:10:47,770 --> 00:10:49,410 listo, punktokomo. 241 00:10:49,410 --> 00:10:53,800 La punktokomo indikas ke ke estas funkcio deklaro. 242 00:10:53,800 --> 00:10:57,060 La komenco de la funkcio difino aspektas preskaŭ ĝuste 243 00:10:57,060 --> 00:11:03,790 la sama, tipo, nomo, komo apartigis argumento listo, neniu punktokomo, 244 00:11:03,790 --> 00:11:05,206 malfermi buklaj krampoj. 245 00:11:05,206 --> 00:11:07,580 La malfermita krispa krampoj, kiel ni estis farante kun ĉefaj, 246 00:11:07,580 --> 00:11:09,540 signifas ke ni estas nun komencante difini 247 00:11:09,540 --> 00:11:14,567 kio okazas ene la nigra skatolo kiu ni decidis voki mult du reelaj nombroj. 248 00:11:14,567 --> 00:11:15,900 Ĉi tie estas unu maniero por apliki ĝin. 249 00:11:15,900 --> 00:11:20,370 Ni povus diri, ni povus deklari nova variablo de tipo float nomita produkto 250 00:11:20,370 --> 00:11:24,020 kaj atribui tiu variablo al la valoro x foje y. 251 00:11:24,020 --> 00:11:27,306 Kaj tiam reveni produkto. 252 00:11:27,306 --> 00:11:28,430 Kion reveno signifi ĉi tie. 253 00:11:28,430 --> 00:11:31,090 Nu reveno estas la vojo ni indikas ke a kiel 254 00:11:31,090 --> 00:11:33,400 ni pasante la eligo malantaŭeniri eksteren. 255 00:11:33,400 --> 00:11:38,160 Do reveni ion, estas la sama kiel, tiu estas la eligo de la nigra skatolo. 256 00:11:38,160 --> 00:11:40,732 Do jen kiel vi agu. 257 00:11:40,732 --> 00:11:42,190 Jen alia maniero por apliki ĝin. 258 00:11:42,190 --> 00:11:45,050 Ni povus simple reveni x foje y. 259 00:11:45,050 --> 00:11:45,870 x estas kaleŝego. 260 00:11:45,870 --> 00:11:46,660 y estas kaleŝego. 261 00:11:46,660 --> 00:11:48,490 Do x foje y estas ankaŭ kaleŝego. 262 00:11:48,490 --> 00:11:50,750 Ni eĉ ne bezonas krei alian variablo. 263 00:11:50,750 --> 00:11:56,750 Do tio estas alia maniero apliki la ĝusta sama nigra skatolo. 264 00:11:56,750 --> 00:11:58,570 >> Nun preni momenton, paŭzo la video denove, 265 00:11:58,570 --> 00:12:01,680 kaj provu difini aldoni du ints, kiu estas la alia funkcio kiu ni 266 00:12:01,680 --> 00:12:03,090 parolis antaŭ momento. 267 00:12:03,090 --> 00:12:06,440 Denove ĉi tie, mi metis la funkcio deklaro, kaj tiel la punktokomo, 268 00:12:06,440 --> 00:12:08,420 kaj malfermita krispa krampoj kaj fermitan krispa 269 00:12:08,420 --> 00:12:12,080 krampoj indiki kie ni plenigos en la enhavoj de aldoni du ints, 270 00:12:12,080 --> 00:12:15,530 tiel ke ni difini la apartajn konduto ene la nigra skatolo. 271 00:12:15,530 --> 00:12:16,380 Do paŭzo la vídeo. 272 00:12:16,380 --> 00:12:18,790 Forprenu tiel tempo kiel vi devas provi kaj difini 273 00:12:18,790 --> 00:12:25,040 implementación de aldoni du ints, tia ke kiam la funkcio eligas valoro, 274 00:12:25,040 --> 00:12:29,209 jes, fakte, reveno la sumo de la du eniroj. 275 00:12:29,209 --> 00:12:32,000 Do ĝuste kiel la antaŭa ekzemplo, estas pluraj malsamaj manieroj 276 00:12:32,000 --> 00:12:34,210 ke vi povus apliki aldoni du ints. 277 00:12:34,210 --> 00:12:35,130 Jen unu. 278 00:12:35,130 --> 00:12:37,172 Tien en oranĝa mi havas nur havis iom comments-- 279 00:12:37,172 --> 00:12:38,880 Mi ĵus aldonis kelkajn komentoj indiki 280 00:12:38,880 --> 00:12:41,400 kio okazas sur ĉiu linio de kodo. 281 00:12:41,400 --> 00:12:45,430 Do mi deklaras variablon nomata sumo de tipo int. 282 00:12:45,430 --> 00:12:47,279 Mi diras sumo egalas alpago b. 283 00:12:47,279 --> 00:12:50,070 Tie estas kie ni fakte faras la laboron aldonante A kaj B kune. 284 00:12:50,070 --> 00:12:51,850 Kaj mi revenos sumo. 285 00:12:51,850 --> 00:12:56,460 Kaj tio havas sencon ĉar sumo estas variablo de tipo int. 286 00:12:56,460 --> 00:13:00,180 Kaj kio estas la datumoj tajpas ke tio funkcio diras min ĝi tuj eligo? 287 00:13:00,180 --> 00:13:00,680 Int. 288 00:13:00,680 --> 00:13:03,072 Do mi revenas sumo, kiun estas entjero variablo. 289 00:13:03,072 --> 00:13:06,030 Kaj tio havas sencon donita kion ni deklaritaj kaj difinis nian funkcio 290 00:13:06,030 --> 00:13:07,320 fari. 291 00:13:07,320 --> 00:13:09,700 >> Nun vi povas ankaŭ difini la funkcio tiamaniere, 292 00:13:09,700 --> 00:13:15,260 int sumo egalas alpago b-- skip ke unua step-- kaj redonu sumo. 293 00:13:15,260 --> 00:13:17,760 Nun vi povus havi ankaŭ implementado ĝin tiamaniere, 294 00:13:17,760 --> 00:13:19,180 kiun mi ege ne rekomendas. 295 00:13:19,180 --> 00:13:22,540 Tio estas malbona stilo por unu afero kaj vere maltaŭga, 296 00:13:22,540 --> 00:13:24,420 sed ĝi faras, fakte, laboro. 297 00:13:24,420 --> 00:13:30,199 Se vi prenas tiun kodon, kiu estas int aldoni malbona Cerasto punkto c, kaj uzi ĝin. 298 00:13:30,199 --> 00:13:31,990 Ĝi fakte faras aldonu du entjeroj kune. 299 00:13:31,990 --> 00:13:37,632 Ĝi estas tre malriĉa efektivigo de tiu aparta konduto. 300 00:13:37,632 --> 00:13:38,340 Sed ĝi funkcios. 301 00:13:38,340 --> 00:13:41,200 Estas nur tie por ilustri la punkto kiun ni ne vere 302 00:13:41,200 --> 00:13:44,530 zorgas kio okazas interne la nigra skatolo, tiel longe 303 00:13:44,530 --> 00:13:46,510 kiel ĝi havas la eligo kiun ni atendas. 304 00:13:46,510 --> 00:13:48,870 Jen nebone dizajnita nigra skatolo. 305 00:13:48,870 --> 00:13:53,801 Sed fine la tago, jes ankoraŭ eligo sumo de alpago b. 306 00:13:53,801 --> 00:13:54,300 Bone. 307 00:13:54,300 --> 00:13:56,320 Do ni deklaris funkcioj. 308 00:13:56,320 --> 00:13:57,490 Kaj ni difinis funkcion. 309 00:13:57,490 --> 00:13:58,540 Do jen vere bona. 310 00:13:58,540 --> 00:14:03,020 Nun ni komencu uzi la funkciojn ke ni deklaris kaj ni difinis. 311 00:14:03,020 --> 00:14:05,960 Voki function-- ĝi estas fakte bela easy-- ĉiuj vi bezonas fari 312 00:14:05,960 --> 00:14:09,070 estas pasi ĝin taŭga argumentoj, argumentoj de la datumtipo 313 00:14:09,070 --> 00:14:11,600 ke ĝi atendas, kaj poste atribui la reveno 314 00:14:11,600 --> 00:14:15,190 valoro de tiu funkcio kaj this-- ekskuzo kunulinon 315 00:14:15,190 --> 00:14:19,390 atribui la reveno valoro de tiu funkcio al iom da la ĝusta tipo. 316 00:14:19,390 --> 00:14:22,410 >> Do ni havas rigardi ĉi praktike en dosiero 317 00:14:22,410 --> 00:14:27,730 nomata Cerasto 1 punkto c, kiu Mi havas en mia CS50 IDE. 318 00:14:27,730 --> 00:14:31,042 Do tie estas vipuro 1 punkto c. 319 00:14:31,042 --> 00:14:33,500 Komence vi vidas mi havas miaj inkludas, funto inkluzivas, 320 00:14:33,500 --> 00:14:35,460 norma IO, kaj CS50 skalara h. 321 00:14:35,460 --> 00:14:37,700 Kaj tiam mi havos mian funkcio deklaro. 322 00:14:37,700 --> 00:14:39,570 Tie estas kie mi estas rakontanta la tradukilo mi estas 323 00:14:39,570 --> 00:14:42,850 tuj estos skribante funkcio nomita aldoni du ints. 324 00:14:42,850 --> 00:14:45,780 Ĝi tuj eligo de entjera tipo variablo. 325 00:14:45,780 --> 00:14:47,360 Tion ĉi parto estas ĝuste ĉi tie. 326 00:14:47,360 --> 00:14:51,950 Kaj tiam mi havas du enirojn al gxi kaj b, ĉiu el kiu estas entjero. 327 00:14:51,950 --> 00:14:58,250 Ene de ĉefa, mi petas al la uzanto por enigo de diraĵo, donu al mi entjero. 328 00:14:58,250 --> 00:15:01,040 Kaj ili instigis forgesi int, kiu estas funkcio kiu 329 00:15:01,040 --> 00:15:03,240 estas inkluzivita en la CS50 biblioteko. 330 00:15:03,240 --> 00:15:07,660 Kaj ke gets stokitaj en x, entjera variablo. 331 00:15:07,660 --> 00:15:09,886 >> Tiam ni instigas ilin por alia entjero. 332 00:15:09,886 --> 00:15:13,070 Ni preni alian entjero kaj stoki ke en y. 333 00:15:13,070 --> 00:15:17,990 Kaj tiam, tie sur linio 28, estas kie ni faras nia funkcio nomita. 334 00:15:17,990 --> 00:15:23,770 Ni estas dirantaj, int z egaluloj aldonu 2 ints x komo y. 335 00:15:23,770 --> 00:15:25,980 Ĉu vi vidas, kial tio havas sencon? 336 00:15:25,980 --> 00:15:29,710 x estas entjero tipo variablo kaj y estas entjero tipo variablo. 337 00:15:29,710 --> 00:15:31,220 Do tio estas bona. 338 00:15:31,220 --> 00:15:34,570 Ke sencon kun kion nia funkcio deklaro sur linio 17 aspektas. 339 00:15:34,570 --> 00:15:38,300 La komo apartigis enigo listo atendas du entjeroj, a kaj b. 340 00:15:38,300 --> 00:15:40,300 En tiu kazo, ni povas nomi ili kion ajn ni volas. 341 00:15:40,300 --> 00:15:42,300 Ĝi nur atendas du entjeroj. 342 00:15:42,300 --> 00:15:44,930 Kaj x estas entjero kaj y estas entjero. 343 00:15:44,930 --> 00:15:45,640 Kiu funkcias. 344 00:15:45,640 --> 00:15:48,680 >> Kaj ni scias ke funkcio tuj al eligo de entjeroj tiel. 345 00:15:48,680 --> 00:15:51,290 Kaj tiel ni amasigas la eligo de la funkcio, 346 00:15:51,290 --> 00:15:56,050 aldoni du ints, en entjera tipo variablo, kiu ni vokas z. 347 00:15:56,050 --> 00:16:01,980 Kaj tiam ni povas diri, la sumo de procento i kaj procento i estas procento i. 348 00:16:01,980 --> 00:16:06,210 x, y kaj z respektive plenigante en tiuj procentoj i a. 349 00:16:06,210 --> 00:16:08,334 Kio estas la difino de aldoni du ints aspektas? 350 00:16:08,334 --> 00:16:09,125 Ĝi estas sufiĉe simpla. 351 00:16:09,125 --> 00:16:11,270 Ĝi estas unu el la aĵoj ni ĵus vidis sekundo antaŭ, 352 00:16:11,270 --> 00:16:14,390 int sumo egalas alpago b reveno sumo. 353 00:16:14,390 --> 00:16:15,420 Tio funkcias? 354 00:16:15,420 --> 00:16:17,270 Ni savu la dosieron. 355 00:16:17,270 --> 00:16:22,080 Kaj poste malsupren tie sur mia terminalo Mi tuj faros Cerasto 1, 356 00:16:22,080 --> 00:16:23,000 kaj mi purigi mian ekranon. 357 00:16:23,000 --> 00:16:25,791 Mi tuj zomi ĉar mi scias estas iom malfacile vidi. 358 00:16:25,791 --> 00:16:31,520 359 00:16:31,520 --> 00:16:33,770 >> Do ni kompili tiun programon kiel vipuro 1. 360 00:16:33,770 --> 00:16:37,910 Do ni povas fari dot oblikvo Cerasto 1. 361 00:16:37,910 --> 00:16:40,060 Donu entjero, 10. 362 00:16:40,060 --> 00:16:42,380 Donu al mi alian entjero, 20. 363 00:16:42,380 --> 00:16:45,200 La sumo de 10 kaj 20 estas 30. 364 00:16:45,200 --> 00:16:47,615 Do ni faris sukcesan funkcio nomita. 365 00:16:47,615 --> 00:16:55,820 Vi povas ruli la funkcio denove, negativa 10, 17 sumo de negativa 10 kaj 17 estas 7. 366 00:16:55,820 --> 00:16:57,120 Tiu funkcio laboras. 367 00:16:57,120 --> 00:16:59,240 Ĝi havas la konduto ke ni atendas ĝin. 368 00:16:59,240 --> 00:17:03,610 Kaj tiel ni faris sukcesan funkcio, difino, deklaro, 369 00:17:03,610 --> 00:17:07,288 kaj prosperan funkcio nomita. 370 00:17:07,288 --> 00:17:09,079 Paro diversaj punktojn pri funkcioj 371 00:17:09,079 --> 00:17:10,611 antaŭ ni konkludi tiun sekcion. 372 00:17:10,611 --> 00:17:12,319 Memoras de nia diskuto de datumtipoj, 373 00:17:12,319 --> 00:17:16,109 antaŭe, ke funkcioj povas foje preni nenian enigoj. 374 00:17:16,109 --> 00:17:17,930 Se tio estas la kazo, ni deklari la funkcio 375 00:17:17,930 --> 00:17:19,788 kiel havado malplenon argumento listo. 376 00:17:19,788 --> 00:17:21,579 Ĉu vi memoras, kion la plej ofta funkcio 377 00:17:21,579 --> 00:17:25,036 ni vidis ĝis nun kiu prenas malplenon argumento listo estas? 378 00:17:25,036 --> 00:17:27,300 Ĝi estas ĉefa. 379 00:17:27,300 --> 00:17:30,850 Memori ankaŭ ke funkcio foje Usonanoj ne havas eliron. 380 00:17:30,850 --> 00:17:34,210 En tiu kazo, ni rakontos la funkcio kiel havado malplenon reveno tipo. 381 00:17:34,210 --> 00:17:37,880 Ni finas ĉi tiun sekcion per pritraktado praktiko problemo. 382 00:17:37,880 --> 00:17:39,900 >> Do jen la problemo aranĝiĝas. 383 00:17:39,900 --> 00:17:43,630 Mi volas ke vi skribu funkcio nomata valida triangulo. 384 00:17:43,630 --> 00:17:47,410 Kio ĉi tiu funkcio devas fari Estas preni tri reelaj nombroj 385 00:17:47,410 --> 00:17:51,930 kiuj reprezentas la longoj de la tri flankoj de triangulo kiel liaj parametroj, 386 00:17:51,930 --> 00:17:54,550 aŭ ĝiaj argumentoj, aŭ liaj inputs-- alia aro de sinonimoj 387 00:17:54,550 --> 00:17:57,340 ke vi eble renkontos. 388 00:17:57,340 --> 00:18:01,120 Tiu funkcio devus ĉu eligo vera aŭ malvera 389 00:18:01,120 --> 00:18:04,960 depende cxu tiuj tri longoj kapablas fari triangulon. 390 00:18:04,960 --> 00:18:09,930 Ĉu vi memoras la datumtipo ke ni kutimis indiki vera aŭ falsa? 391 00:18:09,930 --> 00:18:11,436 Nun kiel vi efektivigi tion? 392 00:18:11,436 --> 00:18:13,810 Nu scias estas kelkaj de reguloj koncerne trianguloj 393 00:18:13,810 --> 00:18:15,480 ke estas reale utila scii. 394 00:18:15,480 --> 00:18:18,292 Triangulo povas nur havi flankoj kun pozitiva longo. 395 00:18:18,292 --> 00:18:19,000 Tio havas sencon. 396 00:18:19,000 --> 00:18:21,432 Vi probable dirante, duh. 397 00:18:21,432 --> 00:18:23,390 La alia afero noti tamen, estas ke la sumo 398 00:18:23,390 --> 00:18:25,484 de la longoj de ajna du flankoj de la triangulo 399 00:18:25,484 --> 00:18:27,650 devas esti pli granda ol la longo de la tria flanko. 400 00:18:27,650 --> 00:18:28,690 Tio estas vere vera. 401 00:18:28,690 --> 00:18:34,150 Vi ne povas havi triangulo de flankoj 1, 2 kaj 4, ekzemple, ĉar 1 plus 2 402 00:18:34,150 --> 00:18:36,270 ne estas pli granda ol 4. 403 00:18:36,270 --> 00:18:38,870 Do tiuj estas la reguloj kiuj determini ĉu aŭ ne la tri 404 00:18:38,870 --> 00:18:42,740 enigoj povas penseble formas triangulon. 405 00:18:42,740 --> 00:18:46,360 Do prenu kelkajn minutojn kaj deklari kaj tiam difini 406 00:18:46,360 --> 00:18:49,810 tiu funkcio nomita valida triangulo, tia ke ĝi reale 407 00:18:49,810 --> 00:18:51,650 havas la konduto specifita tie. 408 00:18:51,650 --> 00:18:57,030 >> Ĝi eliriĝos vera se tiuj tri flankoj kapablas konsistanta triangulo, 409 00:18:57,030 --> 00:19:01,950 kaj falsaj alie Preta por lerni kiel vi faris? 410 00:19:01,950 --> 00:19:04,650 Jen unu efektivigo de validaj triangulo. 411 00:19:04,650 --> 00:19:05,770 Ĝi ne estas la sola. 412 00:19:05,770 --> 00:19:07,770 Yours povus varii iomete. 413 00:19:07,770 --> 00:19:11,040 Sed ĉi tiu faras, fakte, havas la konduto kiun ni atendas. 414 00:19:11,040 --> 00:19:14,450 Ni deklaras nian funkcio je la plejsupro, bool valida triangulo 415 00:19:14,450 --> 00:19:16,630 flosi x kaleŝego y kaleŝego Z. 416 00:19:16,630 --> 00:19:18,930 Do denove, ĉi tiu funkcio prenas tri reelaj nombroj 417 00:19:18,930 --> 00:19:22,280 kiel liaj argumentoj, flosante punkto valoro variabloj, 418 00:19:22,280 --> 00:19:26,510 kaj eligas vera aŭ malvera valoro, kiu estas Bulea, revokon. 419 00:19:26,510 --> 00:19:28,660 Do jen kial la reveno tipo estas bool. 420 00:19:28,660 --> 00:19:30,016 Poste ni difinas la funkcio. 421 00:19:30,016 --> 00:19:33,140 Unua afero ni fari estas kontroli por certiĝi ke ĉiuj la flankoj estas pozitivaj. 422 00:19:33,140 --> 00:19:37,010 Se x estas malpli ol aŭ egala al 0, aŭ se y egalas 0, 423 00:19:37,010 --> 00:19:41,050 aŭ se z estas malpli ol aŭ egala al 0, ke neniel povas esti triangulo. 424 00:19:41,050 --> 00:19:42,380 Ili ne havas pozitivajn flankojn. 425 00:19:42,380 --> 00:19:45,790 Kaj tiel ni povas reveni malvera en tiu situacio. 426 00:19:45,790 --> 00:19:49,010 Tuj, ni kontroli por certiĝi ke ĉiu paro de enigoj 427 00:19:49,010 --> 00:19:51,830 estas pli granda ol la trian. 428 00:19:51,830 --> 00:19:54,530 >> Do se x plus y estas malpli ol aŭ egala al z, 429 00:19:54,530 --> 00:19:57,060 aŭ se x plus z estas malpli ol aŭ egala al y, 430 00:19:57,060 --> 00:20:01,730 aŭ se y plus z estas malpli ol aŭ egala al x, kiu ankaŭ ne povas esti valida triangulo. 431 00:20:01,730 --> 00:20:03,800 Do ni revenu falsa denove. 432 00:20:03,800 --> 00:20:06,900 Supozante ni preterpasis ambaŭ de la ĉekojn tamen, tiam ni povas reveni vera. 433 00:20:06,900 --> 00:20:09,440 Ĉar tiuj tri flankoj kapablas returning-- 434 00:20:09,440 --> 00:20:11,647 krei validan triangulo. 435 00:20:11,647 --> 00:20:12,230 Kaj tio estas ĝi. 436 00:20:12,230 --> 00:20:13,830 Vi nun deklaris kaj difinita. 437 00:20:13,830 --> 00:20:17,330 Kaj vi povu nun uzi kaj nomas tiun funkcion. 438 00:20:17,330 --> 00:20:19,470 Granda laboro. 439 00:20:19,470 --> 00:20:20,650 Mi Doug Lloyd. 440 00:20:20,650 --> 00:20:22,820 Jen CS50. 441 00:20:22,820 --> 00:20:24,340