1 00:00:00,000 --> 00:00:04,664 2 00:00:04,664 --> 00:00:05,580 DOUG LLOYD: D'acord. 3 00:00:05,580 --> 00:00:08,877 Així que ara anem a una entrada Realment gran tema, funcions. 4 00:00:08,877 --> 00:00:11,460 Fins ara, en el curs, tot el programes que hem estat escrivint 5 00:00:11,460 --> 00:00:12,969 s'han escrit a l'interior de la principal. 6 00:00:12,969 --> 00:00:14,260 Són programes molt simples. 7 00:00:14,260 --> 00:00:16,940 Vostè no necessita tenir tots aquests branques i coses a fer. 8 00:00:16,940 --> 00:00:18,773 Només podem fer-ho tot dins del principal i 9 00:00:18,773 --> 00:00:20,407 no aconseguir terriblement aclaparador. 10 00:00:20,407 --> 00:00:22,990 Però a mesura que el curs segueix i a mesura que comença a desenvolupar programes 11 00:00:22,990 --> 00:00:26,260 independent, probablement van per començar a obtenir una gran quantitat més de 10 12 00:00:26,260 --> 00:00:27,200 o 15 línies. 13 00:00:27,200 --> 00:00:31,400 Vostè pot obtenir centenars o milers o desenes de milers de línies de codi. 14 00:00:31,400 --> 00:00:34,690 I en realitat no és que boig un pensament. 15 00:00:34,690 --> 00:00:39,720 Com a tal, no és probablement una bona idea per mantenir tot l'interior de la principal. 16 00:00:39,720 --> 00:00:43,240 Pot ser una mica difícil de trobar el que estàs buscant si fas això. 17 00:00:43,240 --> 00:00:47,040 >> Afortunadament, tot i C, i més o menys qualsevol altre llenguatge de programació que 18 00:00:47,040 --> 00:00:50,386 podrien treballar, permet que escrivim funcions. 19 00:00:50,386 --> 00:00:52,260 I jo només vaig a prendre una ràpida costat aquí 20 00:00:52,260 --> 00:00:54,971 esmentar que les funcions és una àrea de la informàtica. 21 00:00:54,971 --> 00:00:57,970 I veuràs molts més d'ells en diversos punts al llarg del curs 22 00:00:57,970 --> 00:00:59,290 i si continua endavant. 23 00:00:59,290 --> 00:01:02,280 On hi ha una gran quantitat de sinònims de la mateixa paraula. 24 00:01:02,280 --> 00:01:03,390 Així que cridem a les funcions. 25 00:01:03,390 --> 00:01:05,980 Però també pot ser que sentir-los referit com a procediments, 26 00:01:05,980 --> 00:01:09,570 o mètodes, sobretot, si tens alguna vegada fet cap programació orientada a objectes 27 00:01:09,570 --> 00:01:11,950 abans-- i no et preocupis si no, no té 28 00:01:11,950 --> 00:01:14,280 un gran Deal-- però en orientat auditoria idiomes 29 00:01:14,280 --> 00:01:16,129 són cridats amb freqüència mètodes. 30 00:01:16,129 --> 00:01:17,670 De vegades se'ls crida subrutines. 31 00:01:17,670 --> 00:01:20,690 Però el que realment tots es refereixen a la mateixa idea bàsica. 32 00:01:20,690 --> 00:01:22,480 >> Anem a veure el que aquesta idea és. 33 00:01:22,480 --> 00:01:23,310 Què és una funció? 34 00:01:23,310 --> 00:01:26,470 Bé una funció és realment res més que un quadre negre. 35 00:01:26,470 --> 00:01:31,430 Un quadre negre que té un conjunt de zero o més entrades i una sola sortida. 36 00:01:31,430 --> 00:01:33,420 Així, per exemple, aquest podria ser una funció. 37 00:01:33,420 --> 00:01:35,510 Aquesta és una funció anomenada func. 38 00:01:35,510 --> 00:01:39,330 I es necessita tres entrades a, b i c. 39 00:01:39,330 --> 00:01:42,580 I dins d'aquesta caixa negre, ens No sé exactament el que fa, 40 00:01:42,580 --> 00:01:45,100 però processa les entrades d'alguna manera i llavors 41 00:01:45,100 --> 00:01:48,680 dóna una sola sortida, en aquest cas, z. 42 00:01:48,680 --> 00:01:50,504 Ara, perquè sigui una mica menys abstracte, ens 43 00:01:50,504 --> 00:01:52,420 Podríem dir que potser tenir una funció anomenada 44 00:01:52,420 --> 00:01:58,750 afegir que té tres entrades a, b, i c i processa la sortida d'alguna manera 45 00:01:58,750 --> 00:02:01,010 dins de la caixa de negre per produir una única sortida. 46 00:02:01,010 --> 00:02:05,190 Així doncs, en aquest cas, si afegir pren 3, 6 i 7. 47 00:02:05,190 --> 00:02:07,020 En algun lloc dins de la afegir la funció, ho faríem 48 00:02:07,020 --> 00:02:09,750 esperar que se sumaran per produir la sortida, la qual 49 00:02:09,750 --> 00:02:13,220 és 3 més 6 més 7 o 16. 50 00:02:13,220 --> 00:02:17,940 >> De la mateixa manera, té una funció anomenada mult que té dues entrades, A i B, 51 00:02:17,940 --> 00:02:21,070 els processa d'alguna manera que la sortida de la funció 52 00:02:21,070 --> 00:02:22,920 és el producte de les dues entrades. 53 00:02:22,920 --> 00:02:25,080 Les dues entrades multipliquen entre si. 54 00:02:25,080 --> 00:02:29,150 4 i 5 es va traspassar mult, alguna cosa passa, el resultat que esperem 55 00:02:29,150 --> 00:02:31,090 és 20. 56 00:02:31,090 --> 00:02:32,507 Per què en diem un quadre negre? 57 00:02:32,507 --> 00:02:34,840 Bé, si no estem escrivint la Funcions a nosaltres mateixos, el que 58 00:02:34,840 --> 00:02:36,869 hem fet una mica en el que va CS50. 59 00:02:36,869 --> 00:02:39,910 Hem vist d'impressió f, per exemple, que és una funció que no escrivim 60 00:02:39,910 --> 00:02:42,305 nosaltres mateixos, sinó que fa ús de tot el temps. 61 00:02:42,305 --> 00:02:44,180 Si no estem escrivint les funcions de nosaltres mateixos, 62 00:02:44,180 --> 00:02:48,450 que realment no necessitem saber com és realment implementat sota el capó. 63 00:02:48,450 --> 00:02:51,710 >> Així per exemple, el quadre negre I només li va mostrar per la multiplicació, 64 00:02:51,710 --> 00:02:53,740 mult a, b podria ser defined-- i això és només 65 00:02:53,740 --> 00:02:57,902 alguns pseudocode-- podria ser definida com la producció a vegades b. 66 00:02:57,902 --> 00:02:58,860 Això té sentit, a la dreta. 67 00:02:58,860 --> 00:03:01,370 Si tenim una funció anomenada mult que té dues entrades. 68 00:03:01,370 --> 00:03:04,750 És d'esperar que la sortida seria ser les dues entrades multipliquen entre si, 69 00:03:04,750 --> 00:03:06,240 unes vegades b. 70 00:03:06,240 --> 00:03:09,170 Però també podria ser mult implementat com aquest, 71 00:03:09,170 --> 00:03:13,150 tenim un comptador variable posar-se a l'interior de mult a 0. 72 00:03:13,150 --> 00:03:18,000 I després repetim aquest procés b vegades agreguen un marcador. 73 00:03:18,000 --> 00:03:24,270 Per exemple, si multipliquem per 3 bis 5b, podríem dir establir comptador a 0, 74 00:03:24,270 --> 00:03:27,700 repetir cinc vegades, afegir 3 al marcador. 75 00:03:27,700 --> 00:03:34,490 Així que vam començar a 0 i després fem això cinc vegades 3, 6, 9, 12, 15. 76 00:03:34,490 --> 00:03:37,500 És el mateix resultat. Nosaltres tot i així obtenir 3 vegades 5 solament 77 00:03:37,500 --> 00:03:39,500 la implementació és diferent. 78 00:03:39,500 --> 00:03:41,490 >> Això és el que volem dir quan diem que un quadre negre. 79 00:03:41,490 --> 00:03:44,406 Només vol dir que realment no importa com s'implementa sota el capó 80 00:03:44,406 --> 00:03:46,170 sempre i quan la sortida és el que esperem. 81 00:03:46,170 --> 00:03:49,045 De fet, això és part del contracte de la utilització de les funcions, en particular 82 00:03:49,045 --> 00:03:50,630 funcions que altres escriuen. 83 00:03:50,630 --> 00:03:53,980 El comportament sempre va ser típic, impredictible 84 00:03:53,980 --> 00:03:55,420 basat en el nom de la funció. 85 00:03:55,420 --> 00:03:57,500 I és per això que és molt important a l'hora d'escriure funcions 86 00:03:57,500 --> 00:04:00,020 o quan altres persones escriuen funcions que pot utilitzar, 87 00:04:00,020 --> 00:04:03,590 que aquestes funcions tenen clares, noms relativament òbvies, 88 00:04:03,590 --> 00:04:04,990 i estan ben documentats. 89 00:04:04,990 --> 00:04:08,560 La qual cosa és certament el cas per a la funció com la impressió f. 90 00:04:08,560 --> 00:04:09,860 >> Llavors, per què fem servir funcions? 91 00:04:09,860 --> 00:04:14,220 Bé, com he dit abans, si escrivim tot el nostre codi dins de les coses principals 92 00:04:14,220 --> 00:04:17,120 pot ser realment complicat i realment complicat. 93 00:04:17,120 --> 00:04:19,980 Funcions ens permeten la capacitat per organitzar les coses i trencar 94 00:04:19,980 --> 00:04:24,540 un problema molt complicat en moltes parts sub més manejables. 95 00:04:24,540 --> 00:04:28,130 Les funcions també ens permeten simplificar el procés de codificació. 96 00:04:28,130 --> 00:04:33,080 És molt més fàcil de depurar un 10 funció de línia enfront d'una línia de 100 97 00:04:33,080 --> 00:04:35,890 funció o una funció de línia de 1000. 98 00:04:35,890 --> 00:04:38,400 Si tan sols hem de depurar petites peces alhora, 99 00:04:38,400 --> 00:04:42,110 o escriure petits trossos de l'època, que fa que l'experiència en programació 100 00:04:42,110 --> 00:04:43,070 molt millor. 101 00:04:43,070 --> 00:04:44,910 Confia en mi en això. 102 00:04:44,910 --> 00:04:48,400 >> Finalment, si escrivim funcions que pot reutilitzar aquestes diverses parts. 103 00:04:48,400 --> 00:04:49,880 Les funcions poden ser reciclats. 104 00:04:49,880 --> 00:04:51,880 Poden ser utilitzats en un programa o un altre. 105 00:04:51,880 --> 00:04:53,713 Ja has escrit la funció, tot el que 106 00:04:53,713 --> 00:04:56,530 cal fer és dir-li a aquest programa on trobar aquesta funció. 107 00:04:56,530 --> 00:04:59,680 Hem estat reciclant i utilitzant imprimir f per més de 40 anys. 108 00:04:59,680 --> 00:05:02,150 Però només va ser escrit una vegada. 109 00:05:02,150 --> 00:05:04,270 Bastant útil, dreta. 110 00:05:04,270 --> 00:05:04,830 Tot bé. 111 00:05:04,830 --> 00:05:06,040 Així funcions són grans. 112 00:05:06,040 --> 00:05:06,860 Sabem això. 113 00:05:06,860 --> 00:05:08,700 Ara anem a començar a escriure ells. 114 00:05:08,700 --> 00:05:10,830 Comencem aconseguir ells en els nostres programes. 115 00:05:10,830 --> 00:05:13,869 Per tal de fer això, la primera El que fem és declarar la funció. 116 00:05:13,869 --> 00:05:16,160 Quan es declara una funció el que estàs fent, bàsicament, 117 00:05:16,160 --> 00:05:18,900 està dient que el compilador, bo, perquè ho sàpigues, 118 00:05:18,900 --> 00:05:20,850 Vaig a estar escrivint una funció més endavant 119 00:05:20,850 --> 00:05:22,987 i això és el que va a ser similar. 120 00:05:22,987 --> 00:05:24,820 La raó d'això és perquè els compiladors pot 121 00:05:24,820 --> 00:05:27,900 fer algunes coses estranyes si veuen un conjunt de símbols 122 00:05:27,900 --> 00:05:29,560 que no estan familiaritzats. 123 00:05:29,560 --> 00:05:33,000 Així que només ens donem el compilador 1 heads up, estic creant una funció 124 00:05:33,000 --> 00:05:35,492 i que va a fer això. 125 00:05:35,492 --> 00:05:38,450 Declaracions de funció general si vostè està organitzant el seu codi de manera 126 00:05:38,450 --> 00:05:41,872 que altres podran entendre i fer ús de, 127 00:05:41,872 --> 00:05:44,330 en general, vol posar tot de les seves declaracions de funcions 128 00:05:44,330 --> 00:05:48,220 a la part superior del seu codi, a la dreta abans de començar a escriure fins i tot principal. 129 00:05:48,220 --> 00:05:50,770 I convenientment, hi una forma molt estàndard 130 00:05:50,770 --> 00:05:53,500 que cada declaració segueix a la funció. 131 00:05:53,500 --> 00:05:56,090 Ells tots més o menys el següent aspecte. 132 00:05:56,090 --> 00:06:01,440 Hi ha tres parts a una funció declaració, el tipus de devolució, nom, 133 00:06:01,440 --> 00:06:03,420 i la llista d'arguments. 134 00:06:03,420 --> 00:06:07,180 >> Ara el tipus de retorn és quin tipus de variable de la sortida de funció voluntat. 135 00:06:07,180 --> 00:06:10,710 Així per exemple, si pensem tornar una Fa minuts a la multiplicació de dos 136 00:06:10,710 --> 00:06:15,690 funció dels números, què esperem si multipliquem un nombre enter per un nombre enter 137 00:06:15,690 --> 00:06:18,502 la sortida serà Probablement un nombre enter, a la dreta. 138 00:06:18,502 --> 00:06:20,710 Multiplica dos enters junts, s'obté un sencer. 139 00:06:20,710 --> 00:06:24,167 Així que el tipus de retorn d'aquesta funció seria int. 140 00:06:24,167 --> 00:06:26,000 Nom és el que vols per cridar a la seva funció. 141 00:06:26,000 --> 00:06:29,330 Aquest és probablement el menys important part de la declaració de la funció, 142 00:06:29,330 --> 00:06:30,827 en termes de funcionalitat. 143 00:06:30,827 --> 00:06:33,160 Però en realitat és probablement un de les parts més importants 144 00:06:33,160 --> 00:06:36,243 de la declaració de la funció en termes de saber el que la funció de realitat 145 00:06:36,243 --> 00:06:37,120 ho fa. 146 00:06:37,120 --> 00:06:40,474 Si el nom de la seva funció f o g o ho misteri o alguna cosa així, 147 00:06:40,474 --> 00:06:42,765 vostè està probablement va a aconseguir una mica ensopegar tractant 148 00:06:42,765 --> 00:06:44,650 recordar quines són aquestes funcions ho fan. 149 00:06:44,650 --> 00:06:47,880 Així que és important donar-li al seu noms significatius de funció. 150 00:06:47,880 --> 00:06:51,030 >> Finalment, la llista d'arguments és la llista separada per comes 151 00:06:51,030 --> 00:06:55,260 de totes les entrades a la seva funció, cadascun dels quals té un tipus i un nom. 152 00:06:55,260 --> 00:06:57,840 Així que no només ha vostè que especificar quin tipus de variable 153 00:06:57,840 --> 00:07:00,760 la sortida de la funció de la voluntat, també desitja especificar 154 00:07:00,760 --> 00:07:07,694 quin tipus i tipus de variables les la funció estarà acceptant com a entrades. 155 00:07:07,694 --> 00:07:08,860 Així que farem un exemple aquí. 156 00:07:08,860 --> 00:07:10,220 Anem a fer una ullada a un més concret. 157 00:07:10,220 --> 00:07:13,130 Així que aquí està un exemple d'una funció declaració per a una funció que 158 00:07:13,130 --> 00:07:14,925 afegiria dos enters junts. 159 00:07:14,925 --> 00:07:17,800 La suma de dos nombres enters va sigui un nombre sencer, així, com acabem 160 00:07:17,800 --> 00:07:18,450 discutit. 161 00:07:18,450 --> 00:07:21,610 I pel que el tipus de retorn, aquí en verd, seria int. 162 00:07:21,610 --> 00:07:25,190 Això només nosaltres afegir dos ints diu va, al final del dia, 163 00:07:25,190 --> 00:07:28,799 sortida o escopir de nou a nosaltres, un enter. 164 00:07:28,799 --> 00:07:31,590 Tenint en compte el que fa aquesta funció ens que desitgi donar-li un nom significatiu. 165 00:07:31,590 --> 00:07:33,630 Afegir dos enters sembla apropiat, tenint en compte 166 00:07:33,630 --> 00:07:37,574 estem prenent dos enters com entrades i és d'esperar sumar-los. 167 00:07:37,574 --> 00:07:40,240 Pot ser que sigui una mica molest nom i, francament, aquesta funció 168 00:07:40,240 --> 00:07:42,430 és probable que no sigui necessari ja que comptem amb l'addició 169 00:07:42,430 --> 00:07:46,310 operador, si vostè recorda de la nostra discussió dels operadors, amb anterioritat. 170 00:07:46,310 --> 00:07:49,650 Però diguem que pel bé de argument que aquesta funció és útil 171 00:07:49,650 --> 00:07:52,860 i així ho anem a cridar afegir dos enters. 172 00:07:52,860 --> 00:07:55,230 Finalment, aquesta funció pren dues entrades. 173 00:07:55,230 --> 00:07:56,960 Cada un dels quals és un nombre enter. 174 00:07:56,960 --> 00:07:59,900 Així que tenim aquesta comes llista separada de les entrades. 175 00:07:59,900 --> 00:08:02,830 Ara en general volem donar un nom a cada un d'ells 176 00:08:02,830 --> 00:08:05,070 de manera que puguin ser utilitzats dins de la funció. 177 00:08:05,070 --> 00:08:07,180 Els noms no són molt importants. 178 00:08:07,180 --> 00:08:11,400 >> En aquest cas, no ho fem necessàriament tenir algun significat unit a ells. 179 00:08:11,400 --> 00:08:13,140 Així que només els podem trucar a i b. 180 00:08:13,140 --> 00:08:14,257 Això és totalment bé. 181 00:08:14,257 --> 00:08:16,090 No obstant això, si vostè troba en una situació 182 00:08:16,090 --> 00:08:19,497 on els noms de les variables en realitat podria ser important, 183 00:08:19,497 --> 00:08:21,830 és possible que voleu trucar alguna cosa diferent de A i B 184 00:08:21,830 --> 00:08:24,701 donar-los una mica més simbòlicament significativa. 185 00:08:24,701 --> 00:08:27,700 Però en aquest cas, no ho fem de veritat saber alguna cosa més sobre la funció. 186 00:08:27,700 --> 00:08:29,320 Només volem sumar dos nombres enters. 187 00:08:29,320 --> 00:08:32,429 Així que només anomenarem els nombres enters a i b. 188 00:08:32,429 --> 00:08:33,990 Això és un exemple. 189 00:08:33,990 --> 00:08:36,287 >> Per què no et prens un segon pensar sobre això, 190 00:08:36,287 --> 00:08:38,870 Com escriure una funció declaració per a una funció que 191 00:08:38,870 --> 00:08:42,940 multiplica dos nombres de punt flotant? 192 00:08:42,940 --> 00:08:45,910 Te'n recordes del que és un nombre de punt flotant és? 193 00:08:45,910 --> 00:08:48,120 Què seria d'aquesta funció declaració sembla? 194 00:08:48,120 --> 00:08:53,330 Realment et recomano que pausar el vídeo aquí i pren la quantitat de temps que necessita. 195 00:08:53,330 --> 00:08:55,521 Penseu en el que això declaració de la funció seria? 196 00:08:55,521 --> 00:08:56,770 Quin seria el tipus de canvi? 197 00:08:56,770 --> 00:08:58,103 Quin seria un nom significatiu? 198 00:08:58,103 --> 00:08:59,580 Quines serien les entrades? 199 00:08:59,580 --> 00:09:03,190 Així que per què no fa una pausa en el vídeo aquí i escriure en marxa una declaració de funció 200 00:09:03,190 --> 00:09:07,640 per a una funció que es multiplicaria dos nombres de punt flotant junts. 201 00:09:07,640 --> 00:09:09,330 Esperem que pausa el vídeo. 202 00:09:09,330 --> 00:09:12,950 >> Així que anem a fer una ullada a un exemple d'una sola declaració possible. 203 00:09:12,950 --> 00:09:17,340 Flotador mult dos reals suren x, float i. 204 00:09:17,340 --> 00:09:19,090 El producte de dos nombres de punt flotant, 205 00:09:19,090 --> 00:09:21,710 recordar són la forma en què representar nombres reals 206 00:09:21,710 --> 00:09:26,770 o números amb valors decimals en c, serà un nombre de punt flotant. 207 00:09:26,770 --> 00:09:28,570 Quan multipliques 1 decimal per un nombre decimal, 208 00:09:28,570 --> 00:09:30,460 vostè està probablement va a aconseguir un decimal. 209 00:09:30,460 --> 00:09:31,960 Vols donar-li un nom rellevant. 210 00:09:31,960 --> 00:09:33,810 Multiplicar dos reals sembla bé. 211 00:09:33,810 --> 00:09:36,620 Però vostè podria realment cridar mult dos flotadors o boies mult. 212 00:09:36,620 --> 00:09:39,540 Res d'això, sempre que va donar un significat real al que 213 00:09:39,540 --> 00:09:41,469 aquest quadre negre que anava a fer. 214 00:09:41,469 --> 00:09:44,260 I de nou, en aquest cas, no ho fem sembla tenir cap significat adjunta 215 00:09:44,260 --> 00:09:46,390 als noms de la les variables que estem passant a, 216 00:09:46,390 --> 00:09:48,645 així que només els anomenem x i y. 217 00:09:48,645 --> 00:09:51,020 Ara bé, si vostè els diu alguna cosa una altra cosa, això és totalment bé. 218 00:09:51,020 --> 00:09:53,310 De fet, si ho has fet aquesta declaració en el seu lloc 219 00:09:53,310 --> 00:09:55,450 utilitzant dobles vegada de flotadors, si recordes 220 00:09:55,450 --> 00:09:59,100 que els dobles són una diferent manera de forma més precisa 221 00:09:59,100 --> 00:10:02,330 especificar els nombres reals o variables de punt flotant. 222 00:10:02,330 --> 00:10:03,620 Això és totalment bé també. 223 00:10:03,620 --> 00:10:04,670 Qualsevol dels que estaria bé. 224 00:10:04,670 --> 00:10:06,711 De fet, hi ha diversos diferents combinacions 225 00:10:06,711 --> 00:10:08,410 de maneres de declarar aquesta funció. 226 00:10:08,410 --> 00:10:10,884 Però aquests són dos molt bons. 227 00:10:10,884 --> 00:10:12,550 Hem declarat una funció, això és genial. 228 00:10:12,550 --> 00:10:15,700 Li hem dit que el compilador el que És a dir, el que farem. 229 00:10:15,700 --> 00:10:17,630 Ara anem a escriure en realitat aquesta funció. 230 00:10:17,630 --> 00:10:20,750 Anem a donar-li una definició, per la qual cosa dins de la caixa de negre 231 00:10:20,750 --> 00:10:22,840 comportament predictible està succeint. 232 00:10:22,840 --> 00:10:26,270 De fet, estem multiplicant dos reals números junts, o l'addició de nombres 233 00:10:26,270 --> 00:10:29,760 junts, o fer el que sigui que demanem nostra funció de fer. 234 00:10:29,760 --> 00:10:32,780 >> Així que, de fet, anem a tractar de definir multiplicar dos nombres reals que acabem 235 00:10:32,780 --> 00:10:35,350 parlat fa un segon. 236 00:10:35,350 --> 00:10:38,560 Ara bé, el principi de una definició de funció 237 00:10:38,560 --> 00:10:41,720 es veu gairebé exactament el mateix com una declaració de la funció. 238 00:10:41,720 --> 00:10:43,170 Tinc dos d'ells aquí. 239 00:10:43,170 --> 00:10:47,770 A la part superior és la declaració de la funció, tipus, nom, separats per comes argument 240 00:10:47,770 --> 00:10:49,410 llista, punt i coma. 241 00:10:49,410 --> 00:10:53,800 El punt i coma indica que que és una declaració de la funció. 242 00:10:53,800 --> 00:10:57,060 El principi de la funció definició es veu gairebé exactament 243 00:10:57,060 --> 00:11:03,790 la mateixa, tipus, nom, separats per comes llista d'arguments, sense punt i coma, 244 00:11:03,790 --> 00:11:05,206 obrir claudàtor. 245 00:11:05,206 --> 00:11:07,580 La clau d'obertura, igual que que hem estat fent amb el principal, 246 00:11:07,580 --> 00:11:09,540 vol dir que estem ara començant a definir 247 00:11:09,540 --> 00:11:14,567 el que passa dins de la caixa negre que hem decidit anomenar mult dos reals. 248 00:11:14,567 --> 00:11:15,900 Aquí és una manera de posar-ho en pràctica. 249 00:11:15,900 --> 00:11:20,370 Podríem dir, podríem declarar un nou variable del flotador anomenat tipus de producte 250 00:11:20,370 --> 00:11:24,020 i assignar aquesta variable al valor de x vegades i. 251 00:11:24,020 --> 00:11:27,306 I després tornar el producte. 252 00:11:27,306 --> 00:11:28,430 Què significa aquí retorn. 253 00:11:28,430 --> 00:11:31,090 Bé retorn és el camí indiquem que és com 254 00:11:31,090 --> 00:11:33,400 estem passant la sortida de tornada. 255 00:11:33,400 --> 00:11:38,160 Així retornar alguna cosa, és la mateixa que, aquesta és la sortida de la caixa de color negre. 256 00:11:38,160 --> 00:11:40,732 Així que aquesta és la forma de fer-ho. 257 00:11:40,732 --> 00:11:42,190 Aquí hi ha una altra manera de posar-ho en pràctica. 258 00:11:42,190 --> 00:11:45,050 Podríem simplement tornar x vegades i. 259 00:11:45,050 --> 00:11:45,870 x és un flotador. 260 00:11:45,870 --> 00:11:46,660 i és un flotador. 261 00:11:46,660 --> 00:11:48,490 Així que x vegades i també és un flotador. 262 00:11:48,490 --> 00:11:50,750 Ni tan sols necessitem crear una altra variable. 263 00:11:50,750 --> 00:11:56,750 Així que aquesta és una manera diferent de aplicar el mateix quadre negre exacta. 264 00:11:56,750 --> 00:11:58,570 >> Ara prengui un moment, pausar el vídeo de nou, 265 00:11:58,570 --> 00:12:01,680 i tractar de definir sumar dos sencers, que és l'altra funció que ens 266 00:12:01,680 --> 00:12:03,090 parlat fa un moment. 267 00:12:03,090 --> 00:12:06,440 De nou aquí, he posat la funció declaració, per la qual cosa el punt i coma, 268 00:12:06,440 --> 00:12:08,420 i un claudàtor obert i un arrissat tancada 269 00:12:08,420 --> 00:12:12,080 brida per indicar on anem a omplir en els continguts de sumar dos enters, 270 00:12:12,080 --> 00:12:15,530 de manera que definim el particular el comportament dins de la caixa de color negre. 271 00:12:15,530 --> 00:12:16,380 Així que fer una pausa en el vídeo. 272 00:12:16,380 --> 00:12:18,790 I prendre tot el temps que cal provar i definir 273 00:12:18,790 --> 00:12:25,040 una implementació de sumar dos sencers, com que quan la funció de sortida a un valor, 274 00:12:25,040 --> 00:12:29,209 ho fa, de fet, el retorn la suma de les dues entrades. 275 00:12:29,209 --> 00:12:32,000 Així que igual que l'exemple anterior, hi ha diverses maneres diferents 276 00:12:32,000 --> 00:12:34,210 que es podia aplicar afegir dos enters. 277 00:12:34,210 --> 00:12:35,130 Aquí n'hi ha un. 278 00:12:35,130 --> 00:12:37,172 Aquí a taronja tinc només tenia alguns comments-- 279 00:12:37,172 --> 00:12:38,880 Jo només he afegit alguns comentaris per a indicar 280 00:12:38,880 --> 00:12:41,400 el que està succeint en cada línia de codi. 281 00:12:41,400 --> 00:12:45,430 Així que em declaro una variable anomenada suma de tipus int. 282 00:12:45,430 --> 00:12:47,279 Dic suma és igual a més b. 283 00:12:47,279 --> 00:12:50,070 Aquí és on en realitat estem fent el treball afegint A i B junts. 284 00:12:50,070 --> 00:12:51,850 I torno suma. 285 00:12:51,850 --> 00:12:56,460 I això té sentit perquè suma és una variable de tipus int. 286 00:12:56,460 --> 00:13:00,180 I quin és el tipus de dades que aquesta funció em diu que va a la sortida? 287 00:13:00,180 --> 00:13:00,680 Int. 288 00:13:00,680 --> 00:13:03,072 Així que estic tornant suma, que és una variable sencera. 289 00:13:03,072 --> 00:13:06,030 I això té sentit tenint en compte el que hem declarat i definit la nostra funció 290 00:13:06,030 --> 00:13:07,320 fer. 291 00:13:07,320 --> 00:13:09,700 >> Ara vostè també pot definir la funció d'aquesta manera, 292 00:13:09,700 --> 00:13:15,260 int suma és igual a un plus B-- saltar aquesta primer step-- i després, tornar suma. 293 00:13:15,260 --> 00:13:17,760 Ara vostè podria tenir també implementat d'aquesta manera, 294 00:13:17,760 --> 00:13:19,180 que li recomano no ho recomano. 295 00:13:19,180 --> 00:13:22,540 Això és dolent per a un estil cosa i molt mal disseny, 296 00:13:22,540 --> 00:13:24,420 però ho fa, de fet, la feina. 297 00:13:24,420 --> 00:13:30,199 Si pren aquest codi, que és int afegir mal punt sumador de c, i l'utilitzen. 298 00:13:30,199 --> 00:13:31,990 En realitat, se li afegeix dos enters junts. 299 00:13:31,990 --> 00:13:37,632 És una aplicació molt dolenta d'aquest comportament en particular. 300 00:13:37,632 --> 00:13:38,340 Però funciona. 301 00:13:38,340 --> 00:13:41,200 És només per il·lustrar al punt que no ho fem de veritat 302 00:13:41,200 --> 00:13:44,530 importa el que succeeix a l'interior el quadre de negre, sempre 303 00:13:44,530 --> 00:13:46,510 com ho ha fet la sortida que esperem. 304 00:13:46,510 --> 00:13:48,870 Aquest és un quadre negre mal dissenyat. 305 00:13:48,870 --> 00:13:53,801 Però al final del dia, ho fa de sortida segueix sent la suma de a més b. 306 00:13:53,801 --> 00:13:54,300 Tot bé. 307 00:13:54,300 --> 00:13:56,320 Així que ens hem declarat funcions. 308 00:13:56,320 --> 00:13:57,490 I hem funció definida. 309 00:13:57,490 --> 00:13:58,540 Així que això és molt bo. 310 00:13:58,540 --> 00:14:03,020 Ara anem a començar a utilitzar les funcions que hem declarat i hem definit. 311 00:14:03,020 --> 00:14:05,960 Per trucar a un function-- en realitat bastant easy-- tot el que ha de fer 312 00:14:05,960 --> 00:14:09,070 és passar-ho arguments apropiats, arguments del tipus de dades 313 00:14:09,070 --> 00:14:11,600 que espera, i a continuació, assignar el retorn 314 00:14:11,600 --> 00:14:15,190 valor d'aquesta funció i esto-- excusa mi-- 315 00:14:15,190 --> 00:14:19,390 assignar el valor de retorn d'aquesta funció a alguna cosa del tipus correcte. 316 00:14:19,390 --> 00:14:22,410 >> Així que anem a fer una ullada a això en la pràctica en un arxiu 317 00:14:22,410 --> 00:14:27,730 anomenada escurçó 1 punt c, que Tinc en el meu CS50 IDE. 318 00:14:27,730 --> 00:14:31,042 Així que aquí està el sumador 1 punt c. 319 00:14:31,042 --> 00:14:33,500 A principis veieu que jo tinc la meva inclou, lliures inclouen, 320 00:14:33,500 --> 00:14:35,460 norma IO, i el punt CS50 h. 321 00:14:35,460 --> 00:14:37,700 I després tinc la meva declaració de la funció. 322 00:14:37,700 --> 00:14:39,570 Aquí és on sóc dient-li al compilador que sóc 323 00:14:39,570 --> 00:14:42,850 va a estar escrivint una funció anomenada sumar dos punts. 324 00:14:42,850 --> 00:14:45,780 Es va a una sortida variable de tipus sencer. 325 00:14:45,780 --> 00:14:47,360 Això és el que aquesta part és aquí. 326 00:14:47,360 --> 00:14:51,950 I després tinc dues entrades a un i b, cadascun dels quals és un nombre sencer. 327 00:14:51,950 --> 00:14:58,250 A l'interior de la principal, li demano a l'usuari d'entrada dient, dóna'm un sencer. 328 00:14:58,250 --> 00:15:01,040 I se'ls demana que s'oblidi int, que és una funció que 329 00:15:01,040 --> 00:15:03,240 s'inclou a la biblioteca CS50. 330 00:15:03,240 --> 00:15:07,660 I això s'emmagatzema en x, una variable sencera. 331 00:15:07,660 --> 00:15:09,886 >> Després impulsar per a un altre nombre enter. 332 00:15:09,886 --> 00:15:13,070 Tenim un altre sencer i emmagatzemar que, en i. 333 00:15:13,070 --> 00:15:17,990 I després, aquí a la línia 28, que és on realitzem la nostra crida a la funció. 334 00:15:17,990 --> 00:15:23,770 Estem dient, iguals z int afegir 2 sencers x comes i. 335 00:15:23,770 --> 00:15:25,980 Veus per què això té sentit? 336 00:15:25,980 --> 00:15:29,710 x és una variable de tipus sencer i i és una variable de tipus sencer. 337 00:15:29,710 --> 00:15:31,220 Així que això és bo. 338 00:15:31,220 --> 00:15:34,570 Això té sentit amb el que la nostra funció declaració en la línia 17 es sembla. 339 00:15:34,570 --> 00:15:38,300 La llista d'entrada separada per comes espera dos enters, a i b. 340 00:15:38,300 --> 00:15:40,300 En aquest cas, podem anomenar ells el que vulguem. 341 00:15:40,300 --> 00:15:42,300 Simplement s'espera que dos enters. 342 00:15:42,300 --> 00:15:44,930 I x és un nombre enter i i és un nombre enter. 343 00:15:44,930 --> 00:15:45,640 Això funciona. 344 00:15:45,640 --> 00:15:48,680 >> I sabem que la funció va a la sortida d'un sencers també. 345 00:15:48,680 --> 00:15:51,290 I així estem emmagatzemant el sortida de la funció, 346 00:15:51,290 --> 00:15:56,050 sumar dos sencers, en un tipus sencer variable, el que estem cridant z. 347 00:15:56,050 --> 00:16:01,980 I llavors podem dir, la suma de i cent i cent per cent i és i. 348 00:16:01,980 --> 00:16:06,210 x, y i z respectivament omplir els cent i de. 349 00:16:06,210 --> 00:16:08,334 Quina és la definició de afegeixen dos enters semblen? 350 00:16:08,334 --> 00:16:09,125 És molt senzill. 351 00:16:09,125 --> 00:16:11,270 És un dels que acabo de veure fa un segon, 352 00:16:11,270 --> 00:16:14,390 int suma és igual a una suma més b retorn. 353 00:16:14,390 --> 00:16:15,420 Funciona això? 354 00:16:15,420 --> 00:16:17,270 Salvem el fitxer. 355 00:16:17,270 --> 00:16:22,080 I després aquí al meu terminal Vaig a fer sumador 1, 356 00:16:22,080 --> 00:16:23,000 i jo aclareixo la pantalla. 357 00:16:23,000 --> 00:16:25,791 Vaig a fer un zoom perquè sé que és una mica difícil de veure. 358 00:16:25,791 --> 00:16:31,520 359 00:16:31,520 --> 00:16:33,770 >> Així que compilem aquest programa com sumador 1. 360 00:16:33,770 --> 00:16:37,910 Així que podem fer punt slash sumador 1. 361 00:16:37,910 --> 00:16:40,060 Dóna'm un sencer, 10. 362 00:16:40,060 --> 00:16:42,380 Dóna'm un altre sencer, 20. 363 00:16:42,380 --> 00:16:45,200 La suma de 10 i 20 és 30. 364 00:16:45,200 --> 00:16:47,615 Així que vam fer una crida a la funció amb èxit. 365 00:16:47,615 --> 00:16:55,820 Podeu executar la funció de nou, negatiu 10, 17 suma negatiu 10 i 17 és 7. 366 00:16:55,820 --> 00:16:57,120 Aquesta funció funciona. 367 00:16:57,120 --> 00:16:59,240 Té el comportament que esperem que ho faci. 368 00:16:59,240 --> 00:17:03,610 I així hem fet un èxit funció, definició, declaració, 369 00:17:03,610 --> 00:17:07,288 i una crida a la funció amb èxit. 370 00:17:07,288 --> 00:17:09,079 Miscel·lània Parella punts sobre les funcions 371 00:17:09,079 --> 00:17:10,611 abans de concloure aquesta secció. 372 00:17:10,611 --> 00:17:12,319 Recordem de la nostra discussió dels tipus de dades, 373 00:17:12,319 --> 00:17:16,109 prèviament, que les funcions de vegades pot prendre ha entrades. 374 00:17:16,109 --> 00:17:17,930 Si aquest és el cas, declarar la funció 375 00:17:17,930 --> 00:17:19,788 com tenir una llista buida argument. 376 00:17:19,788 --> 00:17:21,579 ¿Recorda el que el més funció comuna 377 00:17:21,579 --> 00:17:25,036 que hem vist fins al moment que pren una llista d'arguments és nul? 378 00:17:25,036 --> 00:17:27,300 És principal. 379 00:17:27,300 --> 00:17:30,850 Recordem també que la funció a vegades en realitat no tenen una sortida. 380 00:17:30,850 --> 00:17:34,210 En aquest cas, declarem la funció com tenir un tipus de retorn void. 381 00:17:34,210 --> 00:17:37,880 Anem a concloure aquesta secció fer front a un problema de la pràctica. 382 00:17:37,880 --> 00:17:39,900 >> Així que aquí està el problema presentat. 383 00:17:39,900 --> 00:17:43,630 Jo vull que escriguis una funció anomenat triangle vàlida. 384 00:17:43,630 --> 00:17:47,410 El que aquesta funció ha de fer és prendre tres nombres reals 385 00:17:47,410 --> 00:17:51,930 que representen les longituds dels tres costats d'un triangle com els seus paràmetres, 386 00:17:51,930 --> 00:17:54,550 o els seus arguments, o el seu inputs-- altre conjunt de sinònims 387 00:17:54,550 --> 00:17:57,340 que poden sorgir. 388 00:17:57,340 --> 00:18:01,120 Aquesta funció ha de ja sigui de sortida vertader o fals 389 00:18:01,120 --> 00:18:04,960 depenent de si aquestes tres longituds són capaços de fer un triangle. 390 00:18:04,960 --> 00:18:09,930 Recordes el tipus de dades que utilitzem per indicar vertader o fals? 391 00:18:09,930 --> 00:18:11,436 Ara, com s'implementa això? 392 00:18:11,436 --> 00:18:13,810 Bé saben que hi ha un parell de normes relatives a triangles 393 00:18:13,810 --> 00:18:15,480 que són realment útil saber. 394 00:18:15,480 --> 00:18:18,292 Un triangle només pot tenir costats amb longitud positiva. 395 00:18:18,292 --> 00:18:19,000 Això té sentit. 396 00:18:19,000 --> 00:18:21,432 Probablement vostè està dient, duh. 397 00:18:21,432 --> 00:18:23,390 L'altra cosa a tenir en compte però, és que la suma 398 00:18:23,390 --> 00:18:25,484 de les longituds de qualsevol dos costats del triangle 399 00:18:25,484 --> 00:18:27,650 ha de ser major que la longitud del tercer costat. 400 00:18:27,650 --> 00:18:28,690 Això és realment cert. 401 00:18:28,690 --> 00:18:34,150 No es pot tenir un triangle de costats 1, 2 i 4, per exemple, perquè més 2 gen 402 00:18:34,150 --> 00:18:36,270 no és major que 4. 403 00:18:36,270 --> 00:18:38,870 Així que aquestes són les regles que determinar si o no els tres 404 00:18:38,870 --> 00:18:42,740 entrades poden formar concebible un triangle. 405 00:18:42,740 --> 00:18:46,360 Així que pren un parell de minuts i declarar i definir 406 00:18:46,360 --> 00:18:49,810 aquesta funció es diu vàlida triangle, de manera que en realitat 407 00:18:49,810 --> 00:18:51,650 té el comportament especificat aquí. 408 00:18:51,650 --> 00:18:57,030 >> Es donarà sortida a cert si aquests tres costats són capaços que comprèn un triangle, 409 00:18:57,030 --> 00:19:01,950 i false en cas contrari A punt per veure com ho va fer? 410 00:19:01,950 --> 00:19:04,650 Aquí hi ha una aplicació triangle vàlid. 411 00:19:04,650 --> 00:19:05,770 No és l'únic. 412 00:19:05,770 --> 00:19:07,770 El teu pot variar lleugerament. 413 00:19:07,770 --> 00:19:11,040 Però aquest ho fa, de fet, tenen el comportament que esperem. 414 00:19:11,040 --> 00:19:14,450 Declarem la nostra funció en el molt superior, bool triangle vàlida 415 00:19:14,450 --> 00:19:16,630 surar x flotador i flotador z. 416 00:19:16,630 --> 00:19:18,930 Així que de nou, aquesta funció porta tres nombres reals 417 00:19:18,930 --> 00:19:22,280 com els seus arguments, surant variables de valor punt, 418 00:19:22,280 --> 00:19:26,510 i emet una veritable o falsa valor, que és un booleà, el record. 419 00:19:26,510 --> 00:19:28,660 Així que per això el tipus de retorn és bool. 420 00:19:28,660 --> 00:19:30,016 Després definim la funció. 421 00:19:30,016 --> 00:19:33,140 El primer que fem és comprovar per assegurar- que tots els costats són positius. 422 00:19:33,140 --> 00:19:37,010 Si x és menor o igual a 0, o si i és igual a 0, 423 00:19:37,010 --> 00:19:41,050 o si z és menor o igual a 0, que no pot possiblement ser un triangle. 424 00:19:41,050 --> 00:19:42,380 No tenen aspectes positius. 425 00:19:42,380 --> 00:19:45,790 I així podem tornar fals en aquesta situació. 426 00:19:45,790 --> 00:19:49,010 A continuació, vam comprovar per assegurar- que cada parell d'entrades 427 00:19:49,010 --> 00:19:51,830 és més gran que la tercera. 428 00:19:51,830 --> 00:19:54,530 >> Així que si x més i és menys o igual a z, 429 00:19:54,530 --> 00:19:57,060 o si x més z és menor o igual a I, 430 00:19:57,060 --> 00:20:01,730 o si i més z és menor o igual a x, que tampoc pot haver-hi un triangle vàlida. 431 00:20:01,730 --> 00:20:03,800 Així que tornem falsa de nou. 432 00:20:03,800 --> 00:20:06,900 Suposant que passem tant dels controls però, llavors podem tornar realitat. 433 00:20:06,900 --> 00:20:09,440 A causa de que aquestes tres costats són capaços de returning-- 434 00:20:09,440 --> 00:20:11,647 de crear un triangle vàlida. 435 00:20:11,647 --> 00:20:12,230 I això és tot. 436 00:20:12,230 --> 00:20:13,830 Ara ha declarat i definit. 437 00:20:13,830 --> 00:20:17,330 I vostè pot ser capaç d'ara usar i cridar a aquesta funció. 438 00:20:17,330 --> 00:20:19,470 Bon treball. 439 00:20:19,470 --> 00:20:20,650 Sóc Doug Lloyd. 440 00:20:20,650 --> 00:20:22,820 Això és CS50. 441 00:20:22,820 --> 00:20:24,340