DOUG LLOYD: Dobre. Takže teraz poďme vysporiadavať s naozaj veľká téma, funkcia. Doteraz sa v priebehu, všetky programy, ktoré sme boli písanie boli písané vo vnútri hlavnej. Sú to celkom jednoduché programy. Nemusíte mať všetky tieto konáre a všetko deje. Môžeme len vojde všetko vnútri hlavné, a to nedostane hrozne ohromujúci. Ale ako sa kurz pokračuje a ako sa vám začne rozvíjať programy nezávisle na sebe, oni sú pravdepodobne bude začať sa dostať oveľa viac, než 10 alebo 15 riadkov. Tie by mohli získať stovky alebo tisíce alebo desiatky tisíc riadkov kódu. A je to naozaj nie je tá šialená myšlienka. Ako taký, je to asi nie je dobrý nápad aby všetko vnútro main. To môže byť trochu ťažké nájsť to, čo hľadáte, ak to urobíte. Našťastie, aj keď C, a do značnej miery každý druhý programovací jazyk, ktorý by mohlo fungovať s, umožňuje aby sme sa písať funkcie. A ja som jednoducho ísť sa rýchlo stranou tu sa spomenúť, že funkcia je Jednou z oblastí informatiky. A uvidíte mnoho viac z nich v rôzne body po celú dobu kurzu a ak budete pokračovať ďalej. Tam, kde je veľa synonymá pre rovnaké slovo. Takže hovoríme funkcie. Ale môžete počuť aj ich označované ako postupy, alebo postupy, najmä, ak ste niekedy neurobili žiadne objektovo orientované programovanie before-- a nebojte sa Ak máte nie, nie je veľké deal-- ale v audit orientované jazyky sú často volal metódy. Niekedy sa im hovorí podprogramy. Ale oni naozaj všetci sa odvolávajú na rovnakú základnú myšlienke. Poďme sa pozrieť, čo to je nápad. Čo je to funkcia? No funkcia je naozaj nič viac, než čierne skrinky. Čierna skrinka, ktorá má sadu nula alebo viac vstupy a jeden výstup. Tak napríklad tento by mohla byť funkciou. Jedná sa o funkciu s názvom FUNC. A to trvá tri vstupy a, b, c. A v tej čiernej skrinky, my neviem presne, čo to robí, ale spracováva vstupy nejakým spôsobom, a potom sa dáva jeden výstup, v tomto prípade z. Teraz, aby sa to trochu menej abstraktné, my Dalo by sa povedať, že by sme majú funkciu nazvanú Dodávam, že trvá tri vstupy A, B, a c a spracuje výstup v nejakým spôsobom vnútri čiernej skrinky do vyrábať jeden výstup. Takže v tomto prípade, ak je pridá sa 3, 6 a 7. Niekde vo vnútri pridať funkcie, by sme očakávať, že budú spočítané produkovať výstup, ktorý je 3 plus 6 plus 7 alebo 16. Rovnako tak, budete mať funkciu nazvanú mult, že vezme dva vstupy, A a B, spracováva je nejakým spôsobom takom že výstup funkcie je produkt dvoch vstupov. Tieto dva vstupy násobí. 4 a 5 boli prenesené do mult, sa niečo stane, výstup očakávame je 20. Prečo hovoríme, že čierna skrinka? No, ak nie sme napísal svojho funkcie sami, čo sme urobili celkom dosť tak ďaleko CS50. Videli sme tlačovú f, napríklad, ktoré je funkcia, ktorá sme nepísal sami, ale my používať po celú dobu. Ak nie sme písať funkcie sami, nemáme naozaj potreba vedieť, ako je to skutočne realizovaný pod kapotou. Tak napríklad čierna skrinka I Len vám ukázal pre násobenie, mult a, b môžu byť defined-- a to je len niektoré pseudocode-- môže byť definovaná ako výstup A krát b. To zmysel, že jo. Ak máme funkciu nazvanú mult, že vezme dva vstupy. Očakávali by sme, že výstup by byť dva vstupy násobí, časov b. Ale môže byť tiež mult implementovaný ako je tento, máme proti premennú pozor vnútri mult 0. A potom sme tento proces opakovať b časy pridať do pultu. Napríklad, ak budeme násobiť 3a 5b, mohli by sme povedať nastaviť počítadlo na 0, opakujte päťkrát, pridajte 3 do pultu. Takže začneme na 0 a potom robíme tento päťkrát 3, 6, 9, 12, 15. Je to rovnaký výsledok. My ešte dostať 3 krát 5 len implementácie je iný. To je to, čo máme na mysli keď hovoríme čiernej krabici. To len znamená, že nemáme naozaj starostlivosti ako je implementované pod kapotou tak dlho, kým je výstupný, je to, čo očakávame. V skutočnosti, že je súčasťou zmluvy použitie funkcií, najmä funkcie, ktoré iní píšu. Správanie je vždy pre ktoré sú typické, nepredvídateľný založené na názov funkcie. A to je dôvod, prečo je to naozaj dôležité, keď píšete funkcií alebo keď iní ľudia napísať funkcie, ktoré môžete použiť, že tieto funkcie majú jasné, pomerne zjavné mená, a sú dobre zdokumentované. Čo je určite prípad pre funkciu tlače, ako je f. Tak prečo používať funkcie? No, ako som povedal predtým, ak budeme písať všetky naše kódu vnútri hlavných vecí, môže dostať naozaj ťažkopádne a naozaj zložité. Funkcie nám umožňujú schopnosť zorganizovať veci a rozbiť veľmi komplikovaný problém do oveľa viac zvládnuteľné sub náhradné diely. Funkcia nám tiež umožňujú zjednodušiť proces kódovania. Je to oveľa jednoduchšie ladenie 10 Riadok Funkcia versus 100 riadok Funkcie alebo funkciu 1000 online. Ak máme len ladiť malé kúsky naraz, alebo napísať malé kúsky v tej dobe, to robí, že skúsenosti s programovaním oveľa lepšie. Ver mi, že jeden. A napokon, ak budeme písať funkcie sme je možné znovu použiť tieto jednotlivé diely. Funkcie môžu byť recyklované. Môžu byť použité v jeden program alebo iný. Už ste napísal Funkcie, všetko, čo musíte urobiť, je povedať, že program, kde nájsť túto funkciu. Boli sme recyklácie a využívanie tlačiť f viac ako 40 rokov. Ale to bol len napísaný raz. Celkom užitočné, vpravo. Dobre. Takže funkcie sú skvelé. Vieme, že. Teraz začnime ne písať. Poďme začať sa je do našich programov. Aby k tomu, že prvé vec, ktorú robíme, je deklarovať funkcie. Keď deklarujete funkciu čo ste v podstate robíte hovorí kompilátora, hej, len aby ste vedeli, Budem písať funkcia neskôr a tu je to, čo to bude vyzerať. Dôvodom pre to je, pretože kompilátory môže ak robiť nejaké divné veci oni vidia sadu symbolov že nie ste oboznámení s. Takže sme jednoducho dať compiler heads up, som vytvoriť funkciu a bude to, ako to urobiť. Funkčné vyhlásenie všeobecne pokiaľ ste organizovanie kódu spôsobom, že ostatní budú môcť porozumieť a využiť, všeobecne chcete dať všetky vaše deklarácie funkcie na samom vrchole vášho kódu, vpravo predtým, než začnete písať hlavné i. A pohodlne, je tu veľmi štandardný formulár že každá funkcia vyhlásení nasleduje. Všetci skoro vyzerať takto. K dispozícii sú tri časti do funkcie vyhlásenie, návratový typ, názov, a argument, zoznam. Teraz je návratový typ je, aký druh variabilná funkcia bude výstup. Tak napríklad, keď si myslíme, že dozadu Pred minútu násobný dva Čísla funkcie, čo očakávame, pokiaľ vynásobíme celé číslo od integer bude výstup Pravdepodobne celé číslo, nie. Násobí dve celé čísla dohromady, dostanete číslo. Takže návratový typ, ktorý funkcie by bolo int. Meno je to, čo chcete, zavoláte funkciu. To je pravdepodobne najmenej dôležité Súčasťou deklarácie funkcie, z hľadiska funkčnosti. Ale v skutočnosti je pravdepodobne jedným z najdôležitejších častí vyhlásenie funkcie, pokiaľ ide vedieť, čo vlastne funkcie robí. Ak názov vašej funkcie f alebo g alebo h alebo tajomstvo alebo niečo také, ste pravdepodobne dostanú trochu zakopol hore snažia spomenúť, čo tie funkcie robiť. Takže je dôležité, aby vaše zmysluplné názvy funkciou je. Napokon, zoznam argumentov čiarka oddelený zoznam zo všetkých vstupov do vašej funkcie, z ktorých každý má typ a meno. Takže nielen že máte špecifikovať, aký typ premennej bude funkcia výstup, Chcete tiež zadať aký typ a typy premenných funkcia bude prijímať ako vstupy. Takže poďme urobiť príklad tu. Poďme stačí sa pozrieť na konkrétnejšie jeden. Tak tu je príklad funkcie vyhlásenie o funkciu, ktorá Dodávam dve celé čísla dohromady. Súčet dvoch celých čísel sa chystá byť celé, rovnako, ako sme práve prerokovať. A tak návratový typ, tu v zelenej, by int. To nám, že pridanie dvoch celých čísel len povie bude, na konci dňa, výstup, alebo vypľuť späť k nám, celé číslo. Vzhľadom k tomu, čo táto funkcia robí my chcú dať mu zmysluplný názov. Pridajte dve celých čísel sa zdá je to vhodné, vzhľadom k vezmeme dve celé čísla ako vstupy a dúfajme, že je súčtom. To by mohlo byť trochu ťažkopádny meno a úprimne povedané, táto funkcia pravdepodobne nie je nevyhnutná pretože máme pridania operátor, ak si spomínate z nášho diskusia operátorov, skôr. Ale povedzme, že k záujmu Argument, že táto funkcia je užitočná a tak budeme hovoriť to pridať dve celých čísel. A konečne, táto funkcia trvá dva vstupy. Z ktorých každý je celé číslo. Takže máme tento čiarka oddelený zoznam vstupov. Teraz sme sa všeobecne chceme pomenovať každého z nich tak, aby mohli byť používané v rámci funkcie. Mená nie sú strašne dôležité. V tomto prípade sme sa nemusí nutne majú nejaký zmysel s nimi spojené. Takže môžeme len zavolať im a a b. To je úplne v poriadku. Ak však zistíte, ocitnete v situácii, kde názvy premenných v skutočnosti môže byť dôležité, možno budete chcieť volať niečo iné ako a a b dať im niečo viac symbolicky zmysel. Ale v tomto prípade, my naozaj vedieť niečo iné o funkciu. Chceme len pridať dve celé čísla. Tak jednoducho budeme nazývať tí, celé čísla a a b. To je jeden príklad. Prečo si vziať druhú premýšľať o tomhle, ako by ste napísať funkciu vyhlásenie o funkciu, ktorá násobí dvoma plávajúcou desatinnou čiarkou? Spomínate si, čo je to číslo s plávajúcou čiarkou je? Aká by táto funkcia Vyhlásenie vyzerať? Vlastne som Odporúčam vám video pozastaviť tu a vziať koľko času budete potrebovať. Premýšľajte o tom, čo to deklarácia funkcie by bola? Čo by návratový typ byť? Čo by zmysluplné meno byť? Čo by vstupy byť? Tak prečo si pozastaviť video tu a písať-up deklarácii funkcie pre funkciu, ktorá by sa násobí dve plávajúce čiarkou čísla dohromady. Dúfajme, že ste pozastavili video. Takže poďme sa pozrieť na príklad z jedného z možných vyhlásení. Float MULT dva reals float x, float y. Produkt z dvoch plávajúcou desatinnou čiarkou, ktoré sú pripomenúť, ako sme sa predstavujú reálne čísla alebo čísla s desatinnými hodnotami v C, bude plávajúce číslo bodu. Keď násobiť desatinné desatinnú, budete pravdepodobne získať desatinné miesto. Ak chcete dať mu príslušný názov. Vynásobte dve reálov zdá byť v poriadku. Ale vy ste naozaj mohol nazvať MULT dva plaváky, alebo plaváky MULT. Niečo také, tak dlho, ako to dal nejaký skutočný význam na to, čo táto čierna skrinka sa chystá urobiť. A opäť, v tomto prípade, my nie Zdá sa, že akýkoľvek význam pripojený s menami Premenné sme odovzdaním, a tak sme len zavolať im x a y. Teraz, keď im hovoríte niečo inak, to je úplne v poriadku. V skutočnosti, ak ste toto vyhlásenie miesto pomocou štvorhre miesto plavákov, ak si spomínate že sa zdvojnásobí byť iný spôsob, ako presnejšie špecifikovať reálne čísla alebo s plávajúcou desatinnou čiarkou premenných. To je úplne v pohode taky. Buď jeden z nich by bolo v poriadku. V skutočnosti existuje niekoľko rôznych kombinácií spôsobov, ako deklarovať túto funkciu. Ale to sú dve celkom dobrí. Sme vyhlásil funkciu, to je skvelé. Povedali sme si, čo to kompilátor je to, čo budeme robiť. Teraz poďme vlastne písať túto funkciu. Poďme dať definíciu, tak, že vo vnútri čiernej skrinky predvídateľné správanie sa deje. V skutočnosti sme sa množia dvoch skutočných čísla dohromady, alebo pridávanie čísel dohromady, alebo robiť, čo to je že sme sa opýtali našu funkciu robiť. Takže v skutočnosti, poďme sa pokúsiť definovať násobiť dve reálov, ktoré sme práve hovoril asi pred druhým. Teraz začiatok definícia funkcie Vyzerá takmer presne rovnaké ako deklaráciu funkcie. Mám oba tu. Na vrchole je deklarácia funkcie, typ, názov, oddelené čiarkami argumentácia zoznam, bodkočiarka. Bodkočiarka naznačuje, že že je deklarácia funkcie. Začiatok funkcie Definícia vyzerá takmer presne rovnaký, typ, názov, oddelené čiarkami zoznam argumentov, nie bodkočiarka, Otvorte zložená zátvorka. Otvorená zložená zátvorka, rovnako ako sme robili s hlavnou, Znamená to, že sme teraz začínajú definovať čo sa deje vo vnútri čiernej skrinky, ktoré sme sa rozhodli zavolať viacnásobok dve reálov. Tu je jeden spôsob, ako na jeho vykonanie. Dalo by sa povedať, by sme mohli vyhlásiť nový premenná typu float s názvom výrobku a priraďte tejto premennej na hodnotu x krát y. A potom sa vrátiť výrobok. Čo to znamená návrat sem. No návrat je spôsob, sme ukazujú, že to, ako sme absolvovaní výstup vycúvať. Takže niečo vracať, je rovnaká ako, to je výstup čiernej skrinky. Tak to je, ako to urobiť. Tu je ďalší spôsob, ako na jeho vykonanie. Mohli by sme sa vrátiť x-krát y. x je float. y je plavák. Takže x krát y je tiež float. Nemáme ani potreba vytvorte ďalšie premennú. Takže to je iný spôsob, ako implementovať presne rovnakú čiernu skrinku. Teraz sa na chvíľu, video pozastaviť znovu, a pokúsiť sa definovať pridať dve celých čísel, čo je ďalšie funkcie, ktoré sme hovoril o pred chvíľou. Znovu tu, ja som dal funkciu vyhlásenia, a tak bodkočiarka, a otvorený zložená zátvorka a uzavretú vlnité výstuha na označenie, kde budeme vyplniť v obsahu pridať dve celých čísel, tak, že definujeme konkrétne Správanie vnútri čiernej skrinky. Takže video pozastaviť. A vziať toľko času, ako budete musieť vyskúšať a definovať implementácia pridanie dvoch celých čísel, ako je že ak je funkcia, ako výstup, hodnotu, to robí, v skutočnosti, návrat súčet dvoch vstupov. Tak ako v predchádzajúcom príklade, existuje niekoľko rôznych spôsobov, že by ste mohli realizovať pridať dve celých čísel. Tu je jeden. Tu v oranžovej farbe som jednoducho musel nejaký comments-- Práve som pridal niektoré Komentáre k označenie čo sa deje na každom riadku kódu. Tak som deklarovať premennú volal súčet typu int. Hovorím suma rovná A PLUS b. To je miesto, kde sme skutočne robí práce pridávanie A a B spoločne. A ja som sa vrátiť sumu. A to dáva zmysel, pretože súčet je premenná typu int. A čo je typ dát, ktoré toto Funkcia mi hovorí, že to bude na výstup? Int. Takže som sa vráti čiastku, ktorá je celé číslo variabilný. A v tom je zmysel vzhľadom na to, čo sme deklarovať a naše funkcie robiť. Teraz môžete tiež definovať funkcie týmto spôsobom, int suma sa rovná plus B- preskočenie, že Prvý step-- a potom sa vrátiť súčet. Teraz môžete mať tiež implementovaný to takto, čo som veľmi neodporúčam. To je zlé pre jeden štýl vec a naozaj zlé konštrukciu, ale to robí, v skutočnosti práce. Ak budete mať tento kód, ktorý je int pridať zlé zmije bodov C, a používať ju. Je to vlastne robí pridať dve celé čísla dohromady. Je to veľmi zlá implementácia tejto konkrétnej správanie. Ale to funguje. Je tu len pre ilustráciu bod, že my naozaj jedno, čo sa deje vo vnútri čierna skrinka, ako dlho ako to má výstup, ktorý sme očakávali. To je zle navrhnutý čierna skrinka. Ale na konci dňa, to robí ešte výstup súčet plus b. Dobre. Takže sme vyhlásený funkcie. A my sme definované funkcie. Tak to je naozaj dobrý. Teraz poďme začať používať funkcie že sme vyhlásil, a my sme definovaná. Ak chcete volať function-- je to vlastne pekná easy-- všetko, čo potrebujete urobiť, je odovzdať ju vhodné argumenty, Argumenty typu dát že očakáva, a potom priradiť návrat Hodnota tejto funkcie a tohle-- výhovorka me-- priradenie návratovej hodnoty tejto funkcie na niečo správneho typu. Takže poďme sa pozrieť na V praxi je v súbore volal zmije 1 bod c, ktorý Mám v CS50 IDE. Takže tu je zmije 1 bod c. Na začiatku vidíte, mám My patrí, libra patrí, Štandardné IO, a CS50 bodka h. A potom mám funkciu vyhlásení. To je miesto, kde som si hovorí kompilátora Som bude zapísaním Funkcia tzv pridať dve celých čísel. Bude to výstup an integer premenná typu. To je to, čo táto časť je práve tu. A potom mám dva vstupy na to a b, z ktorých každý je celé číslo. Vnútri hlavné, žiadam užívateľa o vstup tým, že hovorí, daj mi celé číslo. A oni sú vyzvaní zabudnúť int, čo je funkcia, ktorá je obsiahnutý v knižnici CS50. A to je uložená v x, celé číslo variabilný. Potom sme prinútili ich na ďalšie číslo. Dostaneme ďalšie číslo a obchod, ktorý v r. A potom, tu na linke 28, je kde sme, aby naše volanie funkcie. Hovoríme, int Z rovná pridajte 2 celých čísel x čiarka y. Vidíte, prečo to má zmysel? x je celé číslo typ premennej a y je celé číslo typ variabilný. Tak to je dobre. To zmysel s tým, čo naše funkcie Vyhlásenie na riadku 17 vyzerá. Čiarka zoznam oddelený vstup očakáva, že dve celé čísla, a a b. V takom prípade môžeme zavolať je, čo chceme. Je to jednoducho očakáva dve celé čísla. A x je celé číslo a y je celé číslo. To funguje. A my vieme, že funkcie sa deje na výstup an celé čísla i. A tak sme sa ukladanie Výstup z funkcie, pridať dva celých čísel, v typu integer premenná, ktorú voláte z. A potom môžeme povedať, súčet percent i a percento aj je aj percento. x, y a z, resp vyplnenie tých percentách aj je. Aká je definícia pridať dve ints vyzerať? Je to celkom jednoduché. Je to jeden z tých sme práve videli pred druhým, int suma rovná a b vratnú sumu. To funguje? Poďme uložiť súbor. A potom tu na mojom termináli Budem robiť výbavu 1, a vymažem obrazovku. Chystám sa priblížiť, pretože viem, je to trochu ťažké vidieť. Tak sme sa zostaviť tento program ako zmija 1. Takže môžeme urobiť bodku lomítko zmije 1. Daj mi celé číslo, 10. Daj mi ešte číslo, 20. Súčet 10 a 20 je 30. Tak sme urobili funkcie úspešné volania. Môžete spustiť funkciu znova, negatívny 10, 17 súčet záporné 10 a 17, je 7. Táto funkcia pracuje. To má správanie že očakávame, že ju. A tak sme urobili úspešný funkcie, definície, vyhlásenie, a funkcie úspešný volania. Pár rôzne Body o funkciách Než sme došli k záveru tejto časti. Pripomeňme z nášho diskusia o dátových typov, už skôr, že funkcia niekedy môže trvať žiadne vstupy. Ak tomu tak je, sme sa deklarovať funkcie ako mať zoznam void argument. Spomínaš si, čo sa Najbežnejšie funkcie sme tak ďaleko, že sa videli zoznam void argument? To je hlavné. Pripomeňme tiež, že funkciu niekedy nie sú v skutočnosti majú výstup. V tomto prípade, my deklarovať funkcie ako mať návratový typ void. Poďme uzavrieť túto časť by riešenie problému praxe. Tak tu je ten problém stanovené. Chcem, aby ste napísať funkciu volal platný trojuholník. Čo táto funkcia by mala urobiť je mať tri reálne čísla ktoré predstavujú dĺžky troch strany trojuholníka ako jeho parametre, alebo jej argumenty, alebo jeho inputs-- ďalšiu sadu synoným ktoré sa môžu vyskytnúť. Táto funkcia by mala buď výstup true alebo false v závislosti na tom, či tieto tri dĺžky sú schopní robiť trojuholník. Spomínate si na dátový typ, ktorý sme sa používa na označenie pravdivé alebo nepravdivé? Teraz, ako sa vám realizovať to? Dobre vedia, že sú pár pravidiel týkajúcich sa trojuholníky že sú skutočne užitočné vedieť. Trojuholník môže mať iba stranách s pozitívne dĺžky. To dáva zmysel. Ste pravdepodobne hovoril, duh. Ďalšia vec, ktorú si uvedomiť, však je, že súčet dĺžok ktoréhokoľvek dve strany trojuholníka musí byť väčšia ako dĺžka tretej strany. To je vlastne pravda. Nemôžete mať trojuholník strán 1, 2 a 4, napríklad preto, že 1 plus 2 nie je väčší ako 4. Takže to sú pravidlá, ktoré určenie, či je alebo nie je troch vstupy môžu teoreticky tvoriť trojuholník. Tak sa pár minút a deklarovať a definovať Táto funkcia s názvom platné trojuholník, takže to vlastne má správanie tu uvedenou. To bude výstup true, ak týchto troch strán sú schopné obsahujúce trojuholník, a v opačnom prípade false Ready to vidieť, ako ste? Tu je jedna implementácia platných trojuholníka. Nie je to jediná. Yours môžu mierne líšiť. Ale to človek robí, v skutočnosti, majú správanie, ktoré sme očakávali. My prehlasujeme, že náš funkcie u veľmi top, bool platný trojuholník float x float y float z. Takže znova, táto funkcia trvá tri reálne čísla ako jeho argumenty, plávajúce premenné bodová hodnota, a výstupy pravda alebo lož hodnota, ktorá je logická, odvolanie. Takže to je dôvod, prečo je návratový typ bool. Potom definujeme funkciu. Prvá vec, ktorú robíme, je skontrolujte, či že všetky strany sú pozitívne. Ak je x je menšia než alebo sa rovná na 0, alebo v prípade, y je rovné 0, alebo ak z je menšie alebo rovné 0, že nemôže byť trojuholník. Nemajú pozitívne stránky. A tak sa môžeme vrátiť false v tejto situácii. Ďalej sme skontrolujte, či že každá dvojica vstupov je väčší ako tretí. Takže ak x a y je menej alebo rovné z, alebo ak x a z menšej alebo rovné y, alebo v prípade, y a z je menšie ako alebo sa rovná x, to tiež nemôže byť platný trojuholník. Takže sa vraciame opäť false. Za predpokladu, že sme prešli obaja kontrol aj keď, potom sa môžeme vrátiť pravda. Pretože týchto troch strán sú schopné returning-- vytvorenie platné trojuholník. A to je všetko. Teraz ste deklarované a definovaný. A môžete byť schopní teraz použitie a volanie tejto funkcie. Dobrá práca. Som Doug Lloyd. To je CS50.