DOUG LLOYD: Dobře.
Takže teď pojďme vypořádávat s opravdu velké téma, funkce.
Dosud se v průběhu, všechny programy, které jsme byli psaní
byly psané uvnitř hlavní.
Jsou to docela jednoduché programy.
Nemusíte mít všechny tyto větve a všechno děje.
Můžeme jen vejde všechno uvnitř hlavní, a to
nedostane hrozně ohromující.
Ale jak se kurz pokračuje a jak se vám začne rozvíjet programy
nezávisle na sobě, oni jsou pravděpodobně bude začít se dostat mnohem více, než 10
nebo 15 řádků.
Ty by mohly získat stovky nebo tisíce nebo desítky tisíc řádků kódu.
A je to opravdu není ta šílená myšlenka.
Jako takový, je to asi není dobrý nápad aby vše vnitřek main.
To může být trochu obtížné najít to, co hledáte, pokud to uděláte.
>> Naštěstí, i když C, a do značné míry každý druhý programovací jazyk, který
by mohlo fungovat s, umožňuje abychom se psát funkce.
A já jsem prostě jít se rychle stranou zde
se zmínit, že funkce je Jednou z oblastí informatiky.
A uvidíte mnoho více z nich v různé body po celou dobu kurzu
a pokud budete pokračovat dál.
Tam, kde je hodně synonyma pro stejné slovo.
Takže říkáme funkce.
Ale můžete slyšet i jejich označovány jako postupy,
nebo postupy, zejména, pokud jste někdy neučinily žádné objektově orientované programování
before-- a nebojte se Máte-li ne, není
velké deal-- ale v audit orientované jazyky
jsou často volal metody.
Někdy se jim říká podprogramy.
Ale oni opravdu všichni se odkazují na stejnou základní myšlence.
>> Pojďme se podívat, co to je nápad.
Co je to funkce?
No funkce je opravdu nic víc, než černé skříňky.
Černá skříňka, která má sadu nula nebo více vstupy a jeden výstup.
Tak například tento by mohla být funkcí.
Jedná se o funkci s názvem FUNC.
A to trvá tři vstupy a, b, c.
A v té černé skříňky, my nevím přesně, co to dělá,
ale zpracovává vstupy nějakým způsobem, a pak se
dává jeden výstup, v tomto případě z.
Nyní, aby se to trochu méně abstraktní, my
Dalo by se říci, že bychom mají funkci nazvanou
Dodávám, že trvá tři vstupy A, B, a c a zpracuje výstup v nějakým způsobem
uvnitř černé skříňky do vyrábět jeden výstup.
Takže v tomto případě, je-li přidá se 3, 6 a 7.
Někde uvnitř přidat funkce, by jsme
očekávat, že budou sečteny produkovat výstup, který
je 3 plus 6 plus 7 nebo 16.
>> Stejně tak, budete mít funkci nazvanou mult, že vezme dva vstupy, A a B,
zpracovává je nějakým způsobem takovém že výstup funkce
je produkt dvou vstupů.
Tyto dva vstupy násobí.
4 a 5 byly přeneseny do mult, se něco stane, výstup očekáváme
je 20.
Proč říkáme, že černá skříňka?
No, pokud nejsme napsal svého funkce sami, což
jsme udělali docela dost tak daleko cs50.
Viděli jsme tiskovou f, například, které je funkce, která jsme nepsal
sami, ale my používat po celou dobu.
Pokud nejsme psát funkce sami,
nemáme opravdu potřeba vědět, jak je to skutečně realizován pod kapotou.
>> Tak například černá skříňka I Jen vám ukázal pro násobení,
mult a, b mohou být defined-- a to je jen
některé pseudocode-- může být definována jako výstup A krát b.
To smysl, že jo.
Máme-li funkci nazvanou mult, že vezme dva vstupy.
Očekávali bychom, že výstup by být dva vstupy násobí,
časů b.
Ale může být také mult implementován jako je tento,
máme proti proměnnou pozor uvnitř mult 0.
A pak jsme tento proces opakovat b časy přidat do pultu.
Například, pokud budeme násobit 3a 5b, mohli bychom říci nastavit počítadlo na 0,
opakujte pětkrát, přidejte 3 do pultu.
Takže začneme na 0 a pak děláme tento pětkrát 3, 6, 9, 12, 15.
Je to stejný výsledek. My ještě dostat 3 krát 5 jen
implementace je jiný.
>> To je to, co máme na mysli když říkáme černé krabici.
To jen znamená, že nemáme opravdu péče jak je implementováno pod kapotou
tak dlouho, dokud je výstupní, je to, co očekáváme.
Ve skutečnosti, že je součástí smlouvy použití funkcí, zejména
funkce, které jiní píší.
Chování je vždycky pro něž jsou typické, nepředvídatelný
založené na název funkce.
A to je důvod, proč je to opravdu důležité, když píšete funkcí
nebo když jiní lidé napsat funkce, které můžete použít,
že tyto funkce mají jasné, poměrně zjevné jména,
a jsou dobře zdokumentovány.
Což je jistě případ pro funkci tisku, jako je f.
>> Tak proč používat funkce?
No, jak jsem řekl dříve, pokud budeme psát všechny naše kódu uvnitř hlavních věcí,
může dostat opravdu těžkopádné a opravdu složité.
Funkce nám umožňují schopnost zorganizovat věci a rozbít
velmi komplikovaný problém do mnohem více zvládnutelné sub náhradní díly.
Funkce nám také umožňují zjednodušit proces kódování.
Je to mnohem snazší ladění 10 Řádek Funkce versus 100 řádek
Funkce nebo funkci 1000 online.
Pokud máme jen ladit malé kousky najednou,
nebo napsat malé kousky v té době, to dělá, že zkušenosti s programováním
mnohem lépe.
Věř mi, že jeden.
>> A konečně, pokud budeme psát funkce jsme lze znovu použít tyto jednotlivé díly.
Funkce mohou být recyklovány.
Mohou být použity v jeden program nebo jiný.
Už jste napsal Funkce, vše, co
musíte udělat, je říci, že program, kde najít tuto funkci.
Byli jsme recyklace a využívání tisknout f více než 40 let.
Ale to byl jen napsán jednou.
Docela užitečné, vpravo.
Dobře.
Takže funkce jsou skvělé.
Víme, že.
Nyní začněme ně psát.
Pojďme začít se je do našich programů.
Aby k tomu, že první věc, kterou děláme, je deklarovat funkce.
Když deklarujete funkci co jste v podstatě děláte
říká kompilátoru, hej, jen abyste věděli,
Budu psát funkce později
a tady je to, co to bude vypadat.
Důvodem pro to je, protože kompilátory může
pokud dělat nějaké divné věci oni vidí sadu symbolů
že nejste obeznámeni s.
Takže jsme prostě dát compiler heads up, jsem vytvořit funkci
a bude to, jak to udělat.
Funkční prohlášení obecně pokud jste organizování kódu způsobem,
že ostatní budou moci porozumět a využít,
obecně chcete dát všechny vaše deklarace funkce
na samém vrcholu vašeho kódu, vpravo předtím, než začnete psát hlavní i.
A pohodlně, je tu velmi standardní formulář
že každá funkce prohlášení následuje.
Všichni skoro vypadat takto.
K dispozici jsou tři části do funkce prohlášení, návratový typ, název,
a argument, seznam.
>> Nyní je návratový typ je, jaký druh variabilní funkce bude výstup.
Tak například, když si myslíme, že dozadu Před minutu násobící dva
Čísla funkce, co očekáváme, pokud vynásobíme celé číslo od integer
bude výstup Pravděpodobně celé číslo, ne.
Násobí dvě celá čísla dohromady, dostanete číslo.
Takže návratový typ, který funkce by bylo int.
Jméno je to, co chcete, zavoláte funkci.
To je pravděpodobně nejméně důležité Součástí deklarace funkce,
z hlediska funkčnosti.
Ale ve skutečnosti je pravděpodobně jedním z nejdůležitějších částí
prohlášení funkce, pokud jde vědět, co vlastně funkce
dělá.
Pokud název vaší funkce f nebo g nebo h nebo tajemství nebo něco takového,
jste pravděpodobně dostanou trochu zakopl nahoru snaží
vzpomenout, co ty funkce dělat.
Takže je důležité, aby vaše smysluplné názvy funkcí je.
>> Konečně, seznam argumentů čárka oddělený seznam
ze všech vstupů do vaší funkce, z nichž každý má typ a jméno.
Takže nejen že máte specifikovat, jaký typ proměnné
bude funkce výstup, Chcete také zadat
jaký typ a typy proměnných funkce bude přijímat jako vstupy.
Takže pojďme udělat příklad zde.
Pojďme stačí se podívat na konkrétnější jeden.
Tak tady je příklad funkce prohlášení o funkci, která
Dodávám dvě celá čísla dohromady.
Součet dvou celých čísel se chystá být celé, stejně, jak jsme právě
projednat.
A tak návratový typ, tady v zelené, by int.
To nám, že přidání dvou celých čísel jen řekne bude, na konci dne,
výstup, nebo vyplivnout zpět k nám, celé číslo.
Vzhledem k tomu, co tato funkce dělá my chtějí dát mu smysluplný název.
Přidejte dvě celých čísel se zdá je to vhodné, vzhledem k
vezmeme dvě celá čísla jako vstupy a doufejme, že je součtem.
To by mohlo být trochu těžkopádný jméno a upřímně řečeno, tato funkce
pravděpodobně není nutná protože máme přidání
operátor, pokud si vzpomínáte z našeho diskuse operátorů, dříve.
Ale řekněme, že k zájmu Argument, že tato funkce je užitečná
a tak budeme říkat to přidat dvě celých čísel.
A konečně, tato funkce trvá dva vstupy.
Z nichž každý je celé číslo.
Takže máme tento čárka oddělený seznam vstupů.
Teď jsme se obecně chceme pojmenovat každého z nich
tak, aby mohly být používány v rámci funkce.
Jména nejsou strašně důležité.
>> V tomto případě jsme se nemusí nutně mají nějaký smysl s nimi spojené.
Takže můžeme jen zavolat jim a a b.
To je naprosto v pořádku.
Pokud však zjistíte, ocitnete v situaci,
kde názvy proměnných ve skutečnosti může být důležité,
možná budete chtít volat něco jiného než a a b
dát jim něco víc symbolicky smysl.
Ale v tomto případě, my opravdu vědět něco jiného o funkci.
Chceme jen přidat dvě celá čísla.
Tak prostě budeme nazývat ti, celá čísla a a b.
To je jeden příklad.
>> Proč si vzít druhou přemýšlet o tomhle,
jak byste napsat funkci prohlášení o funkci, která
násobí dvěma plovoucí desetinnou čárkou?
Vzpomínáte si, co je to číslo s plovoucí čárkou je?
Jaká by tato funkce Prohlášení vypadat?
Vlastně jsem Doporučuji vám video pozastavit tady a vzít kolik času budete potřebovat.
Přemýšlejte o tom, co to deklarace funkce by byla?
Co by návratový typ být?
Co by smysluplné jméno být?
Co by vstupy být?
Tak proč si pozastavit video zde a psát-up deklaraci funkce
pro funkci, která by se násobí dvě plovoucí čárkou čísla dohromady.
Doufejme, že jste pozastavili video.
>> Takže pojďme se podívat na příklad z jednoho z možných prohlášení.
Float MULT dva reals float x, float y.
Produkt z dvou plovoucí desetinnou čárkou,
které jsou připomenout, jak jsme se představují reálná čísla
nebo čísla s desetinnými hodnotami v C, bude plovoucí číslo bodu.
Když násobit desetinná desetinnou,
budete pravděpodobně získat desetinné místo.
Chcete-li dát mu příslušný název.
Vynásobte dvě reálů zdá být v pořádku.
Ale vy jste opravdu mohl nazvat MULT dva plováky, nebo plováky MULT.
Něco takového, tak dlouho, jak to dal nějaký skutečný význam na to, co
tato černá skříňka se chystá udělat.
A opět, v tomto případě, my ne Zdá se, že jakýkoliv význam připojen
se jmény Proměnné jsme předáním,
a tak jsme jen zavolat jim x a y.
Nyní, když jim říkáte něco jinak, to je naprosto v pořádku.
Ve skutečnosti, pokud jste toto prohlášení místo
pomocí čtyřhře místo plováků, pokud si vzpomínáte
že se zdvojnásobí být jiný způsob, jak přesněji
specifikovat reálná čísla nebo s plovoucí desetinnou čárkou proměnných.
To je naprosto v pohodě taky.
Buď jeden z nich by bylo v pořádku.
Ve skutečnosti existuje několik různých kombinací
způsobů, jak deklarovat tuto funkci.
Ale to jsou dvě docela dobří.
Jsme vyhlásil funkci, to je skvělé.
Řekli jsme si, co to kompilátor je to, co budeme dělat.
Nyní pojďme vlastně psát tuto funkci.
Pojďme dát definici, tak, že uvnitř černé skříňky
předvídatelné chování se děje.
Ve skutečnosti jsme se množí dvou skutečných čísla dohromady, nebo přidávání čísel
dohromady, nebo dělat, co to je že jsme se zeptali naši funkci dělat.
>> Takže ve skutečnosti, pojďme se pokusit definovat násobit dvě reálů, které jsme právě
mluvil asi před druhým.
Nyní začátek definice funkce
Vypadá téměř přesně stejné jako deklaraci funkce.
Mám oba tady.
Na vrcholu je deklarace funkce, typ, název, oddělené čárkami argumentace
seznam, středník.
Středník naznačuje, že že je deklarace funkce.
Začátek funkce Definice vypadá téměř přesně
stejný, typ, název, oddělené čárkami seznam argumentů, ne středník,
Otevřete složená závorka.
Otevřená složená závorka, stejně jako jsme dělali s hlavní,
Znamená to, že jsme nyní začínají definovat
co se děje uvnitř černé skříňky, které jsme se rozhodli zavolat Vícenásobek dvě reálů.
Zde je jeden způsob, jak k jeho provedení.
Dalo by se říci, bychom mohli vyhlásit nový proměnná typu float s názvem výrobku
a přiřaďte této proměnné na hodnotu x krát y.
A pak se vrátit výrobek.
Co to znamená návrat sem.
No návrat je způsob, jsme ukazují, že to, jak
jsme absolvování výstup vycouvat.
Takže něco vracet, je stejná jako, to je výstup černé skříňky.
Tak to je, jak to udělat.
Tady je další způsob, jak k jeho provedení.
Mohli bychom se vrátit x-krát y.
x je float.
y je plovák.
Takže x krát y je také float.
Nemáme ani potřeba vytvořte další proměnnou.
Takže to je jiný způsob, jak implementovat přesně stejnou černou skříňku.
>> Nyní se na chvíli, video pozastavit znovu,
a pokusit se definovat přidat dvě celých čísel, což je další funkce, které jsme
mluvil o před chvílí.
Znovu tady, já jsem dal funkci prohlášení, a tak středník,
a otevřený složená závorka a uzavřenou vlnité
výztuha k označení, kde budeme vyplnit v obsahu přidat dvě celých čísel,
tak, že definujeme konkrétní Chování uvnitř černé skříňky.
Takže video pozastavit.
A vzít tolik času, jak budete muset vyzkoušet a definovat
implementace přidání dvou celých čísel, jako je že pokud je funkce, jako výstup, hodnotu,
to dělá, ve skutečnosti, návrat součet dvou vstupů.
Tak jako v předchozím příkladu, existuje několik různých způsobů,
že byste mohli realizovat přidat dvě celých čísel.
Tady je jeden.
Tady v oranžové barvě jsem prostě musel nějaký comments--
Právě jsem přidal některé Komentáře k označení
co se děje na každém řádku kódu.
Tak jsem deklarovat proměnnou volal součet typu int.
Říkám částka rovná A PLUS b.
To je místo, kde jsme skutečně dělá práce přidávání A a B společně.
A já jsem se vrátit částku.
A to dává smysl, protože součet je proměnná typu int.
A co je typ dat, které toto Funkce mi říká, že to bude na výstup?
Int.
Takže jsem se vrátí částku, která je celé číslo variabilní.
A v tom je smysl vzhledem k tomu, co jsme deklarovat a naše funkce
dělat.
>> Nyní můžete také definovat funkce tímto způsobem,
int částka se rovná plus B- přeskočení, že První step-- a pak se vrátit součet.
Nyní můžete mít také implementován to takhle,
což jsem velmi nedoporučuji.
To je špatné pro jeden styl věc a opravdu špatné konstrukci,
ale to dělá, ve skutečnosti práce.
Pokud budete mít tento kód, který je int přidat špatné zmije bodů C, a používat ji.
Je to vlastně dělá přidat dvě celá čísla dohromady.
Je to velmi špatná implementace této konkrétní chování.
Ale to funguje.
Je tu jen pro ilustraci bod, že my opravdu
jedno, co se děje uvnitř černá skříňka, jak dlouho
jak to má výstup, který jsme očekávali.
To je špatně navržen černá skříňka.
Ale na konci dne, to dělá ještě výstup součet plus b.
Dobře.
Takže jsme prohlášen funkce.
A my jsme definované funkce.
Tak to je opravdu dobrý.
Nyní pojďme začít používat funkce že jsme prohlásil, a my jsme definována.
Chcete-li volat function-- je to vlastně hezká easy-- vše, co potřebujete udělat,
je předat ji vhodné argumenty, Argumenty typu dat
že očekává, a pak přiřadit návrat
Hodnota této funkce a tohle-- výmluva me--
přiřazení návratové hodnoty této funkce na něco správného typu.
>> Takže pojďme se podívat na V praxi je v souboru
volal zmije 1 bod c, který Mám v cs50 IDE.
Takže tady je zmije 1 bod c.
Na začátku vidíte, mám My patří, libra patří,
Standardní IO, a cs50 tečka h.
A pak mám funkci prohlášení.
To je místo, kde jsem si říká kompilátoru Jsem
bude zapsáním Funkce tzv přidat dvě celých čísel.
Bude to výstup an integer proměnná typu.
To je to, co tato část je právě zde.
A pak mám dva vstupy na to a b, z nichž každý je celé číslo.
Uvnitř hlavní, žádám uživatele o vstup tím, že říká, dej mi celé číslo.
A oni jsou vyzváni zapomenout int, což je funkce, která
je obsažen v knihovně cs50.
A to je uložena v x, celé číslo variabilní.
>> Pak jsme přiměli je na další číslo.
Dostaneme další číslo a obchod, který v r.
A pak, zde na lince 28, je kde jsme, aby naše volání funkce.
Říkáme, int Z rovná přidejte 2 celých čísel x čárka y.
Vidíte, proč to má smysl?
x je celé číslo typ proměnné a y je celé číslo typ variabilní.
Tak to je dobře.
To smysl s tím, co naše funkce Prohlášení na řádku 17 vypadá.
Čárka seznam oddělený vstup očekává, že dvě celá čísla, a a b.
V takovém případě můžeme zavolat je, co chceme.
Je to prostě očekává dvě celá čísla.
A x je celé číslo a y je celé číslo.
To funguje.
>> A my víme, že funkce se děje na výstup an celá čísla i.
A tak jsme se ukládání Výstup z funkce,
přidat dva celých čísel, v typu integer proměnná, kterou voláte z.
A pak můžeme říci, součet procent i a procento i je i procento.
x, y a z, resp vyplnění těch procentech i je.
Jaká je definice přidat dvě ints vypadat?
Je to docela jednoduché.
Je to jeden z těch jsme právě viděli před druhým,
int částka rovná a b vratnou částku.
To funguje?
Pojďme uložit soubor.
A pak tady na mém terminálu Budu dělat výbavu 1,
a vymažu obrazovku.
Chystám se přiblížit, protože vím, je to trochu obtížné vidět.
>> Tak jsme se sestavit tento program jako zmije 1.
Takže můžeme udělat tečku lomítko zmije 1.
Dej mi celé číslo, 10.
Dej mi ještě číslo, 20.
Součet 10 a 20 je 30.
Tak jsme udělali funkce úspěšné volání.
Můžete spustit funkci znovu, negativní 10, 17 součet záporné 10 a 17, je 7.
Tato funkce pracuje.
To má chování že očekáváme, že ji.
A tak jsme udělali úspěšný funkce, definice, prohlášení,
a funkce úspěšný volání.
Pár různé Body o funkcích
Než jsme došli k závěru této části.
Připomeňme z našeho diskuse o datových typů,
již dříve, že funkce někdy může trvat žádné vstupy.
Pokud tomu tak je, jsme se deklarovat funkce
jak mít seznam void argument.
Vzpomínáš si, co se Nejběžnější funkce
jsme tak daleko, že se viděli seznam void argument?
To je hlavní.
Připomeňme také, že funkci někdy nejsou ve skutečnosti mají výstup.
V tomto případě, my deklarovat funkce jak mít návratový typ void.
Pojďme uzavřít tuto část by řešení problému praxe.
>> Tak tady je ten problém stanoveno.
Chci, abyste napsat funkci volal platný trojúhelník.
Co tato funkce by měla učinit je mít tři reálná čísla
které představují délky tří strany trojúhelníku jako jeho parametry,
nebo její argumenty, nebo jeho inputs-- další sadu synonym
které se mohou vyskytnout.
Tato funkce by měla buď výstup true nebo false
v závislosti na tom, zda tyto tři délky jsou schopni dělat trojúhelník.
Vzpomínáte si na datový typ, který jsme se používá k označení pravdivé nebo nepravdivé?
Nyní, jak se vám realizovat to?
Dobře vědí, že jsou pár pravidel týkajících se trojúhelníky
že jsou skutečně užitečné vědět.
Trojúhelník může mít pouze stranách s pozitivní délky.
To dává smysl.
Jste pravděpodobně říkal, duh.
Další věc, kterou si uvědomit, však je, že součet
délek kteréhokoliv dvě strany trojúhelníku
musí být větší než délka třetí strany.
To je vlastně pravda.
Nemůžete mít trojúhelník stran 1, 2 a 4, například proto, že 1 plus 2
není větší než 4.
Takže to jsou pravidla, která určení, zda je či není tří
vstupy mohou teoreticky tvořit trojúhelník.
Tak se pár minut a deklarovat a definovat
Tato funkce s názvem platné trojúhelník, takže to vlastně
má chování zde uvedenou.
>> To bude výstup true, pokud těchto tří stran jsou schopné obsahující trojúhelník,
a v opačném případě false Ready to vidět, jak jste?
Tady je jedna implementace platných trojúhelníku.
Není to jediná.
Yours mohou mírně lišit.
Ale to člověk dělá, ve skutečnosti, mají chování, které jsme očekávali.
My prohlašujeme, že náš funkce u velmi top, bool platný trojúhelník
float x float y float z.
Takže znovu, tato funkce trvá tři reálná čísla
jako jeho argumenty, plovoucí proměnné bodová hodnota,
a výstupy pravda nebo lež hodnota, která je logická, odvolání.
Takže to je důvod, proč je návratový typ bool.
Pak definujeme funkci.
První věc, kterou děláme, je zkontrolujte, zda že všechny strany jsou pozitivní.
Je-li x je menší než nebo se rovná na 0, nebo v případě, y je rovno 0,
nebo pokud z je menší nebo rovno 0, že nemůže být trojúhelník.
Nemají pozitivní stránky.
A tak se můžeme vrátit false v této situaci.
Dále jsme zkontrolujte, zda že každá dvojice vstupů
je větší než třetí.
>> Takže pokud x a y je méně než nebo rovno z,
nebo-li x a z menší než nebo rovno y,
nebo v případě, y a z je menší než nebo se rovná x, to také nemůže být platný trojúhelník.
Takže se vracíme opět false.
Za předpokladu, že jsme prošli oba kontrol i když, pak se můžeme vrátit pravda.
Protože těchto tří stran jsou schopné returning--
vytvoření platné trojúhelník.
A to je vše.
Nyní jste deklarovány a definován.
A můžete být schopni teď použití a volání této funkce.
Dobrá práce.
Jsem Doug Lloyd.
To je cs50.