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.