Doug LLOYD: U redu. Dakle, sada ćemo se borila stvarno velika tema, funkcije. Do sada je u tijeku, sve Programi koje smo pisali napisane su unutar glavne. Oni su prilično jednostavne programe. Ne morate imati sve ove grane i stvari događa. Mi jednostavno može sve stati unutar i glavni ne dobiti užasno neodoljiv. No, kao što je naravno ide na i kao što se početi razvijati programe samostalno, vjerojatno ćemo za početak da biste dobili puno više od 10 ili 15 redaka. Možda ćete dobiti stotine ili tisuće ili nekoliko desetaka tisuća linija koda. I to je zapravo ne koji ludi misao. Kao takav, to vjerojatno nije dobra ideja zadržati sve unutar glavni. To može dobiti malo teško naći ono što tražite, ako to učiniti. Srećom, iako C i prilično mnogo svaki drugi programski jezik koji možda raditi, omogućuje nam pisati funkcija. A ja sam samo ide uzeti brzo stranu ovdje spomenuti da je funkcija jedno područje računalnih znanosti. I vidjet ćete mnogo više od njih na različite točke tijekom tečaja a ako nastavite dalje. Gdje ima puno sinonimi za iste riječi. Tako zovemo funkcija. Ali možda i čuti nazivaju postupcima, ili postupci, osobito ako ste ikada učinio bilo Objektno orijentirano programiranje before-- i ne brinite ako niste, ne veliki deal-- ali revizije orijentirani jezici često nazivaju metode. Ponekad oni zovu potprograme. Ali oni stvarno sve odnose na istom osnovnom idejom. Da vidimo što je to ideja. Što je funkcija? Pa funkcija stvarno ništa više od crne kutije. Crna kutija koja ima niz nula ili više ulaza i jedan izlaz. Tako na primjer, to može biti funkcija. Ova je funkcija zove FUNC. I to traje tri ulaza a, b i c. A unutar te crne kutije, mi Ne znam točno što radi, ali to obrađuje ulazne podatke na neki način, a zatim ga daje jedan izlaz, u ovom slučaju, Ž. Sada bi to malo manje apstraktno, mi Moglo bi se reći da je možda smo imaju funkciju pod nazivom dodati da traje tri ulaza A, B, i C i obrađuje izlaz na neki način unutar crne kutije proizvesti jedan izlaz. Dakle, u ovom slučaju, ako dodaj traje 3, 6 i 7. Negdje unutar dodaj funkciju, mi bi očekivati ​​da će se zbrojiti za proizvodnju, koji izlaz je 3 plus 6 plus 7 ili 16. Isto tako, imate funkciju pod nazivom mult koji traje dva ulaza, A i B, obrađuje ih na neki način takav da je izlaz funkcije Produkt je dva ulaza. Dva ulaza pomnožen zajedno. 4 i 5 se prošao u mult, nešto dogodi, izlaz očekujemo 20. Zašto mi to nazivamo crna kutija? Pa, ako mi se ne pisanje Djeluje sebe, što smo učinili vrlo malo dosad cs50. Vidjeli smo ispisa f, primjerice, koje je funkcija koja nismo pisati sami, ali mi ne koristite sve vrijeme. Ako mi ne pišu funkcije sebe, ne stvarno trebate znati kako je to zapravo provodi ispod haube. Tako na primjer crna kutija I samo ti pokazali za množenja, mult a, b mogu biti defined-- a to je samo Neki pseudocode-- mogao biti definira kao izlaz puta b. Koje imaju smisla, zar ne. Ako imamo funkciju pod nazivom mult koji traje dva ulaza. Mi bi se očekivati ​​da bi izlaz biti dva ulaza množi zajedno, puta b. Ali mult također može biti provoditi ovako, imamo varijablu counter pozor unutar mult 0. A onda smo ponoviti ovaj postupak b puta dodati na šalter. Na primjer, ako pomnožimo 3a strane 5b, mogli bismo reći postaviti brojač na 0, ponovite pet puta, dodati 3 do pulta. Tako smo započeli na 0, a zatim radimo to pet puta 3, 6, 9, 12, 15. To je isti rezultat. Mi ipak dobiti 3 puta 5 samo provedba je drugačiji. To je ono što mislimo kada kažemo crnu kutiju. To samo znači da mi ne stvarno briga kako se to provodi ispod haube dok je izlaz je ono što očekujemo. U stvari, to je dio ugovora pomoću funkcije, osobito Funkcije koje drugi pišu. Ponašanje uvijek ide biti tipičan, nepredvidljiv temelju ime funkcije. I to je razlog zašto je zapravo važno kada pišete funkcije ili kada drugi ljudi pišu Funkcije koje bi mogli koristiti, da te funkcije ima jasne, relativno očiti imena, i dobro su dokumentirani. Što je svakako slučaj za funkcije poput ispisa f. Pa zašto mi koristimo funkcije? Pa kao što sam rekao ranije, ako pišemo sve naše koda unutar glavnih stvari možete dobiti stvarno težak i stvarno komplicirano. Funkcije omogućuju nam mogućnost organizirati stvari i razbiti vrlo komplicirano problema u mnogo više rukovanje pod dijelovi. Funkcije nam također omogućuju da se pojednostaviti proces kodiranja. To je puno lakše ispravljanje 10 crta funkcija u odnosu na 100 linije funkcija ili funkcija 1.000 linija. Ako imamo samo ispravljanje male komadiće na vrijeme, ili pisati male komadiće u to vrijeme, čini da iskustva u programiranju puno bolje. Vjeruj mi na tome. Na kraju, ako pišemo funkcije smo može ponovno one različite dijelove. Funkcije može reciklirati. Oni se mogu koristiti u jedan program ili neki drugi. Već sam napisao funkcija, sve što trebate učiniti je reći taj program gdje naći tu funkciju. Mi smo recikliranje i korištenjem ispis F za više od 40 godina. Ali to je samo napisao jedan put. Prilično koristan, pravo. U redu. Dakle funkcije su super. Znamo da. Sada ćemo ih početi pisati. Počnimo dobivanje ih u naše programe. Da bi to postigli, prvo što mi je izjaviti funkciju. Kada proglasiti funkciju ono što zapravo radi govori prevodilac, hej, samo da znaš, Ja ću biti pisanje funkcija kasnije a evo što će to izgledati. Razlog za to je jer kompilatora mogu učiniti neke čudne stvari, ako vide skup simbola da oni nisu upoznati s. Dakle, mi samo dati prevodilac A glave gore, ja sam stvara funkciju i to će to učiniti. Funkcija deklaracije općenito, ako koju organizira svoj kod na način da će i drugi moći razumjeti i iskoristiti, općenito žele staviti sve Vaše funkcija izjava na samom vrhu vašeg koda, pravo Prije nego što počnete pisati Glavni čak. I jednostavno, tu je vrlo standardni obrazac da je svaka funkcija izjava slijedi. Svi su prilično mnogo izgledati ovako. Postoje tri dijela u funkciji izjava, tipa povrata, naziv, i popis argument. Sada je vrsta povratak Kakav varijabla funkcija će ispisati. Tako na primjer, ako mislimo unatrag Prije minutu do dvije množenjem Brojevi funkcija, što očekujemo, ako pomnožimo cijeli broj od cijelog broja izlaz će biti Vjerojatno cijeli, zar ne. Množe dva prirodna broja zajedno, te dobiti cijeli broj. Dakle, vrsti koja povratka Funkcija bi int. Ime je ono što želite nazvati svoju funkciju. To je vjerojatno najmanje važno dio funkcije deklaracije, u smislu funkcionalnosti. No, zapravo je vjerojatno jedan od najvažnijih dijelova funkcije izjave u smislu znajući što je funkcija zapravo ne. Ako ime vašeg funkcija f ili g ili h ili tajna ili nešto slično, ste vjerojatno idući u dobiti malo iskočio odustao sjetiti što te funkcije učiniti. Tako da je važno dati svoj smislene imena funkciju a. Na kraju, popis argument zarez odvojeni popis svih ulaza u vašem funkciju, od kojih svaki ima tip i naziv. Dakle, ne samo da ćete morati navesti koju vrstu varijable Funkcija će izlaz, također žele odrediti Koji tip i vrste varijabli u Funkcija će prihvaćanje kao ulaza. Tako ćemo učiniti ovdje primjer. Ajmo pogledati na konkretniji jedan. Dakle ovdje je primjer ovisnosti Deklaracija za funkcije koje bi dodali dva broja zajedno. Zbroj dvaju brojeva će biti cijeli broj, kao i, kao što smo upravo razgovarali. I tako je vrsta povratka, ovdje u zeleno, biti int. To nas je dodati dva Ints samo govori će se, na kraju dana, izlaz, ili ga ispljune nazad na nas, cijeli broj. S obzirom na ono što ova funkcija mi radi želite dati smisleni naziv. Dodajte dvije Ints izgleda prikladno, s obzirom mi smo uzimajući dva broja kao ulazi i nadamo se da ih dodate zajedno. To bi moglo biti malo težak Ime i iskreno ova funkcija vjerojatno nije potrebno jer imamo dodatak operater, ako se sjećate iz naše rasprava operatera, prije. Ali recimo samo za dobrobit Argument da je ova funkcija je korisna i tako ćemo nazvati dodajte dvije Ints. Na kraju, ova funkcija traje dva ulaza. Od kojih je svaki cijeli broj. Dakle, imamo ovaj zarez odvojeni popis ulaza. Sada mi općenito želimo dati ime svakog od njih tako da se može koristiti u funkciju. Imena nisu strašno važno. U ovom slučaju, mi ne nužno imati značenje povezanih s njima. Dakle, mi samo možemo ih nazvati i b. To je sasvim u redu. Ako, međutim, možete pronaći sebe u situaciji gdje su imena varijabli može zapravo biti važno, možda ih želite nazvati nešto drugo nego i B da im daju nešto više simbolično značenje. No, u ovom slučaju, mi ne stvarno znaju ništa drugo o funkciji. Mi samo želimo dodati dva prirodna broja. Dakle, samo ćemo nazvati oni cijeli brojevi a i b. To je jedan primjer. Zašto ne uzmete drugi razmišljati o ovome, kako bi ti napisati funkciju Deklaracija za funkcije koje umnožava dvije brojeve s pomičnim zarezom? Sjećate li se što je plutajući broj je točka? Što bi ova funkcija Deklaracija izgledati? Ja zapravo preporučiti te pauziranje videozapisa ovdje i uzeti koliko vremena vam je potrebno. Razmislite o tome što je to Funkcija deklaracija će biti? Što bi vrsta povratak biti? Što bi smisleni naziv biti? Što bi ulazi se? Pa zašto ne pauzirati video ovdje i pisati-up funkcije izjavu za funkcije koji će umnožiti Dva brojeve s pomičnim zarezom zajedno. Nadam se da je zastao video. Tako ćemo pogledati primjer jednog mogućeg deklaracije. Float mult dva reals plutaju x, y float. Produkt dva brojeve s pomičnim zarezom, koji prisjetiti se kako smo predstavlja realne brojeve ili brojeve s decimalnim vrijednostima u C, će biti plutajući niz točka. Kada pomnožite decimale po decimale, ste vjerojatno idući u dobiti decimale. Želiš mu dati relevantne ime. Pomnoži dva reals čini u redu. Ali stvarno bi mogao nazvati mult dva pluta ili mult pluta. Nešto slično, sve dok to dao neki stvarni smisao onoga što ova crna kutija će učiniti. I opet, u ovom slučaju, mi ne Čini se da imaju ikakav smisao u prilogu na imena varijable smo prolaze u, pa smo samo ih zvati X i Y. Sada, ako ste ih nazvati nešto drugo, to je sasvim u redu. U stvari, ako nije ova izjava umjesto pomoću parovima umjesto od pluta, ako se sjećate da parovi su različiti način da preciznije odrediti realne brojeve ili pomičnim zarezom varijable. To je sasvim u redu previše. Ili jedan od onih koji će biti u redu. Zapravo, postoji nekoliko različite kombinacije načina da se proglasi tu funkciju. No, to su dvije jako dobre. Mi smo proglasili funkciju, to je super. Mi smo rekli prevodilac ono što je, što ćemo raditi. Sada zapravo pisati tu funkciju. Dajmo mu definiciju, tako da unutar crne kutije predvidljivo ponašanje se događa. U stvari, mi smo množenjem dva prava brojeve zajedno, ili dodavanje brojeva zajedno, ili radi ono što je da smo pitali naše funkciju veze. Dakle, u stvari, pokušajmo i definirati pomnožiti dva reals koje smo upravo govorio o prije sekundu. Sada početak definicija funkcija izgleda gotovo posve isti kao funkcija deklaracije. Imam ih oboje ovdje. Na vrhu je funkcija deklaracija, Vrsta, naziv, odvojene zarezom argument Popis, točka i zarez. Zarez označava da da je funkcija izjava. Početak funkcije Definicija izgleda gotovo točno isti, vrsta, naziv, odvojene zarezom Popis argument, ne zarez, otvori kovrčavu braće. Otvorena kovrčava braće, kao što smo radili s glavnom, znači da smo sada na početku definirati ono što se događa unutar crne kutije koja odlučili smo pozvati mult dva reals. Ovdje je jedan od načina da ga provede. Mogli bismo reći, mogli bismo proglasiti novi varijabla tipa float naziva proizvoda i dodijeliti tu varijablu na vrijednost x puta y. A onda se vratiti proizvod. Što znači povratak ovdje. Pa povratak je način mi pokazuju da je kako mi prolazi izlaz odustati. Tako vratiti nešto, je isto kao, to je izlaz iz crne kutije. Dakle, to je kako to učiniti. Evo još jedan način da se to provede. Mi smo samo mogli vratiti x puta y. X je plovak. y je plovak. Dakle, x puta y je i plovak. Mi ni ne trebaju stvoriti drugu varijablu. Dakle, to je drugačiji način implementirati isti crnu kutiju. Sada uzmite trenutak, opet pauzirati video, i pokušati definirati dodajte dvije Ints, što je druga funkcija koje smo govorio o maloprije. Opet ovdje sam stavio funkciju izjava, pa je zarez, i otvoren kovrčave vitice i zatvorena vitičasta braće naznačiti gdje ćemo ispuniti u sadržaju dodali dvije Ints, tako da smo definirati poseban Ponašanje unutar crne kutije. Dakle pauzirati video. I uzeti što više vremena morate probati i definirati provedba dodajte dvije Ints, kao da kada je funkcija izlazi vrijednosti, to se, zapravo, povratak zbroj dva ulaza. Dakle, baš kao u prethodnom primjeru, postoji nekoliko različitih načina da biste mogli provesti dodajte dvije Ints. Evo jedan. Ovdje narančasto imam Samo je imao neke comments-- Upravo sam dodao neke komentari za označavanje što se događa na svakom retku koda. Tako sam proglasiti varijablu zove suma tipa int. Kažem zbroj jednak plus b. To je mjesto gdje smo zapravo radite rad dodavanjem i B zajedno. I ja sam se vratiti svotu. I to ima smisla, jer Zbroj je varijabla tipa int. A što je podatke da je taj tip Funkcija mi govori da će to izlaz? Int. Tako sam povratka iznos koji je varijabla broj. I to ima smisla s obzirom što smo proglasio i definira naš funkciju napraviti. Sada također možete definirati funkcija na ovaj način, int zbroj jednak plus B- preskočiti Prvi step-- a zatim vratiti iznos. Sada možete imati i provodi se na ovaj način, što sam visoko ne preporučujem. To je loše za jedan stil stvar i stvarno loše dizajn, ali to ipak, u stvari, na poslu. Ako vam se ovaj kod, koji je int dodaj loše guja točkica C, i koristiti ga. To zapravo ne dodati dva prirodna broja zajedno. To je vrlo loša provedba ove određene ponašanja. No, to ne rade. To je samo ovdje za ilustraciju poanta da mi ne stvarno zanima me što se događa unutar crne kutije, dok jer ima izlaz koji očekujemo. To je loše dizajniran crna kutija. Ali na kraju dana, to ne uvijek izlaz suma plus b. U redu. Tako smo proglasili funkcije. A mi smo definirana funkcija. Tako da je stvarno dobar. Sada ćemo početi koristiti funkcije da smo proglasili, a mi smo definirani. Za nazivanje function-- to je zapravo lijepa easy-- sve što trebate učiniti je proslijediti odgovarajuće argumente, Argumenti tipa podataka da očekuje i zatim dodijeliti povratak vrijednost te funkcije i this-- izgovor me-- dodijeliti povratnu vrijednost te funkcije nešto od odgovarajuće vrste. Tako ćemo imati pogled na to u praksi u datoteku zove guja 1 točka c, koji se Imam u mom cs50 IDE. Dakle, ovdje je guja 1 točka c. Na početku vidite imam moj uključuje, funta su, standardni IO i cs50 točka h. A onda imam funkciju izjavu. Ovo je mjesto gdje sam govori prevodilac ja sam će se pisanje funkcija zove dodajte dvije Ints. To će, na izlazu broj vrsta promjenjiva. To je ono što ovaj dio je upravo ovdje. A onda imam dva ulaza da bi ga i b, od kojih je svaki cijeli broj. Unutar glavni, sam pitati korisnika za ulaz govoreći, daj mi cijeli broj. I oni zatraži zaboraviti int, što je funkcija koja uključena u cs50 knjižnici. I to dobiva pohranjene u x, varijabla broj. Onda smo ih pitati za neki drugi cijeli broj. Mi smo dobili još jedan cijeli broj i pohraniti da u y. A onda, ovdje na liniji 28, je gdje smo napraviti naš funkcija poziva. Mi smo govoreći, int Z jednako dodati 2 Ints x y zarezom. Vidite li zašto je ovo smisla? X je varijabla tipa cijeli broj i y je varijabla tipa cijeli broj. Dakle, to je dobro. To smisla s onim što naš funkciji izjava na liniji 17 izgleda. Zarez odvojeni popis ulaz očekuje se dva prirodna broja A i B. U tom slučaju, možemo nazvati im što god želimo. To samo očekuje dva prirodna broja. I x je cijeli broj, a y je cijeli broj. To radi. A mi znamo da je funkcija ide na izlazu cijeli brojevi, kao dobro. I tako smo se pohranjivanjem Izlaz iz funkcije, dodajte dva Ints, u cjelobrojni tip varijabla, koju zovete z. A onda možemo reći, suma posto sam i posto sam je ja posto. x, y i z, odnosno ispunjavanje tih posto sam je. Koja je definicija dodaj dvije Ints izgledati? To je prilično jednostavan. To je jedna od onih koje Upravo sam vidio prije sekundu, int suma jednaka je plus b povratak svotu. Ovo radi? Idemo spremite datoteku. A onda je ovdje dolje na moj terminalu Idem napraviti zbrajalo 1, i ja razbistriti zaslon. Idem za povećavanje, jer znam to je malo teško vidjeti. Tako smo sastaviti ovaj program kao guja ljutica 1. Dakle, što možemo učiniti dot kose crte zbrajalo 1. Daj mi cijeli broj, 10. Daj mi još jedan cijeli broj, 20. Zbroj od 10 i 20 je 30. Tako smo napravili uspješnu funkciju poziv. Možete ponovno pokrenuti funkciju, negativna 10, 17 zbroj negativnih 10 i 17 je 7. Ova funkcija radi. To ima ponašanje da ga očekuju. I tako smo napravili uspješan funkcija, definicija, deklaracija, i uspješan funkcija poziva. Par razno točke o funkcijama prije nego što smo se zaključiti ovo poglavlje. Podsjetimo iz naše rasprava o vrstama podataka, prethodno, koji djeluje ponekad može potrajati ne ulaze. Ako je to slučaj, proglasiti funkciju kao da ima popis ništavan argument. Sjećate li se što se Najčešće funkcija smo do sada vidjeli da traje popis praznina argument? To je glavni. Sjetite se također da je funkciju ponekad ne zapravo imaju izlaz. U tom slučaju, možemo proglasiti funkciju kao da ima povratnu nevažeće tip. Ajmo zaključiti ovo poglavlje koje rješavanje problema prakse. Dakle ovdje je problem iznio. Želim napisati funkciju naziva valjana trokut. Što ova funkcija treba učiniti je uzeti tri realne brojeve koji predstavljaju duljine od tri strane trokuta kao svojim parametrima, ili njegovi argumenti, ili njegova inputs-- drugi skup sinonima koje možete naići. Ova funkcija trebala ili izlaz točno ili netočno ovisno o tome je li ta tri duljine su sposobni za stvaranje trokut. Sjećate li se tip podataka koji koristili smo ukazati točno ili netočno? Sada kako provodite ovo? Pa znam ima par pravila u vezi trokuta da su zapravo korisno znati. Trokut može imati samo strane s pozitivnim duljine. To ima smisla. Vjerojatno govoreći duh. Druga stvar na umu ipak, da je zbroj od duljine bilo dvije strane trokuta mora biti veća od Duljina treće strane. To je zapravo istina. Ne možete imati trokut strana 1, 2 i 4, na primjer, zbog 1 plus 2 nije veći od 4. Dakle, to su pravila koja utvrditi da li ili ne tri Ulazi ubjedljivo može formirati trokut. Tako potrajati nekoliko minuta i proglasiti te definirati ova funkcija zove valjana trokut, tako da je zapravo ima ponašanje ovdje naveden. To će izlaz vrijedi ako ta tri strane su sposobni sadrži trokut, i lažna inače Spremni za vidjeti kako si učinio? Evo jedna implementacija od valjana trokut. To je ne samo jedan. Tvoja možda malo razlikuju. Ali ovaj ne, u stvari, ima ponašanje koje očekujemo. Mi objavljujemo djeluje u samom vrhu, bool valjanu trokut float x float y float z. Pa opet, ova funkcija traje tri realne brojeve kao svoje argumente, pluta Točka vrijednost varijable, i izlazi pravi ili lažni vrijednost, što je logička, opoziv. Dakle, to je razlog zašto je vrsta povratak je bool. Onda smo definirati funkcije. Prva stvar koju radimo je provjerite je li da sve strane su pozitivni. Ako je x manja od ili jednaka 0, ili ako je Y jednak 0, ili ako je z manji od ili jednak 0, koji ne može biti trokut. Oni nemaju pozitivne strane. I tako smo se vratiti netočno u toj situaciji. Zatim provjerite da biste bili sigurni da je svaki par ulaza veća od treći. Dakle, ako je x plus y manji od ili jednak z, ili ako X plus z manje od ili jednako y ili ako Y plus z je manji od ili jednak X, koji također ne mogu biti valjan trokut. Tako smo se vratili opet lažna. Pod pretpostavkom smo prošli oba pregleda iako, onda možemo vratiti istinito. Zbog tih tri strane su sposobni returning-- stvaranja valjanu trokut. I to je to. Sada sam proglasio definiran. A vi svibanj biti u mogućnosti da se sada koristiti i nazvati tu funkciju. Odličan posao. Ja sam Doug Lloyd. To je cs50.