Doug LLOYD: V redu.
Torej, zdaj pa je lotiti res velika tema, funkcije.
Do zdaj je v teku, vse programi, ki smo bili za pisanje
so bila napisana znotraj glavnega.
Oni so zelo enostavne programe.
Vam ni treba, da so vse te veje in stvari se dogaja.
Mi lahko samo vse fit znotraj glavnega in
ne dobite strašno velika.
Ampak kot seveda gre naprej in kot ste začeli razvijati programe
neodvisno, oni verjetno bo za začetek, da bi dobili veliko več kot 10
ali 15 vrstic.
Morda boste dobili na stotine ali tisoče ali deset tisoč vrstic kode.
In to je res ni da je nora misel.
Kot tak, je to verjetno ni dobra ideja da je vse znotraj glavnega.
To lahko postane malo težko najti kaj iščete, če vam to.
>> Na srečo, čeprav C, in precej vsak drugi programski jezik, ki
lahko deluje s, omogoča, nam pisati funkcij.
In jaz sem le, da bo na hitro stran tukaj
omeniti, da je delovanje eno področje računalništva.
In videli boste veliko več od njih v različne točke v celotnem poteku
in če boste še naprej.
Kjer je veliko za isto besedo sopomenke.
Zato pravimo funkcij.
Vendar jih lahko slišite tudi besedilu postopki,
ali metode, še posebej, če ste kdaj narediti nobene objektno programiranje
before-- in ne skrbite Če še niste, ne
velika deal-- ampak revizijski usmerjeni jeziki
pogosto imenovane metode.
Včasih si jih imenuje podprograme.
Ampak so res vsi sklicujejo na isto osnovno idejo.
>> Poglejmo, kaj ta ideja je.
Kaj je funkcija?
No funkcija res nič več kot črno škatlo.
Črna škatla, ki ima videz nič ali več vhodov in en sam izhod.
Tako na primer, ta lahko funkcija.
To je funkcija imenuje funkcijska.
In to traja tri vhode a, b in c.
In znotraj te črne škatle, smo Ne vem točno, kaj počne,
vendar jih obdeluje vhodov na nek način in potem
daje en sam izhod, v tem primeru, Ž.
Zdaj pa, da bi bilo malo manj abstraktno, smo
Lahko bi rekli, da morda smo imajo funkcijo imenovano
Dodajajo, da ima tri vhode A, B, in c in obdela izhod na nek način
v notranjosti črne škatle za izdelovati en izhod.
Torej v tem primeru, če dodaj traja 3, 6 in 7.
Nekje znotraj dodati funkcijo, bi mi
pričakujemo, da se seštejejo da dobimo izhod, ki je
je 3 plus 6 plus 7 ali 16.
>> Podobno imate funkcijo imenovano mult da ima dva vhoda, A in B,
jih na nek način obdela takšno da je izhod funkcije
je produkt dveh vložkov.
Oba vhoda pomnoženo skupaj.
4 in 5, ki se prenese v mult, kaj se zgodi, izhod pričakujemo
20.
Zakaj smo ga imenujemo črna skrinjica?
No, če ne bomo pisanju Deluje sebe, ki
smo naredili zelo malo, kolikor CS50.
Smo videli tiskanja f, na primer, ki je funkcija, ki nismo napisali
sami, ampak bomo uporabili ves čas.
Če ne bomo pisno funkcije sami,
mi res ne bi vedel, kako je to dejansko izvajajo pod pokrovom.
>> Tako je na primer črna skrinjica I samo ti pokazal za množenje,
mult, je lahko b se defined-- in to le
nekateri pseudocode-- bi lahko definiran kot izhod krat b.
To je smisel, kajne.
Če imamo funkcijo imenovano mult ki traja dva vhoda.
Pričakovali bi, da se izhodna bi ti dve vhodi pomnožijo skupaj
a krat b.
Vendar pa bi mult tudi izvajajo, kot je ta,
imamo števca na se določi znotraj mult 0.
In potem bomo ta postopek ponovite b krat dodamo na števec.
Na primer, če smo pomnožimo 3a ga 5b, bi lahko rekli, nastavite števec na 0,
ponovi petkrat, dodamo 3 do pulta.
Tako smo začeli na 0 in potem delamo ta petkrat 3, 6, 9, 12, 15.
To je isti rezultat. Mi še vedno ne dobite 3 krat 5 samo
izvedba je drugačna.
>> To je tisto, kar mislimo ko rečemo črno škatlo.
To samo pomeni, da smo v resnici ne skrbi kako se to izvaja pod pokrovom
dokler izhod pričakujemo.
Dejstvo je, da je del pogodbe z uporabo funkcije, zlasti
Funkcije, ki jih drugi pišejo.
Vedenje je vedno tekoč da je tipično, nepredvidljivi
ki temelji na ime funkcije.
In to je razlog, zakaj je res pomembno, ko pišete funkcije
ali ko so drugi ljudje pišejo Funkcije, ki jih lahko uporabite,
da imajo te funkcije jasne, razmeroma očitne imena,
in so dobro dokumentirani.
Ki je zagotovo primer za funkcije, kot so tiskani f.
>> Torej, zakaj ne bomo uporabili funkcije?
No, kot sem rekel prej, če bomo napisali vse naše kode znotraj glavnih stvari
lahko dobite res nerodno in res zapleteno.
Funkcije nam omogočajo sposobnost organizirati stvari in se razšla
zelo zapleten problem v veliko bolj obvladljive sub deli.
Funkcije nam omogočajo tudi poenostaviti postopek kodiranja.
To je veliko lažje razhroščujejo 10 Funkcija linija v primerjavi s 100 linije
funkcija ali funkcija 1.000 črta.
Če imamo le za debug majhne koščke naenkrat,
ali pisati majhne koščke v času, naredi to programiranja izkušnje
veliko bolje.
Verjemi mi na tem.
>> Nazadnje, če napišemo naloge smo lahko ponovno tiste različne dele.
Funkcije je mogoče reciklirati.
Prav tako se lahko uporablja pri en program ali drugo.
Ste že napisal funkcija, vse, kar
morate storiti, je povedal, da program kje najti te funkcije.
Smo bili recikliranje in uporabo tiskanje f za več kot 40 let.
Vendar je bilo napisano le enkrat.
Precej uporabno, kajne.
V redu.
Torej funkcije so super.
Vemo, da je.
Zdaj pa začnimo jih pišete.
Začnimo pridobivanje jim v naših programih.
Da bi to storil, prvi kar moramo storiti, je razglasila funkcijo.
Ko se razglasi funkcijo kaj ste v bistvu delaš
govori prevajalnik, hej, samo da veš,
Bom pisal funkcija kasneje
in tukaj je, kaj se dogaja, bi izgledal.
Razlog za to je ker prevajalniki lahko
narediti nekaj čudne stvari, če vidijo niz simbolov
da oni ne poznajo.
Torej smo pravkar dal prevajalnik a glave gor, sem ustvariti funkcijo
in to se dogaja, da to storijo.
Izjave Funkcija splošno če ste organiziranje kodo na način,
da bodo drugi lahko razumeti in izkoristiti,
si na splošno želijo dati vse vaših funkcijskih izjav
na samem vrhu kodo, desno preden začnete pisati glavna celo.
In priročno, tam je zelo standardni obrazec
da vsako funkcijo izjava sledi.
So vsi precej izgledala takole.
Obstajajo trije deli na funkcijo deklaracija, vrsta donos, ime,
in seznam argument.
>> Zdaj tip vrnitev Kakšno spremenljivka je izhodna funkcija.
Tako na primer, če mislimo nazaj Pred minuto na pomnoži dva
številke funkcija, kaj pričakujemo, če pomnoži celo za celo
rezultati bodo Verjetno celo število, kajne.
Pomnožene dve celi števili skupaj, dobiš celo število.
Torej tipa povratno da Funkcija bi int.
Ime je tisto, kar želite poklicati svojo funkcijo.
To je verjetno najmanj pomemben del deklaracije funkcije,
z vidika funkcionalnosti.
Vendar je pravzaprav verjetno ena najpomembnejših delov
deklaracije funkcije v smislu vedeti, kaj je funkcija dejansko
počne.
Če ime vašega funkcijo f ali g ali h ali skrivnost ali nekaj takega,
ste verjetno bo dobil malo spotaknil poskuša
da se spomnimo, kaj te funkcije storiti.
Zato je pomembno, da vaš Smiselne imena funkcija je.
>> Nazadnje, seznam argument je vejico ločen seznam
vseh vhodov na vašem funkcijo, od katerih ima vsak tip in ime.
Torej, ne samo, da moraš natančno določiti, kakšen tip spremenljivke
izhodna funkcija, tudi vi želite, da določite
kakšne vrste in vrste spremenljivk Funkcija bo sprejemala kot surovine.
Torej, kaj je naredil zgled tukaj.
Recimo samo, da si ogledate na bolj konkreten enega.
Torej, tukaj je primer funkcije Izjava za funkcijo, ki
bi dodal dve celi števili skupaj.
Je vsota dveh celih števil bo je celo število, kot tudi, kot smo pravkar
razpravljali.
In tako je tip donos, tukaj v zeleno, bi bilo int.
To nam da dodate dve ints samo pove se bo na koncu dneva,
izhod, ali pa ga pljuvati nazaj ven, da nas celo število.
Glede na to, kaj ta funkcija ne mi želim, da bi to smiselno ime.
Dodamo dve ints zdi primerno, če upoštevamo
smo ob dveh celih števil kot vložki in upajmo, da jih dodate skupaj.
Mogoče je malo nadležen Ime in odkrito ta funkcija
verjetno ni potrebna saj imamo dodajanje
operater, če se spomnimo iz naše Razprava operaterjev, prej.
Ampak recimo, za zaradi Trditev, da je ta funkcija uporabna
in tako bomo pravimo dodamo dve ints.
Nazadnje, ta funkcija traja dva vhoda.
Od katerih je vsak celo število.
Torej imamo to vejico ločen seznam vhodov.
Zdaj smo na splošno želijo poimenovati vsakega od njih
tako, da jih je mogoče uporabiti v funkciji.
Imena niso strašno pomembno.
>> V tem primeru, ne bomo nujno imela nobenega pomena, ki jim pripadajo.
Torej lahko samo jih imenujemo a in b.
To je povsem v redu.
Če pa se vam zdi sami v položaju
kjer imena spremenljivk lahko dejansko pomembno,
boste morda želeli, da jih pokličete nekaj drugega kot a in b
jim dati nekaj več simbolično smiselna.
Toda v tem primeru ne bomo res vem, kaj drugega o funkciji.
Pravkar smo želeli dodati dve celi števili.
Torej bomo samo pokliči tistimi števili a in b.
To je en primer.
>> Zakaj ne vzameš drugi razmišljati o tem enem,
kako bi si napisati funkcijo Izjava za funkcijo, ki
Pomnoži dva plavajočo vejico?
Se spomnite, kaj je plavajočo vejico številka?
Kaj bi ta funkcija Izjava izgledal?
Pravzaprav sem vam priporočamo ustavite video sem in koliko časa boste potrebovali.
Pomisli, kaj je to Izjava funkcija bi bilo?
Kaj bi tip vrnitev biti?
Kaj bi smiselno biti ime?
Kaj bi vnosi bilo?
Torej, zakaj ne ustavite video tukaj in napisati-up izjavo funkcije
za funkcijo, ki bi se množijo dve plavajočo vejico skupaj.
Upam, da ste prekinili video.
>> Torej, vzemimo si na primer enega možnega izjave.
Float mult dve reals float x, float y.
Produkt iz dveh plavajočo vejico,
ki spomni se, kako smo predstavljajo realne številke
ali številke z decimalnimi vrednostmi v c, se bo število s plavajočo vejico.
Ko se množijo decimalno z decimalko,
ste verjetno bo dobil decimalko.
Hočeš, da ga ustrezno ime.
Pomnožite dve reals zdi v redu.
Ampak lahko bi res poklical mult dve boje, ali mult plava.
Kaj podobnega, da tako dolgo, kot to dal nekaj dejanski pomen, kaj
to black box, da bom naredil.
In še enkrat, v tem primeru, ne bomo Zdi se, da imajo pritrjen katerikoli pomen
z imeni spremenljivke smo na prehodu v,
zato smo jim samo pokličite X in Y.
Zdaj, če jih pokličete nekaj pa, da je popolnoma v redu.
V bistvu, če si ta izjava namesto
Namesto z uporabo dvojicah splavov, če se spomnimo
da se podvoji drugačen način, da se natančneje
opredeliti realne številke ali plavajočo vejico spremenljivk.
To je povsem v redu preveč.
Eden izmed tistih, ki bi bilo v redu.
Dejstvo je, da je več različne kombinacije
načinov, da razglasi to funkcijo.
Ampak to sta dve zelo dobri.
Mi smo razglasili za funkcijo, ki je super.
Mi smo povedali, prevajalnik, kakšna je je, kaj bomo počeli.
Zdaj pa je dejansko napisati to funkcijo.
Dajmo to definicijo, tako, da je v notranjosti črne škatle
predvidljivo obnašanje se dogaja.
V bistvu smo se pomnoži dve resničnim številke skupaj, ali dodajanje številke
skupaj, ali stori, kar je da smo prosili našo nalogo opraviti.
>> Torej v resnici, poskusimo in določite množijo dva reals, ki smo ga pravkar
govoril o drugi nazaj.
Zdaj začetek Definicija funkcija
izgleda skoraj popolnoma enaka kot deklaracije funkcije.
Imam oba tukaj.
Na vrhu je izjava funkcija, vrsta, ime, ločene z vejicami argument
seznam, podpičje.
Podpičje kaže, da da je izjava funkcija.
Začetek delovanja definicija izgleda skoraj natanko
isto, vrsta, ime, ločene z vejico Seznam argument, ne podpičje,
odpreti kodrasti oklepaja.
Odprta kodrasti naramnicami, prav tako kot smo počeli z glavno,
pomeni, da smo zdaj začenja opredeliti
kaj se dogaja v notranjosti črne škatle, ki smo se odločili, da pokličete mult dve reals.
Tukaj je eden od načinov za njeno izvajanje.
Lahko bi rekli, da bi lahko razglasi novo spremenljivka tipa float imenuje izdelka
in dodelite to spremenljivko na vrednost x-krat y.
In se nato vrnite izdelek.
Kaj pomeni vrnitev pomeni tukaj.
No donos je način smo, kažejo, da je, kako
smo mimo izhod nazaj ven.
Torej vrne karkoli, je enak kot, to je izhodna črne škatle.
Torej, to je, kako si to naredil.
Tu je še en način, da jo izvajati.
Mi lahko samo vrne x krat y.
x je plovec.
y je plovec.
Torej x krat y je tudi plovec.
Mi ne potrebujemo celo ustvariti novo spremenljivko.
Tako, da je drugačen način izvajati točno isto črno skrinjico.
>> Sedaj vzemite trenutek, spet premor video,
in poskusite in določite dodati dve ints, ki je drugo nalogo, da smo
govoril o pred nekaj trenutki.
Spet tu, sem dal funkcijo deklaracija, in tako podpičje,
in odprt kodrasti brace in zaprt kodrasti
brace navesti kjer bomo zapolnili v vsebini dodati dve ints,
tako, da definiramo posebno vedenje v notranjosti črne škatle.
Torej ustavite videoposnetek.
In vzemite toliko časa, kot je morate poskusiti in določiti
izvedba dodati dve ints, kot da kadar funkcija odda vrednost,
to ne, v resnici, povratek vsota dveh vložkov.
Torej tako kot v prejšnjem primeru, obstaja več različnih načinov
da bi lahko izvajala dodati dve ints.
Tukaj je ena.
Tukaj v oranžni barvi Sem le imel nekaj comments--
Pravkar sem dodal nekaj Komentarji, ki označuje
kaj se dogaja na vsako vrstico kode.
Zato izjavljam spremenljivko imenovana vsota tipa int.
Pravim vsota enaka plus b.
To je, če smo dejansko počne delo dodajanje A in B skupaj.
In sem se vrnil vsoto.
In da ima smisel, ker je vsota je spremenljivka tipa int.
In kaj je podatkovni tip, ki je to Funkcija mi je povedal, da se bo izhod?
Int.
Tako da sem se vračajo vsoto, ki je celo število spremenljivka.
In da je smiselno dati tisto, kar smo jih prijavljeni in opredeljena našo funkcijo
narediti.
>> Sedaj lahko tudi določite funkcija na ta način,
int vsota enaka plus b-- preskočite da Prvi step-- in nato vrniti vsoto.
Sedaj lahko imate tudi izvaja na ta način,
ki sem ga zelo ne priporočam.
To je slab slog za eno stvar in res slabo načrtovanje,
vendar pa je v dejstvu, delo.
Če ste vzeli to kodo, ki je int dodaj slab seštevalnik dot c, in jo uporabite.
To dejansko ne dodate dve celi števili skupaj.
To je zelo slaba izvedba to določeno obnašanje.
Ampak to ne deluje.
To je samo tukaj za ponazoritev točka, da ne bomo res
zanima me, kaj se dogaja v notranjosti črna škatla, dokler
saj ima moč, da smo pričakovali.
To je slabo oblikovana črna skrinjica.
Ampak na koncu dneva, to počne še izhod vsota plus b.
V redu.
Torej smo razglašena funkcij.
In že smo definirali funkcijo.
Tako, da je res dober.
Zdaj pa začnimo uporabljati funkcije da smo prijavljeni in smo opredeliti.
Če želite poklicati function-- da je dejansko zal easy-- vse, kar morate storiti
je dajati ustrezne argumente, Utemeljitve podatkovni tip
da pričakuje, in nato dodelite vrnitev
vrednost te funkcije in this-- izgovor me--
dodeliti vrne vrednost te funkcije na nekaj pravilnega tipa.
>> Torej, kaj je imeti poglej To v praksi v datoteki
imenovano seštevalnik 1 pika c, ki Imam v CS50 IDE.
Torej, tukaj je seštevalnik 1 pika c.
Na začetku vidiš, imam moj vključuje funt vključujejo,
standardna IO, in CS50 dot h.
In potem imam funkcijo izjavo.
To je, če sem pove prevajalniku Jaz sem
bodo pisanjem Funkcija se imenuje dodati dve ints.
To se dogaja, da izhodno število tip spremenljivke.
To je tisto, kar ta del je tukaj.
In potem sem imela dva vhoda se ji in b, od katerih je vsak celo število.
Znotraj glavnega sem vprašati uporabnika za vhod z mislijo, da mi celo število.
In so pozvani, da pozabi int, ki je funkcija,
je vključen v knjižnici CS50.
In to gets shranjeni v x, celo spremenljiva.
>> Potem smo jih vpraša za drugo celo število.
Smo dobili še celo in shranjevanje, da je v y.
In potem, tukaj na liniji 28, je kjer naredimo naš klic funkcije.
Pravimo, int Z enaka dodamo 2 ints x vejica y.
Ali vidiš, zakaj je to smiselno?
x je spremenljivka tipa celo število in y je spremenljivka tipa celo število.
Torej, to je dobro.
To je smisel s kakšnim našim delovanjem Izjava o vrstici 17 izgleda.
Vejicami ločen seznam vhod pričakuje dve celi števili, A in B.
V tem primeru lahko rečemo jim karkoli hočemo.
Samo pričakuje dve celi števili.
In x je celo število in y je celo število.
To deluje.
>> In vemo, da funkcija se dogaja na izhodno cela števila kot tudi.
In tako smo se shranjevanje izhodna funkcija,
dodamo dve ints, v tip integer spremenljivka, ki smo jih kličeš z.
In potem lahko rečemo, vsota odstotkov i in odstotek i odstotka i.
x, y in z vsakokrat polnjenje v tistih odstotkov i-jev.
Kaj je definicija dodamo dve Ints izgledal?
To je zelo preprosta.
To je ena od tiste, ki jih samo videl pred eno sekundo,
int vsota je enaka plus b povratni vsoto.
Ali to delo?
Oglejmo shranite datoteko.
In potem je tukaj na mojem terminalu Jaz bom, da bo seštevalnik 1,
in sem zbistriti zaslon.
Jaz grem za povečavo, ker vem, to je malo težko videti.
>> Torej bomo prevedite ta program kot seštevalnik 1.
Torej ne moremo storiti dot slash seštevalnik 1.
Daj mi celo, 10.
Daj mi še celo 20.
Vsota 10 in 20 je 30.
Tako smo uspešno klic funkcije.
Lahko znova zaženete funkcijo, negativna 10, 17 vsota negativnega 10. in 17. 7.
Ta funkcija deluje.
Ima obnašanja ki smo ga pričakovali, da.
In tako smo naredili uspešen funkcija, definicija, deklaracija,
in uspešen klic funkcije.
Par razno Točke o funkcijah
preden zaključimo to poglavje.
Spomnimo iz naše Razprava podatkovnih tipov,
prej, da deluje lahko včasih traja nobenih vhodov.
Če je temu tako, smo razglasi funkcijo
kot da imajo seznam za ničen argument.
Ali se spomnite, kaj je Najpogostejši funkcija
smo videli doslej, ki traja seznam argument ničen, je?
To je glavno.
Spomnimo tudi, da je funkcijo včasih pa dejansko ni imela izhoda.
V tem primeru smo se ugotovi, da je funkcija da ima vrsto nična donosa.
Oglejmo skleniti ta odsek, ki ga reševanju vadbeni problem.
>> Torej, tukaj je problem določeno.
Rad bi, da napišete funkcijo imenuje veljavna trikotnik.
Kaj to funkcijo je treba storiti se sprejme tri realne številke
ki predstavljajo dolžine treh stranice trikotnika kot njegovih parametrov,
ali njene trditve, ali njenih inputs-- drug niz sopomenk
da lahko naletite.
Ta funkcija bi morala bodisi izhod true ali false
odvisno od tega, ali teh treh dolžin so sposobna sprejemati trikotnik.
Se spomniš, podatkovni tip, ki smo uporabili za označevanje pravilna ali napačna?
Zdaj kako izvajati to?
Dobro veste, obstaja nekaj pravil glede trikotniki
da so dejansko koristno vedeti.
Trikotnik ima lahko samo strani s pozitivnim dolžino.
Da ima smisel.
Ste verjetno rekel, duh.
Druga stvar je tudi omeniti čeprav je, da vsota
dolžin kateremkoli dve strani trikotnika
mora biti večja od dolžina tretje strani.
To je dejansko res.
Ne morete imeti trikotnik straneh 1, 2 in 4, na primer, ker 1 plus 2
ni večje od 4.
Torej, to so pravila, ki ugotoviti, ali je tri
vhodi lahko razumljivo tvorita trikotnik.
Torej, vzemite nekaj minut in izjavljajo, in nato določiti
ta funkcija imenuje veljavna trikotnik, tako da je dejansko
ima obnašanje tu določeno.
>> To bo izhod res, če teh treh straneh so sposobni obsega trikotnik,
in false sicer Pripravljeni, da vidite, kako si?
Tukaj je ena izvedba veljavnih trikotnik.
To ni edini.
Lep morda nekoliko razlikujejo.
Ampak tale ne, v resnici, imajo vedenje, da smo pričakovali.
Izjavljamo naše delovanje na zelo top, bool veljavno trikotnik
float x float y float z.
Torej še enkrat, ta funkcija traja tri realne številke
za svoje argumente, plavajoči spremenljivke točka vrednosti,
in izhodi resnična ali lažna vrednost, kar je logično, odpoklic.
Torej, to je, zakaj je tip donos bool.
Potem smo opredeliti funkcijo.
Prva stvar, ki mi je, preverite, da so vse strani pozitivna.
Če je x manjša ali enaka na 0, ali, če je y enak 0,
ali če je z manj kot ali enaka 0, da ne more biti trikotnik.
Nimajo pozitivne strani.
In tako se bomo lahko vrnili false v tej situaciji.
Dalje, smo preverite, da ima vsak par vhodov
večji od tretjega.
>> Torej, če je x plus y manj ali enako Z,
ali če je x plus z manj ali enako y,
ali če je Y in Z je manjša ali enaka x, ki prav tako ne more biti veljaven trikotnik.
Torej se bomo vrnili spet false.
Ob predpostavki, da smo opravili oba pregledov čeprav, potem pa se lahko vrnemo true.
Ker teh treh straneh so sposobni returning--
ustvarjanja veljavno trikotnik.
In to je to.
Zdaj ste prijavljeni in so opredeljeni.
In ti morda lahko zdaj uporabo in poklicati to funkcijo.
Odlično opravljeno.
Sem Doug Lloyd.
To je CS50.