1 00:00:07,010 --> 00:00:09,640 [Powered by Google Translate] Funksies afdelings van die kode wat gebruik word binne 'n groter program 2 00:00:09,640 --> 00:00:11,430 om 'n spesifieke taak te verrig. 3 00:00:11,430 --> 00:00:15,060 Hulle is ook bekend as prosedures, subroetines, en subprogramme, 4 00:00:15,060 --> 00:00:18,320 aangesien hulle werklik is pas mini-programme binne programme. 5 00:00:18,320 --> 00:00:20,340 Selfs al is jy dalk nie opgemerk het nie, 6 00:00:20,340 --> 00:00:24,090 jy beslis gebruik het funksies wat reeds as jy het geprogrammeer in C. 7 00:00:24,090 --> 00:00:26,770 Wanneer jy skryf goed op die skerm met printf, 8 00:00:26,770 --> 00:00:29,380 jy eintlik die gebruik van 'n funksie met die naam printf. 9 00:00:29,380 --> 00:00:33,760 Net so, getint en GetString is funksies wat CS50 vir jou. 10 00:00:33,760 --> 00:00:37,750 As programmeerders, gebruik ons ​​funksies vir 'n aantal redes. 11 00:00:37,750 --> 00:00:41,240 >> Met funksies om algemene take te verrig soos deur skriftelik daarvoor aansoek te doen by die skerm 12 00:00:41,240 --> 00:00:44,480 en waarna die gebruiker om insette te lewer red ons tyd tydens programmering. 13 00:00:44,480 --> 00:00:47,510 Dit is nie nodig om kode te skryf om daardie dinge te doen 14 00:00:47,510 --> 00:00:49,520 aangesien hulle reeds vir ons gedoen het. 15 00:00:49,520 --> 00:00:54,580 Dit is selfs nie nodig is vir ons om te verstaan ​​presies hoe die funksies intern werk. 16 00:00:54,580 --> 00:00:58,880 In plaas daarvan, ons moet net weet hoe om te gebruik of skakel hulle in ons programme. 17 00:00:58,880 --> 00:01:02,040 Dit is ook nuttig om funksies in groter programme te skryf 18 00:01:02,040 --> 00:01:04,330 selfs al is jy nie van plan op die ander gebruik hulle, 19 00:01:04,330 --> 00:01:06,830 net om skeiding te maak tussen die groter taak op hande. 20 00:01:06,830 --> 00:01:11,910 Hierdie manier, jy struktuur gee aan jou kode veel soos jy wil gee struktuur aan 'n opstel, 21 00:01:11,910 --> 00:01:15,180 en met 'n baie groot projekte wat jy in staat stel om verskeie mense 22 00:01:15,180 --> 00:01:16,730 om te werk op verskillende dele op dieselfde tyd 23 00:01:16,730 --> 00:01:20,480 want dit is duidelik waar een persoon se werk eindig en 'n ander is begin. 24 00:01:20,480 --> 00:01:26,530 >> Funksies tipies werk op 1 of meer insette, bekend as argumente of parameters, 25 00:01:26,530 --> 00:01:30,520 die transformasie van die insette in 'n uitset waarde wat word dan teruggestuur. 26 00:01:30,520 --> 00:01:34,950 Dit is egter ook moontlik om funksies wat geen insette argumente gebruik te hê 27 00:01:34,950 --> 00:01:36,400 en nie terugkom nie 'n uitset. 28 00:01:36,400 --> 00:01:38,790 Okay, genoeg met die fluffy dinge. 29 00:01:38,790 --> 00:01:41,790 Kom ons neem 'n blik op 'n paar werklike funksies in C. 30 00:01:41,790 --> 00:01:45,570 >> Hier is 'n funksie genoem vierkant wat, glo dit of nie, 31 00:01:45,570 --> 00:01:47,570 bere die vierkant van die insette. 32 00:01:47,570 --> 00:01:49,490 Laat ons dissekteer die sintaksis van. 33 00:01:49,490 --> 00:01:51,860 Die eerste woord wat jy sien in die funksie, int, 34 00:01:51,860 --> 00:01:57,460 spesifiseer die teruggee-tipe van die funksie, dit is die C-tipe van die funksie se uitset. 35 00:01:57,460 --> 00:02:00,370 Hierdie funksie sal uitvoer, 'n waarde met tipe int. 36 00:02:00,370 --> 00:02:04,100 Die volgende woord wat jy sien, is die naam van die funksie, 'n vierkant in hierdie geval. 37 00:02:04,100 --> 00:02:07,390 Benaming funksies toepaslik is veral belangrik 38 00:02:07,390 --> 00:02:11,260 want dit is waarskynlik die mees sigbare dokumentasie van wat die funksie doen. 39 00:02:11,260 --> 00:02:14,880 Dit sou cool wees om hierdie funksie Shazam of YES te noem, 40 00:02:14,880 --> 00:02:18,340 maar dit sou nie vertel ons iets oor wat die funksie doen. 41 00:02:18,340 --> 00:02:23,470 >> Na aanleiding van die funksie naam kom die insette vir die funksie, die argumente. 42 00:02:23,470 --> 00:02:26,380 Hulle is gelys binne 'n stel hakies 43 00:02:26,380 --> 00:02:30,160 met beide hul soort en 'n naam te gebruik vir hulle in die liggaam van die funksie. 44 00:02:30,160 --> 00:02:34,030 Square neem net 1 argument, die int vierkante, 45 00:02:34,030 --> 00:02:36,160 wat het ek besluit om die naam te gee x. 46 00:02:36,160 --> 00:02:40,760 Dit eindig die funksie verklaring of prototipe. 47 00:02:40,760 --> 00:02:43,320 Die kode tussen krulhakies rondom die res van die funksie 48 00:02:43,320 --> 00:02:45,870 gemerk, dui aan die begin en einde van die funksie liggaam, 49 00:02:45,870 --> 00:02:48,320 die definisie van die funksie self. 50 00:02:48,320 --> 00:02:50,300 Vierkant is 'n redelik eenvoudige funksie. 51 00:02:50,300 --> 00:02:54,100 Dit is net 1 lyn, want al wat ons hoef te doen is vermenigvuldig x deur homself. 52 00:02:54,100 --> 00:02:59,250 Die woord terugkeer bepaal die uitset waarde en snellers die einde van die funksie. 53 00:02:59,250 --> 00:03:03,430 Die vierkante funksie te gebruik, moet ons die toepaslike insette te lewer 54 00:03:03,430 --> 00:03:05,310 en dan vang die uitset. 55 00:03:05,310 --> 00:03:08,140 Hier sien jy 'n paar van die maniere om dit te doen. 56 00:03:08,140 --> 00:03:13,600 Ons kan in 'n rou int, soos 6, of ons kan slaag in 'n veranderlike soos 'n. 57 00:03:13,600 --> 00:03:15,700 Let daarop dat elke keer as ons 'n beroep vierkante, 58 00:03:15,700 --> 00:03:18,330 ons vang die uitset in 'n veranderlike en dit dan druk. 59 00:03:18,330 --> 00:03:22,690 Maar ons het nie die terugkeer waarde in 'n veranderlike te stoor en druk dan. 60 00:03:22,690 --> 00:03:27,090 Ons kon net stuur dit direk aan printf as wat ons doen wanneer ons vierkant 10, 61 00:03:27,090 --> 00:03:30,580 maar dit beteken nie dat ons nie toegang het tot die terugkeer waarde van vierkantige 10 62 00:03:30,580 --> 00:03:32,230 elders in die kode. 63 00:03:32,230 --> 00:03:34,890 Kom ons kyk na nog 'n eenvoudige voorbeeld. 64 00:03:34,890 --> 00:03:38,750 >> Hierdie tyd, sal ons som 2 dryf saam sodat ons kan sien wat 'n funksie lyk 65 00:03:38,750 --> 00:03:41,220 wanneer dit het 2 insette in plaas van net 1. 66 00:03:41,220 --> 00:03:43,950 Soos jy kan sien, dit is nie veel anders nie. 67 00:03:43,950 --> 00:03:47,330 Alles wat ons doen is voeg in die 2de argument, 'n float vernoem b, 68 00:03:47,330 --> 00:03:51,820 aan die argument lys met behulp van 'n komma om dit te skei van die eerste argument, dryf 'n. 69 00:03:51,820 --> 00:03:55,550 So, ons vierkant en som funksies is redelik maklik om te verstaan 70 00:03:55,550 --> 00:03:58,930 want hulle is gelykstaande aan funksies wat jy voorheen in wiskunde klas gesien. 71 00:03:58,930 --> 00:04:01,610 Nou, laat ons kyk na 'n funksie wat effens anders is. 72 00:04:01,610 --> 00:04:04,620 In plaas van die terugkeer van 'n waarde, dit verander 'n staat. 73 00:04:04,620 --> 00:04:07,260 Dit staan ​​bekend as 'n newe-effek. 74 00:04:07,260 --> 00:04:10,750 In hierdie program, die printf_fudd_style funksie 75 00:04:10,750 --> 00:04:13,410 het 'n opbrengs van die tipe wat ons nie gesien het nie voor, nietig. 76 00:04:13,410 --> 00:04:16,730 >> Void gebruik word om te sê dat 'n funksie nie iets terug. 77 00:04:16,730 --> 00:04:19,410 Daar is geen veranderlikes van die tipe leemte, 78 00:04:19,410 --> 00:04:22,760 so as jy probeer om iets terug te keer van 'n funksie soos printf_fudd_style, 79 00:04:22,760 --> 00:04:24,290 die vertaler sal skreeu op jou. 80 00:04:24,290 --> 00:04:29,390 Binne printf_fudd_style, sien ons dat terwyl die funksie is nog steeds 'n taak verrig, 81 00:04:29,390 --> 00:04:31,890 naamlik, skakel alle Rs Ws 82 00:04:31,890 --> 00:04:36,380 die punt van die funksie is om die string te verander en dit dan druk op die skerm, 83 00:04:36,380 --> 00:04:39,400 die verandering van die staat van die program in plaas van die terugkeer van 'n resultaat. 84 00:04:39,400 --> 00:04:43,700 Met behulp van hierdie funksie is baie soos die gebruik van ons vierkant en som funksies, 85 00:04:43,700 --> 00:04:46,950 behalwe ons slaan nie die resultaat in 'n veranderlike of gee dit af na 'n ander funksie 86 00:04:46,950 --> 00:04:49,520 want daar is geen gevolg van praat. 87 00:04:49,520 --> 00:04:53,180 Dus, wanneer ons ons Elmer Fudd program te stel en uit te voer, 88 00:04:53,180 --> 00:04:56,970 jy sien dat "Jy karnallie van haas!" reg om te kry getransformeer 89 00:04:56,970 --> 00:04:58,730 "Jy wascally Wabbit!" 90 00:04:58,730 --> 00:05:02,250 >> Ten slotte, daar is 1 meer funksie die moeite werd om te bespreek 91 00:05:02,250 --> 00:05:06,810 omdat jy dit te gebruik in elke C-program wat jy ooit geskryf het, hoof. 92 00:05:06,810 --> 00:05:09,450 Main is 'n funksie baie soos enige ander. 93 00:05:09,450 --> 00:05:13,580 Dit het 'n opbrengs tipe, 'n naam, 'n lys van argumente, en 'n liggaam. 94 00:05:13,580 --> 00:05:16,110 Die opbrengs tipe van die belangrikste is altyd 'n int, 95 00:05:16,110 --> 00:05:19,120 en hierdie int is wat gebruik word om die status van die program om te kommunikeer wanneer dit afwerkings. 96 00:05:19,120 --> 00:05:23,360 >> Het dit suksesvol deur te voer, of het dit vroeg eindig as gevolg van 'n fout? 97 00:05:23,360 --> 00:05:26,390 Terug na nul dui op 'n suksesvolle termyn, 98 00:05:26,390 --> 00:05:29,510 en die terugkeer van enige nie-nul waarde dui op 'n fout. 99 00:05:29,510 --> 00:05:31,950 Afhangende van die aard van die program wat jy skryf, 100 00:05:31,950 --> 00:05:34,960 terugkeer verskillende kodes vir die verskillende foute kan nuttig wees 101 00:05:34,960 --> 00:05:37,210 vir mense wat jou program gebruik later. 102 00:05:37,210 --> 00:05:40,220 Mains argumente is 'n bietjie meer ingewikkeld. 103 00:05:40,220 --> 00:05:42,150 >> Die argument lys kan leeg wees, 104 00:05:42,150 --> 00:05:45,330 wat ons deur die skryf van die leemte tussen die hakies dui, 105 00:05:45,330 --> 00:05:50,220 of u kan die lys 2 argumente: 'n int en 'n verskeidenheid van char * s. 106 00:05:50,220 --> 00:05:52,820 Dit word gebruik wanneer jou program beoog om te gebruik 107 00:05:52,820 --> 00:05:56,490 op die command line argumente oorgedra wanneer die program word begin. 108 00:05:56,490 --> 00:05:59,690 Die int argument is gewoonlik genoem argc, 109 00:05:59,690 --> 00:06:03,300 en dit is gelyk aan die lengte van die char * skikking, bekend as bevat SPASIES. 110 00:06:03,300 --> 00:06:07,080 Bevat SPASIES bevat die command line argumente wat in die program geslaag. 111 00:06:07,080 --> 00:06:11,440 In 'n ander kort, sal ons praat oor hoe om hierdie veranderlikes te gebruik om in meer detail. 112 00:06:11,440 --> 00:06:15,220 Vir nou, kan jy voel vry hoof óf manier te verklaar. 113 00:06:15,220 --> 00:06:19,410 Ek gewoonlik kies om dit uit die korter manier te skryf, met geen argumente, wanneer moontlik. 114 00:06:19,410 --> 00:06:22,230 >> Nou dat jy weet hoe om funksies uit te skryf, 115 00:06:22,230 --> 00:06:25,030 is jy goed op jou pad na die ontwikkeling van groter, meer komplekse programme. 116 00:06:25,030 --> 00:06:29,740 My naam is Nate Hardison. Dit is CS50.