1 00:00:07,010 --> 00:00:09,640 [Powered by Google Translate] Funksjoner er deler av koden som brukes i et større program 2 00:00:09,640 --> 00:00:11,430 å utføre en bestemt oppgave. 3 00:00:11,430 --> 00:00:15,060 De er også kjent som prosedyrer, subrutiner, og underprogrammer, 4 00:00:15,060 --> 00:00:18,320 siden de egentlig er bare mini programmer innenfor programmene. 5 00:00:18,320 --> 00:00:20,340 Selv om du kanskje ikke har lagt merke til, 6 00:00:20,340 --> 00:00:24,090 du mest definitivt har brukt funksjoner allerede hvis du har programmert i C. 7 00:00:24,090 --> 00:00:26,770 Når du skriver ting på skjermen ved hjelp av printf, 8 00:00:26,770 --> 00:00:29,380 du faktisk bruke en funksjon kalt printf. 9 00:00:29,380 --> 00:00:33,760 Likeledes, GetInt og GetString er funksjoner som CS50 gir for deg. 10 00:00:33,760 --> 00:00:37,750 Som programmerere, bruker vi funksjoner for en rekke årsaker. 11 00:00:37,750 --> 00:00:41,240 >> Å ha funksjoner for å utføre vanlige oppgaver som å skrive til skjermen 12 00:00:41,240 --> 00:00:44,480 og spørre brukeren om innspill sparer oss tid når du programmerer. 13 00:00:44,480 --> 00:00:47,510 Det er ikke nødvendig å skrive kode for å gjøre de samme tingene 14 00:00:47,510 --> 00:00:49,520 siden de er allerede gjort for oss. 15 00:00:49,520 --> 00:00:54,580 Det er ikke engang nødvendig for oss å forstå nøyaktig hvordan disse funksjonene fungerer internt. 16 00:00:54,580 --> 00:00:58,880 I stedet, vi må bare vite hvordan du skal bruke eller ringe dem i våre programmer. 17 00:00:58,880 --> 00:01:02,040 Det er også nyttig å skrive funksjoner i større programmer 18 00:01:02,040 --> 00:01:04,330 selv om du ikke har tenkt på å ha andre bruker dem, 19 00:01:04,330 --> 00:01:06,830 bare for å dele opp større oppgaven. 20 00:01:06,830 --> 00:01:11,910 Denne måten, gir du struktur i koden mye som du ville gi struktur til et essay, 21 00:01:11,910 --> 00:01:15,180 og med virkelig store prosjekter kan du flere personer 22 00:01:15,180 --> 00:01:16,730 å arbeide på forskjellige deler på samme tid 23 00:01:16,730 --> 00:01:20,480 siden det er klart hvor en person arbeid slutter og en annen er begynner. 24 00:01:20,480 --> 00:01:26,530 >> Funksjoner typisk operere på en eller flere innganger, kjent som argumenter eller parametere, 25 00:01:26,530 --> 00:01:30,520 transformerer disse innganger til en utgangsverdi som blir deretter returnert. 26 00:01:30,520 --> 00:01:34,950 Men det er også mulig å ha funksjoner som ikke bruker noen argumenter 27 00:01:34,950 --> 00:01:36,400 og ikke returnere en utgang. 28 00:01:36,400 --> 00:01:38,790 Ok, nok med fluffy ting. 29 00:01:38,790 --> 00:01:41,790 La oss ta en titt på noen reelle funksjoner i C. 30 00:01:41,790 --> 00:01:45,570 >> Her har vi en funksjon som heter kvadrat som, tro det eller ei, 31 00:01:45,570 --> 00:01:47,570 beregner kvadratet av inndata. 32 00:01:47,570 --> 00:01:49,490 La oss dissekere syntaksen det. 33 00:01:49,490 --> 00:01:51,860 Det første ordet du ser i funksjon, int, 34 00:01:51,860 --> 00:01:57,460 spesifiserer returtypen av funksjonen, dvs. den C-type for funksjonens utgang. 35 00:01:57,460 --> 00:02:00,370 Denne funksjonen vil sende en verdi med type int. 36 00:02:00,370 --> 00:02:04,100 Det neste ordet du ser er navnet på funksjonen, firkantet i dette tilfellet. 37 00:02:04,100 --> 00:02:07,390 Navngi funksjoner riktig er spesielt viktig 38 00:02:07,390 --> 00:02:11,260 siden det er trolig den mest synlige dokumentasjon av hva funksjonen gjør. 39 00:02:11,260 --> 00:02:14,880 Det kan være kult å nevne denne funksjonen Shazam eller Booyah, 40 00:02:14,880 --> 00:02:18,340 men det ville ikke fortelle oss noe om hva funksjonen gjør. 41 00:02:18,340 --> 00:02:23,470 >> Etter funksjonen navnet kommer innganger til funksjonen, argumentene. 42 00:02:23,470 --> 00:02:26,380 De er oppført i et sett med parenteser 43 00:02:26,380 --> 00:02:30,160 med både type og et navn å bruke for dem i kroppen av funksjonen. 44 00:02:30,160 --> 00:02:34,030 Square tar bare ett argument, int til torget, 45 00:02:34,030 --> 00:02:36,160 som jeg har besluttet å gi navnet x. 46 00:02:36,160 --> 00:02:40,760 Dette avslutter funksjonen erklæringen eller prototype. 47 00:02:40,760 --> 00:02:43,320 De klammeparentes omgir resten av funksjonen 48 00:02:43,320 --> 00:02:45,870 betegne begynnelsen og slutten av funksjonen kroppen, 49 00:02:45,870 --> 00:02:48,320 definisjonen av funksjonen selv. 50 00:02:48,320 --> 00:02:50,300 Square er en ganske enkel funksjon. 51 00:02:50,300 --> 00:02:54,100 Det er bare fikk en linje, siden alt vi trenger å gjøre er multiplisere x av seg selv. 52 00:02:54,100 --> 00:02:59,250 Ordet avkastning spesifiserer output verdi og utløser slutten av funksjonen. 53 00:02:59,250 --> 00:03:03,430 Å bruke plassen funksjonen, må vi gi de riktige innganger 54 00:03:03,430 --> 00:03:05,310 og deretter fange utgang. 55 00:03:05,310 --> 00:03:08,140 Her ser du et par måter å gjøre det på. 56 00:03:08,140 --> 00:03:13,600 Vi kan passere i en rå int, som 6, eller vi kan passere i en variabel som en. 57 00:03:13,600 --> 00:03:15,700 Vær oppmerksom på at hver gang vi kaller plassen, 58 00:03:15,700 --> 00:03:18,330 Vi registrerer utdata i en variabel og deretter skrive det. 59 00:03:18,330 --> 00:03:22,690 Men vi trenger ikke å lagre returverdien i en variabel og deretter skrive ut. 60 00:03:22,690 --> 00:03:27,090 Vi kunne bare sende det direkte til printf som vi gjør når vi square 10, 61 00:03:27,090 --> 00:03:30,580 men dette betyr at vi ikke har tilgang til returverdien av torget 10 62 00:03:30,580 --> 00:03:32,230 ellers i koden. 63 00:03:32,230 --> 00:03:34,890 La oss se på et annet enkelt eksempel. 64 00:03:34,890 --> 00:03:38,750 >> Denne gangen vil vi oppsummere to flyter sammen slik at vi kan se hva en funksjon ser ut 65 00:03:38,750 --> 00:03:41,220 når det har to innganger i stedet for bare en. 66 00:03:41,220 --> 00:03:43,950 Som du kan se, er det ikke mye annerledes. 67 00:03:43,950 --> 00:03:47,330 Alt vi gjør er å legge i andre argument, en float heter b, 68 00:03:47,330 --> 00:03:51,820 til argumentet listen med komma for å skille det fra det første argumentet, flyte en. 69 00:03:51,820 --> 00:03:55,550 Så vår kvadrat og sum funksjoner er ganske lett å forstå 70 00:03:55,550 --> 00:03:58,930 fordi de er tilsvarende funksjoner som du har sett før i matte klasse. 71 00:03:58,930 --> 00:04:01,610 Nå, la oss se på en funksjon som er litt annerledes. 72 00:04:01,610 --> 00:04:04,620 I stedet for å returnere en verdi, endrer det en stat. 73 00:04:04,620 --> 00:04:07,260 Dette er kjent som har en bivirkning. 74 00:04:07,260 --> 00:04:10,750 I dette programmet, printf_fudd_style funksjonen 75 00:04:10,750 --> 00:04:13,410 har en avkastning type som vi ikke har sett før, annullert. 76 00:04:13,410 --> 00:04:16,730 >> Void brukes til å si at en funksjon ikke returnerer noe. 77 00:04:16,730 --> 00:04:19,410 Det er ingen variabler av typen veddemål, 78 00:04:19,410 --> 00:04:22,760 så hvis du prøver å returnere noe fra en funksjon som printf_fudd_style, 79 00:04:22,760 --> 00:04:24,290 kompilatoren vil kjefte på deg. 80 00:04:24,290 --> 00:04:29,390 Inne printf_fudd_style, ser vi at mens funksjonen fremdeles utfører en oppgave, 81 00:04:29,390 --> 00:04:31,890 nemlig bytte alle Rs til Ws, 82 00:04:31,890 --> 00:04:36,380 poenget med funksjonen er å endre strengen og deretter skrive det ut på skjermen, 83 00:04:36,380 --> 00:04:39,400 endre status på programmet i stedet for å returnere et resultat. 84 00:04:39,400 --> 00:04:43,700 Ved hjelp av denne funksjonen er veldig mye som å bruke vår torget og sum funksjoner, 85 00:04:43,700 --> 00:04:46,950 bortsett fra vi ikke lagrer resultatet i en variabel eller gi det bort til en annen funksjon 86 00:04:46,950 --> 00:04:49,520 siden det ikke er resultatet å snakke. 87 00:04:49,520 --> 00:04:53,180 Så, når vi kompilere og kjøre vår Elmer Midd program, 88 00:04:53,180 --> 00:04:56,970 du ser at "Du rascally kanin!" blir forvandlet rett til 89 00:04:56,970 --> 00:04:58,730 "Du wascally Wabbit!" 90 00:04:58,730 --> 00:05:02,250 >> Endelig er det en mer funksjon verdt å diskutere 91 00:05:02,250 --> 00:05:06,810 siden du har brukt det i hvert C program du noen gang har skrevet, viktigste. 92 00:05:06,810 --> 00:05:09,450 Viktigste er en funksjon mye som alle andre. 93 00:05:09,450 --> 00:05:13,580 Det fikk en retur type, et navn, en liste over argumenter, og en kropp. 94 00:05:13,580 --> 00:05:16,110 Avkastningen type viktigste er alltid en int, 95 00:05:16,110 --> 00:05:19,120 og denne int brukes til å kommunisere status for programmet når den er ferdig. 96 00:05:19,120 --> 00:05:23,360 >> Gjorde det kjøres uten problemer, eller gjorde det slutt tidlig på grunn av en feil? 97 00:05:23,360 --> 00:05:26,390 Tilbake til null indikerer en vellykket løp, 98 00:05:26,390 --> 00:05:29,510 og tilbake noen annen verdi enn null indikerer en feil. 99 00:05:29,510 --> 00:05:31,950 Avhengig av hva slags program du skriver, 100 00:05:31,950 --> 00:05:34,960 retur forskjellige koder for ulike feil kan være nyttig 101 00:05:34,960 --> 00:05:37,210 for personer som bruker programmet senere. 102 00:05:37,210 --> 00:05:40,220 Strømnettet argumentene er litt mer komplisert. 103 00:05:40,220 --> 00:05:42,150 >> Argumentlisten kan enten være tom, 104 00:05:42,150 --> 00:05:45,330 som vi viser ved å skrive tomrom i mellom parentesene, 105 00:05:45,330 --> 00:05:50,220 eller listen kan ha 2 argumenter: en int og en rekke char * s. 106 00:05:50,220 --> 00:05:52,820 Disse brukes når programmet har til hensikt å bruke 107 00:05:52,820 --> 00:05:56,490 argumenter gikk inn på kommandolinjen når programmet startes. 108 00:05:56,490 --> 00:05:59,690 Int argument er vanligvis kalles argc, 109 00:05:59,690 --> 00:06:03,300 og det er lik lengden av den char * matrisen, kjent som argv. 110 00:06:03,300 --> 00:06:07,080 Argv inneholder kommandolinjeargumentene gått inn i programmet. 111 00:06:07,080 --> 00:06:11,440 I en annen kort, vil vi snakke om hvordan du bruker disse variablene i mer detalj. 112 00:06:11,440 --> 00:06:15,220 For nå kan du føle deg fri til å erklære viktigste uansett. 113 00:06:15,220 --> 00:06:19,410 Jeg vanligvis velger å skrive det ut kortere vei, med noen argumenter, når det er mulig. 114 00:06:19,410 --> 00:06:22,230 >> Nå som du vet hvordan du skal skrive funksjoner, 115 00:06:22,230 --> 00:06:25,030 du er godt på vei til å utvikle større og mer komplekse programmer. 116 00:06:25,030 --> 00:06:29,740 Mitt navn er Nate Hardison. Dette er CS50.