1 00:00:07,010 --> 00:00:09,640 [Powered by Google Translate] Funkcioj estas sekcioj de kodo uzata en pli granda programo 2 00:00:09,640 --> 00:00:11,430 plenumi apartan taskon. 3 00:00:11,430 --> 00:00:15,060 Ili estas ankaŭ sciata kiel proceduroj, subrutinas, kaj subprogramoj, 4 00:00:15,060 --> 00:00:18,320 ĉar ili vere estas nur minimuma programoj ene programoj. 5 00:00:18,320 --> 00:00:20,340 Kvankam eble vi ne rimarkis, 6 00:00:20,340 --> 00:00:24,090 vi plej certe uzis funkcioj jam se vi planas en C. 7 00:00:24,090 --> 00:00:26,770 Kiam vi skribas aĵojn al la ekrano uzante printf, 8 00:00:26,770 --> 00:00:29,380 vi fakte uzas funkcio nomita printf. 9 00:00:29,380 --> 00:00:33,760 Same, GetInt kaj GetString estas funkcioj kiuj CS50 provizas por vi. 10 00:00:33,760 --> 00:00:37,750 Kiel programistoj, ni uzas funkcioj por pluraj kialoj. 11 00:00:37,750 --> 00:00:41,240 >> Havante funkcioj por realigi komunajn taskojn kiel skribi al la ekrano 12 00:00:41,240 --> 00:00:44,480 kaj instigante la uzanto por enigo savas nin tempo kiam programado. 13 00:00:44,480 --> 00:00:47,510 Estas necese skribi kodon por fari tiujn samajn aferojn 14 00:00:47,510 --> 00:00:49,520 ekde ili estas jam farita por ni. 15 00:00:49,520 --> 00:00:54,580 Estas eĉ ne necesas ke ni komprenu ĝuste kiel tiuj funkcioj funkcias interne. 16 00:00:54,580 --> 00:00:58,880 Anstataŭe, ni nur devas scii uzi aŭ nomas ilin en niaj programoj. 17 00:00:58,880 --> 00:01:02,040 Estas ankaŭ helpema por skribi funkciojn en pli granda programoj 18 00:01:02,040 --> 00:01:04,330 eĉ se vi ne planas havi aliaj uzas ilin, 19 00:01:04,330 --> 00:01:06,830 nur por disdividi la pli granda tasko en mano. 20 00:01:06,830 --> 00:01:11,910 Tiel vi donas strukturo al via kodo multe kiel vi volas doni strukturon al provo, 21 00:01:11,910 --> 00:01:15,180 kaj kun vere granda projektoj vi ebligi plurajn personojn 22 00:01:15,180 --> 00:01:16,730 por labori en malsamaj partoj en la sama tempo 23 00:01:16,730 --> 00:01:20,480 ĉar ĝi estas klara kie persono laboro finiĝas kaj alia homo komencas. 24 00:01:20,480 --> 00:01:26,530 >> Funkcioj tipe operacii la 1 aŭ pli enigoj, konata kiel argumentoj aŭ parametroj, 25 00:01:26,530 --> 00:01:30,520 transformante tiuj enigoj enen eligo valoro kiu estas tiam revenis. 26 00:01:30,520 --> 00:01:34,950 Tamen, ĝi estas ankaŭ ebla al havi funkciojn kiuj ne uzas ajnan enigo argumentoj 27 00:01:34,950 --> 00:01:36,400 kaj ne revenas eliro. 28 00:01:36,400 --> 00:01:38,790 Konsentite, sufiĉas la lanugaj stuff. 29 00:01:38,790 --> 00:01:41,790 Ni rigardu kelkajn reala funkcioj en C. 30 00:01:41,790 --> 00:01:45,570 >> Ĉi tie ni havas funkcion nomita kvadrato ke, kredu aŭ ne, 31 00:01:45,570 --> 00:01:47,570 komputas la kvadrato de la enigo. 32 00:01:47,570 --> 00:01:49,490 Ni elsekigi la sintakso de ĝi. 33 00:01:49,490 --> 00:01:51,860 La unua vorto vi vidas en la funkcio, int, 34 00:01:51,860 --> 00:01:57,460 Specifas la reveno tipon de la funkcio, tio estas, la C tipon de la funkcia potenco. 35 00:01:57,460 --> 00:02:00,370 Ĉi tiu funkcio estos Eligu valoro kun tipo int. 36 00:02:00,370 --> 00:02:04,100 La sekvan vorton vi vidas estas la nomo de la funkcio, kvadrata en ĉi tiu kazo. 37 00:02:04,100 --> 00:02:07,390 Enoficigante funkcioj taŭge estas aparte grava 38 00:02:07,390 --> 00:02:11,260 ĉar ĝi estas probable la plej videbla dokumentado de kio la funkcio faras. 39 00:02:11,260 --> 00:02:14,880 Povus esti cool nomi tiun funkcion Shazam aŭ booyah, 40 00:02:14,880 --> 00:02:18,340 sed kiu ne diru al ni ion pri tio, kion la funkcio faras. 41 00:02:18,340 --> 00:02:23,470 >> Post la funkcio nomo venas la enigoj por la funkcio, la argumentoj. 42 00:02:23,470 --> 00:02:26,380 Ili estas listigitaj interne aro de krampoj 43 00:02:26,380 --> 00:02:30,160 kun ambaŭ siaj tipo kaj nomon uzi por ili ene de la korpo de la funkcio. 44 00:02:30,160 --> 00:02:34,030 Kvadrata prenas nur 1 argumento, la int al placo, 45 00:02:34,030 --> 00:02:36,160 kiu Mi decidis doni la nomon x. 46 00:02:36,160 --> 00:02:40,760 Ĉi tie finas la funkcio deklaro aŭ prototipo. 47 00:02:40,760 --> 00:02:43,320 La frizita krampoj ĉirkaŭ la resto de la funkcio 48 00:02:43,320 --> 00:02:45,870 signifi la komenco kaj fino de la funkcio korpon, 49 00:02:45,870 --> 00:02:48,320 la difino de la funkcio mem. 50 00:02:48,320 --> 00:02:50,300 Kvadrato estas bela simpla funkcio. 51 00:02:50,300 --> 00:02:54,100 Ĝi estas nur alvenis 1 linio, ĉar ĉiuj ni devas fari estas multipliki x por oni. 52 00:02:54,100 --> 00:02:59,250 La vorto reveno specifas la eligo valoron kaj provokas la fino de la funkcio. 53 00:02:59,250 --> 00:03:03,430 Por uzi la kvadrata funkcio, ni bezonas provizi la taŭga enigoj 54 00:03:03,430 --> 00:03:05,310 kaj tiam kapti la eligo. 55 00:03:05,310 --> 00:03:08,140 Ĉi tie, oni vidas kelkajn manierojn fari tion. 56 00:03:08,140 --> 00:03:13,600 Ni povas pasi en kruda int, kiel 6, aŭ ni povas pasi en variablo kiel. 57 00:03:13,600 --> 00:03:15,700 Notu ke ĉiu tempo ni nomas kvadrato, 58 00:03:15,700 --> 00:03:18,330 ni kapti la eligo en variablo kaj poste presi ĝin. 59 00:03:18,330 --> 00:03:22,690 Tamen, ni ne devas gardi la reveno valoron en variablo kaj poste presi. 60 00:03:22,690 --> 00:03:27,090 Ni povus simple sendi ĝin rekte al printf kiel ni faras kiam ni kvadrataj 10, 61 00:03:27,090 --> 00:03:30,580 sed ĉi tio signifas ke ni ne havas aliron al la reveno valoro de kvadrata 10 62 00:03:30,580 --> 00:03:32,230 aliloke en la kodo. 63 00:03:32,230 --> 00:03:34,890 Ni rigardu alia simpla ekzemplo. 64 00:03:34,890 --> 00:03:38,750 >> Ĉi-foje, ni adiciu 2 kaleŝegoj kune tiel ke ni povos vidi kion funkcio similas 65 00:03:38,750 --> 00:03:41,220 kiam ĝi atingis 2 enigoj anstataŭ nur 1. 66 00:03:41,220 --> 00:03:43,950 Kiel vi povas vidi, ĝi ne estas tre malsama. 67 00:03:43,950 --> 00:03:47,330 Ĉiuj ni estas aldoni en la 2-a argumento, kaleŝego nomata b, 68 00:03:47,330 --> 00:03:51,820 al la argumento listo uzante komo por disigi ĝin de la unua argumento, flosi al. 69 00:03:51,820 --> 00:03:55,550 Do, niaj kvadrato kaj sumo funkcioj estas bela facila por kompreni 70 00:03:55,550 --> 00:03:58,930 ĉar ili estas ekvivalentaj al funkcioj, ke vi vidis antaŭe en math klaso. 71 00:03:58,930 --> 00:04:01,610 Nun, ni rigardu funkcio kiu estas iomete malsamaj. 72 00:04:01,610 --> 00:04:04,620 Anstataŭ reveni valoro, ĝi modifas stato. 73 00:04:04,620 --> 00:04:07,260 Ĉi tiu estas sciata kiel havi kromefikon. 74 00:04:07,260 --> 00:04:10,750 En ĉi tiu programo, la printf_fudd_style funkcio 75 00:04:10,750 --> 00:04:13,410 havas reveno tipo kiun ni ne vidis antaŭe, malplenon. 76 00:04:13,410 --> 00:04:16,730 >> Void uzas por diri ke funkcio ne redonas nenion. 77 00:04:16,730 --> 00:04:19,410 Ne estas variabloj de tipo void, 78 00:04:19,410 --> 00:04:22,760 do se vi provas redoni ion de funkcio kiel printf_fudd_style, 79 00:04:22,760 --> 00:04:24,290 la tradukilo krias al vi. 80 00:04:24,290 --> 00:04:29,390 Ene printf_fudd_style, ni vidas, ke dum la funkcio ankoraŭ plenumas taskon, 81 00:04:29,390 --> 00:04:31,890 nome, ŝanĝante ĉiuj Rs al WS, 82 00:04:31,890 --> 00:04:36,380 la punkto de la funkcio estas modifi la kordo kaj poste presi ĝin sur la ekrano, 83 00:04:36,380 --> 00:04:39,400 ŝanĝi la staton de la programo anstataux redoni rezulto. 84 00:04:39,400 --> 00:04:43,700 Uzanta ĉi tiu funkcio estas tre multe kiel uzi nian kvadrato kaj sumo funkcioj, 85 00:04:43,700 --> 00:04:46,950 krom ni ne stoki la rezultita en variablo aŭ pasi ĝin al alia funkcio 86 00:04:46,950 --> 00:04:49,520 ekde estas ne rezulto paroli. 87 00:04:49,520 --> 00:04:53,180 Do, kiam ni tradukigi kaj ruli nia Elmer Fudd programo, 88 00:04:53,180 --> 00:04:56,970 vi vidas ke "Vi friponojn kuniklo!" gets transformita rajton 89 00:04:56,970 --> 00:04:58,730 "Vi wascally wabbit!" 90 00:04:58,730 --> 00:05:02,250 >> Fine, ekzistas ankoraŭ 1 funkcio valoras diskuti 91 00:05:02,250 --> 00:05:06,810 ĉar vi jam uzis ĝin en ĉiu C-programo vi iam skribis, ĉefa. 92 00:05:06,810 --> 00:05:09,450 Artikolo estas funkcio multe kiel ajna alia. 93 00:05:09,450 --> 00:05:13,580 Oni havas reveno tipo, nomo, listo de argumentoj, kaj korpo. 94 00:05:13,580 --> 00:05:16,110 La reveno tipo de ĉefa estas ĉiam int, 95 00:05:16,110 --> 00:05:19,120 kaj ĉi int uzas por komuniki la stato de la programo kiam finas. 96 00:05:19,120 --> 00:05:23,360 >> Ĉu ĝi funkcias kun sukceso, aŭ ĉu ĝi finos frue pro eraro? 97 00:05:23,360 --> 00:05:26,390 Reveni al nulo indikas sukcesan kuri, 98 00:05:26,390 --> 00:05:29,510 kaj revenante ĉiu ne-nula valoro indikas eraron. 99 00:05:29,510 --> 00:05:31,950 Depende de la tipo de programo vi skribas, 100 00:05:31,950 --> 00:05:34,960 reveni malsamaj kodoj por diversaj eraroj povas esti utila 101 00:05:34,960 --> 00:05:37,210 por homoj kiuj uzas vian programon poste. 102 00:05:37,210 --> 00:05:40,220 Elektra reto argumentoj estas iom pli komplika. 103 00:05:40,220 --> 00:05:42,150 >> La argumento listo povas ĉu esti malplena, 104 00:05:42,150 --> 00:05:45,330 kiuj ni indikas per skribanta malplena en inter la krampoj, 105 00:05:45,330 --> 00:05:50,220 aŭ la listo povas havi 2 argumentojn: estas int kaj tabelo de char * s. 106 00:05:50,220 --> 00:05:52,820 Tiuj estas uzataj kiam via programo intencas uzi 107 00:05:52,820 --> 00:05:56,490 argumentoj pasis en la komanda linio kiam la programo estas alvokebla. 108 00:05:56,490 --> 00:05:59,690 La int argumento estas tipe nomata argc, 109 00:05:59,690 --> 00:06:03,300 kaj estas egala la longo de la char * aro, konata kiel argv. 110 00:06:03,300 --> 00:06:07,080 Argv enhavas la komandlinio argumentoj transiris en la programo. 111 00:06:07,080 --> 00:06:11,440 En alia mallonga, ni parolos pri kiel uzi tiujn variablojn en pli detalo. 112 00:06:11,440 --> 00:06:15,220 Por la momento, vi povas senti libere deklari ĉefa ajna maniero. 113 00:06:15,220 --> 00:06:19,410 Mi tipe elektas skribi ĝin malplilongigita maniero, sen argumentoj, kiam eblas. 114 00:06:19,410 --> 00:06:22,230 >> Nun ke vi scias skribi funkciojn, 115 00:06:22,230 --> 00:06:25,030 vi bone sur via vojo al evoluantaj grandaj, pli kompleksajn programojn. 116 00:06:25,030 --> 00:06:29,740 Mia nomo estas Nate Hardison. Ĉi tiu estas CS50.