1 00:00:07,010 --> 00:00:09,640 [Powered by Google Translate] Funktioner er kodesektioner anvendes inden for en større program 2 00:00:09,640 --> 00:00:11,430 at udføre en bestemt opgave. 3 00:00:11,430 --> 00:00:15,060 De er også kendt som procedurer, subrutiner, og underprogrammer, 4 00:00:15,060 --> 00:00:18,320 da de virkelig er blot mini-programmer inden for programmerne. 5 00:00:18,320 --> 00:00:20,340 Selvom du måske ikke har bemærket, 6 00:00:20,340 --> 00:00:24,090 du absolut have brugt funktioner, allerede hvis du har programmeret i C. 7 00:00:24,090 --> 00:00:26,770 Når du skriver ting til skærmen med printf, 8 00:00:26,770 --> 00:00:29,380 du rent faktisk bruger en funktion kaldet printf. 9 00:00:29,380 --> 00:00:33,760 Ligeledes GetInt og GetString er funktioner, CS50 giver mulighed for dig. 10 00:00:33,760 --> 00:00:37,750 Som programmører bruger vi funktioner for en række årsager. 11 00:00:37,750 --> 00:00:41,240 >> Under funktioner til at udføre almindelige opgaver som at skrive til skærmen 12 00:00:41,240 --> 00:00:44,480 og spørge brugeren for input sparer os tid, når du programmerer. 13 00:00:44,480 --> 00:00:47,510 Det er ikke nødvendigt at skrive kode til at gøre de samme ting 14 00:00:47,510 --> 00:00:49,520 da de allerede er gjort for os. 15 00:00:49,520 --> 00:00:54,580 Det er ikke engang nødvendigt for os at forstå præcis, hvordan disse funktioner fungerer internt. 16 00:00:54,580 --> 00:00:58,880 I stedet har vi bare nødt til at vide, hvordan man bruger eller ringe til dem i vores programmer. 17 00:00:58,880 --> 00:01:02,040 Det er også nyttigt at skrive funktioner i større programmer 18 00:01:02,040 --> 00:01:04,330 selvom du ikke planlægger at have andre bruger dem, 19 00:01:04,330 --> 00:01:06,830 bare for at opdele større opgave. 20 00:01:06,830 --> 00:01:11,910 Denne måde, du giver struktur til din kode meget gerne du ville give struktur til et essay, 21 00:01:11,910 --> 00:01:15,180 og med virkelig store projekter du aktiverer flere personer 22 00:01:15,180 --> 00:01:16,730 at arbejde med forskellige dele samtidigt 23 00:01:16,730 --> 00:01:20,480 da det er tydeligt, hvor én persons arbejde slutter og en anden er begynder. 24 00:01:20,480 --> 00:01:26,530 >> Funktioner, der typisk opererer på 1 eller flere indgange, der er kendt som argumenter eller parametre, 25 00:01:26,530 --> 00:01:30,520 omdanne disse input til output værdi, der returneres derefter. 26 00:01:30,520 --> 00:01:34,950 Men det er også muligt at have funktioner, der ikke bruger nogen inputargumenter 27 00:01:34,950 --> 00:01:36,400 og ikke vende tilbage en udgang. 28 00:01:36,400 --> 00:01:38,790 Okay, nok med fluffy ting. 29 00:01:38,790 --> 00:01:41,790 Lad os tage et kig på nogle reelle funktioner i C. 30 00:01:41,790 --> 00:01:45,570 >> Her har vi en funktion kaldet firkant, der, tro det eller ej, 31 00:01:45,570 --> 00:01:47,570 beregner kvadratet på input. 32 00:01:47,570 --> 00:01:49,490 Lad os dissekere syntaksen for den. 33 00:01:49,490 --> 00:01:51,860 Det første ord, du ser i funktion, int, 34 00:01:51,860 --> 00:01:57,460 angiver returtypen af ​​funktionen, det vil sige C-typen af ​​funktionens output. 35 00:01:57,460 --> 00:02:00,370 Denne funktion vil udsende en værdi med typen int. 36 00:02:00,370 --> 00:02:04,100 Det næste ord, du ser, er navnet på den funktion, firkantede i dette tilfælde. 37 00:02:04,100 --> 00:02:07,390 Navngivning funktioner hensigtsmæssigt er særlig vigtigt 38 00:02:07,390 --> 00:02:11,260 da det er formentlig den mest synlige dokumentation af, hvad funktionen gør. 39 00:02:11,260 --> 00:02:14,880 Det kan være fedt at kalde denne funktion Shazam eller Booyah, 40 00:02:14,880 --> 00:02:18,340 men det ville ikke fortælle os noget om, hvad funktionen gør. 41 00:02:18,340 --> 00:02:23,470 >> Efter funktionsnavn komme indgangene til den funktion, de argumenter. 42 00:02:23,470 --> 00:02:26,380 De er opført inde i et sæt af parenteser 43 00:02:26,380 --> 00:02:30,160 med både deres type og et navn at bruge for dem i selve funktionen. 44 00:02:30,160 --> 00:02:34,030 Square tager kun 1 argument, den int til pladsen, 45 00:02:34,030 --> 00:02:36,160 som jeg har besluttet at give navnet x. 46 00:02:36,160 --> 00:02:40,760 Dette afslutter funktionen angivelse eller prototype. 47 00:02:40,760 --> 00:02:43,320 De krøllede parenteser omkring resten af ​​funktionen 48 00:02:43,320 --> 00:02:45,870 angiver begyndelsen og slutningen af ​​funktionen organ, 49 00:02:45,870 --> 00:02:48,320 definitionen af ​​selve funktionen. 50 00:02:48,320 --> 00:02:50,300 Square er en temmelig simpel funktion. 51 00:02:50,300 --> 00:02:54,100 Det fik kun 1 linie, da alt vi skal gøre, er at formere x af sig selv. 52 00:02:54,100 --> 00:02:59,250 Ordet afkast angiver udgangsværdien og udløser slutningen af ​​funktionen. 53 00:02:59,250 --> 00:03:03,430 Hvis du vil bruge den firkantede funktion, er vi nødt til at levere de relevante indgange 54 00:03:03,430 --> 00:03:05,310 og derefter fange output. 55 00:03:05,310 --> 00:03:08,140 Her kan du se et par måder at gøre det. 56 00:03:08,140 --> 00:03:13,600 Vi kan passere i en rå int, ligesom 6, eller vi kan passere i en variabel som en. 57 00:03:13,600 --> 00:03:15,700 Bemærk, at hver gang vi kalder firkantet, 58 00:03:15,700 --> 00:03:18,330 vi fange output i en variabel og derefter udskrive det. 59 00:03:18,330 --> 00:03:22,690 Men vi ikke nødt til at gemme returværdien i en variabel og derefter udskrive. 60 00:03:22,690 --> 00:03:27,090 Vi kunne bare sende det direkte til printf, som vi gør, når vi firkantet 10, 61 00:03:27,090 --> 00:03:30,580 men det betyder, at vi ikke har adgang til returværdien af ​​firkanten 10 62 00:03:30,580 --> 00:03:32,230 andre steder i koden. 63 00:03:32,230 --> 00:03:34,890 Lad os se på et andet simpelt eksempel. 64 00:03:34,890 --> 00:03:38,750 >> Denne gang vil vi opsummere 2 flyder sammen, så vi kan se, hvad en funktion ligner 65 00:03:38,750 --> 00:03:41,220 når det har fået 2 indgange i stedet for blot 1. 66 00:03:41,220 --> 00:03:43,950 Som du kan se, det er ikke meget anderledes. 67 00:03:43,950 --> 00:03:47,330 Alt hvad vi gør, er at tilføje i 2. argument, en svømmer ved navn b, 68 00:03:47,330 --> 00:03:51,820 til argumentet listen ved hjælp af en komma for at adskille det fra det første argument, en flyde. 69 00:03:51,820 --> 00:03:55,550 Så vores firkantet og summen funktioner er ret nemt at forstå 70 00:03:55,550 --> 00:03:58,930 fordi de er ækvivalent med funktioner, som du har set før i matematik klasse. 71 00:03:58,930 --> 00:04:01,610 Lad os nu se på en funktion, der er lidt anderledes. 72 00:04:01,610 --> 00:04:04,620 I stedet for at returnere en værdi, ændrer det en stat. 73 00:04:04,620 --> 00:04:07,260 Dette er kendt som havende en bivirkning. 74 00:04:07,260 --> 00:04:10,750 I dette program, printf_fudd_style funktionen 75 00:04:10,750 --> 00:04:13,410 har en returtype, som vi ikke har set før, ugyldig. 76 00:04:13,410 --> 00:04:16,730 >> Void bruges til at sige, at en funktion ikke returnerer noget. 77 00:04:16,730 --> 00:04:19,410 Der er ingen variabler af typen ugyldig, 78 00:04:19,410 --> 00:04:22,760 så hvis du forsøger at returnere noget fra en funktion som printf_fudd_style, 79 00:04:22,760 --> 00:04:24,290 compileren vil råbe på dig. 80 00:04:24,290 --> 00:04:29,390 Inde printf_fudd_style ser vi, at mens funktionen stadig udfører en opgave, 81 00:04:29,390 --> 00:04:31,890 nemlig skifte alle R'er til Ws, 82 00:04:31,890 --> 00:04:36,380 punktet af funktionen er at ændre strengen, og derefter printe det ud på skærmen, 83 00:04:36,380 --> 00:04:39,400 ændring af tilstanden af ​​programmet i stedet for at returnere et resultat. 84 00:04:39,400 --> 00:04:43,700 Brug af denne funktion er meget gerne bruge vores plads og summen funktioner, 85 00:04:43,700 --> 00:04:46,950 bortset fra at vi ikke gemmer resultatet i en variabel eller videregive det ud til en anden funktion 86 00:04:46,950 --> 00:04:49,520 da der ikke er resultat at tale om. 87 00:04:49,520 --> 00:04:53,180 Så når vi kompilere og køre vores Elmer Fjot program, 88 00:04:53,180 --> 00:04:56,970 du se, at "Du rascally kanin!" bliver transformeret ret til 89 00:04:56,970 --> 00:04:58,730 "Du wascally Wabbit!" 90 00:04:58,730 --> 00:05:02,250 >> Endelig er der 1 mere funktion værd at diskutere 91 00:05:02,250 --> 00:05:06,810 siden du har brugt det i hvert C-program, du nogensinde har skrevet, main. 92 00:05:06,810 --> 00:05:09,450 Main er en funktion ligesom enhver anden. 93 00:05:09,450 --> 00:05:13,580 Det har fået en returtype, et navn, en liste over argumenter, og en krop. 94 00:05:13,580 --> 00:05:16,110 Afkastet type hoved er altid en int, 95 00:05:16,110 --> 00:05:19,120 og denne int bruges til at kommunikere status for programmet, når den er færdig. 96 00:05:19,120 --> 00:05:23,360 >> Gjorde det kører korrekt, eller endte det tidligt på grund af en fejl? 97 00:05:23,360 --> 00:05:26,390 Vender tilbage til nul indikerer en vellykket løbe, 98 00:05:26,390 --> 00:05:29,510 og returnere en ikke-nul værdi indikerer en fejl. 99 00:05:29,510 --> 00:05:31,950 Afhængigt af den type program, du skriver, 100 00:05:31,950 --> 00:05:34,960 returnere forskellige koder til forskellige fejl kan være nyttigt 101 00:05:34,960 --> 00:05:37,210 for personer, der bruger dit program senere. 102 00:05:37,210 --> 00:05:40,220 Mains argumenter er lidt mere kompliceret. 103 00:05:40,220 --> 00:05:42,150 >> Argumentet liste kan enten være tom, 104 00:05:42,150 --> 00:05:45,330 som vi angiver ved at skrive tomrum i mellem parenteserne, 105 00:05:45,330 --> 00:05:50,220 eller listen kan have 2 argumenter: en int og en vifte af char * s. 106 00:05:50,220 --> 00:05:52,820 Disse bruges når dit program har til hensigt at bruge 107 00:05:52,820 --> 00:05:56,490 argumenter gik i på kommandolinjen, når programmet kaldes. 108 00:05:56,490 --> 00:05:59,690 Den int argument kaldes typisk argc, 109 00:05:59,690 --> 00:06:03,300 og det er lige længden af ​​char * array, kendt som argv. 110 00:06:03,300 --> 00:06:07,080 Argv indeholder de kommandolinjeargumenter gik ind i programmet. 111 00:06:07,080 --> 00:06:11,440 I en anden kort, vi taler om, hvordan man bruger disse variabler mere detaljeret. 112 00:06:11,440 --> 00:06:15,220 For nu kan du velkommen til at erklære main begge veje. 113 00:06:15,220 --> 00:06:19,410 Jeg typisk vælger at skrive det ud den kortere vej, uden argumenter, når det er muligt. 114 00:06:19,410 --> 00:06:22,230 >> Nu hvor du ved, hvordan man skriver opgaver, 115 00:06:22,230 --> 00:06:25,030 du er godt på vej til at udvikle større og mere komplekse programmer. 116 00:06:25,030 --> 00:06:29,740 Mit navn er Nate Hardison. Det er CS50.