Даг Ллоид: У реду. Дакле, хајде сада да се позабави Заиста велика тема, функције. До сада у током, сви Програми које смо написали су написани унутар главни. Они су прилично једноставне програме. Не морате да имате све ово гране и ствари дешава. Можемо само да све стане унутар главни и не добија ужасно огромна. Али, као што је курс иде даље и као што почињу да се развијају програме независно, они вероватно ће да почну да добијају пуно више од 10 или 15 линија. Можда ћете добити стотине или хиљаде или десетине хиљада линија кода. И то заиста није толико луд мисао. Као такав, он вероватно није добра идеја да све унутар главни задржи. То може бити мало тешко наћи оно што тражите ако то. Срећом, иако Ц, и прилично сваки други програмски језик који Можда раде, омогућава да пишемо функције. И само ћу Вођена страну овде напоменути да је функција је једна област информатике. И видећете много више од њих различите тачке широм курса и ако наставите даље. Тамо где је много синоними за исту реч. Тако зовемо функције. Али такође може их чути назива процедура, или метода, нарочито, ако сте икада врши било какав предмет оријентисано програмирање пре-- и не брини Ако нисте, не велики деал-- али у ревизије оријентисани језици су често називају методе. Понекад се зову подпрограме. Али стварно све односе на истом основном идејом. Хајде да видимо шта је та идеја је. Шта је функција? Па функција је заиста ништа више него црне кутије. Црна кутија која има низ нула или више улаза и један излаз. Тако на пример, ова може бити функција. Ово је функција зове фунц. И што је потребно три улаза А, Б, и Ц. И у тој црној кутији, ми Не знам тачно шта ради, али обрађује улаза на неки начин и онда даје један излаз, у овом случају, з. Сада да то буде мало мање апстрактна, ми Могло би се рећи да је можда ћемо имају функцију која се зове додају да узима три улаза А, Б, и ц и обрађује излаз на неки начин у црној кутији на произвести један излаз. Дакле, у овом случају, ако адд узима 3, 6 и 7. Негде унутар додати функцију, да би очекујем да се сабирају да произведе излаз, који је 3 плус 6 плус 7 или 16. Слично томе, имате функцију која се зове Мулт да има два улаза, А и Б, обрађује их на неки начин таквој да је излаз функције је производ два улаза. Два улаза множи заједно. 4 и 5 се доносе у мулт, нешто деси, излаз очекујемо је 20. Зашто ми то зовемо црна кутија? Па ако се не писање Функционише себе, што урадили смо доста до сада ЦС50. Смо видели принт ф, на пример, који је функција да нисмо писати сами, али ми не користимо све време. Ако се не пишу функције себи, не стварно треба да знате како је то заправо спроводи испод хаубе. Тако, на пример, кутија и Црна само вам показао за умножавање, мулт а, б може бити дефинед-- а ово је само неки псеудоцоде-- може бити дефинисан као излаз Тајмс б. То има смисла, зар не. Ако имамо функцију која се зове Мулт да траје два улаза. Ми би се очекивати да би излаз Будите два улаза множе заједно, Тајмс б. Међутим мулт такође може да реализује овако, имамо контра променљиву се сет унутар мулт до 0. И онда поновите овај процес Б пута додајте на шалтер. На пример, ако помножите 3а од 5б, можемо рећи поставити бројач на 0, Поновите пет пута, додајте 3 на шалтер. Тако смо се крећу од 0, а онда радимо ово пет пута 3, 6, 9, 12, 15. То је исти резултат. Ми ипак добити 3 пута 5 само имплементација је другачија. То је оно што подразумевамо када кажемо црну кутију. То само значи да стварно не занима како се то спроводи под хаубом све док је излаз је оно што ми очекујемо. У ствари, то је део уговора коришћења функција, посебно функције које други пишу. Понашање увек иде да буде типична, непредвидив на основу назива функције. И зато је стварно важно када пишете функције или када други људи пишу функције које можете користити, да су те функције имају јасне, релативно очигледне имена, и добро су документовани. Који је свакако случај за функцију као што је штампање ф. Па зашто ми користимо функције? Па као што сам рекао раније, ако пишемо све наше кода унутар главних ствари можете добити стварно гломазна и заиста компликовано. Функције нам омогућавају способност организовати ствари и разбити веома компликован проблем у много лакше управљивих суб делови. Функције такође нам дозволити да поједноставио процес кодирања. То је много лакше да дебуг а 10 линија функција у односу на 100 линија функција или функција 1,000 линија. Ако имамо само да дебуг мале комада одједном, или напиши мале комаде на време, чини да је програмирање искуство много боље. Веруј ми на томе. На крају, ако пишемо функције смо могу поново користити те различите делове. Функције може да се рециклира. Могу се користити у један програм или други. Већ сте написали функција, све што треба да урадите је да кажем тај програм где да нађем ту функцију. Ми смо рециклажу и коришћење принт Ф за више од 40 година. Али то је написано само једном. Прилично корисно, зар не. У реду. Дакле, функције су супер. Знамо да. Сада почнимо да их пишем. Почнимо се их у нашим програмима. Да би се то, први што ми радимо је прогласи функцију. Када одредите функцију шта радиш у основи говори преводилац, Хеј, само да знаш, Ја ћу писати функција касније и ево шта ће то изгледати. Разлог за ово је јер компајлери могу раде неке чудне ствари, ако виде скуп симбола да нису упознати са. Дакле, ми само дати компајлер А главе горе, ја стварање функцију и да ће то учинити. Функција декларације генерално ако ви организује свој код на неки начин да ће други бити у стању да разумеју и користе, ви генерално желите да поставите све ваших декларација функције на самом врху вашег кода, зар не пре него што почнете да пишете главни чак. И удобно, ту је веома стандардни образац да сваки декларација функције следи. Сви су прилично изгледа овако. Постоје три дела на функцију декларација, повратни тип, назив, и аргумент листа. Сада је повратни тип је какав променљива функција ће излаз. Тако на пример, ако смо уназад мислим малопре до множи два Функција бројеве, шта очекујемо да помножимо цео број од интегер излаз ће бити Вероватно цео број, тако је. Помножи два цела броја заједно, добијате цео број. Тако врсте које повратка функција ће бити Инт. Име је оно што желите да позовете функцију. Ово је вероватно најмање важно дио декларације функције, по питању функционалности. Али је заправо вероватно један од најважнијих делова декларације функције у смислу зна шта је функција заправо ради. Ако име ваше функције ф или г или х или мистерија или нешто слично, вероватно ћеш добити мало саплео се покушава да се сетим шта те функције раде. Зато је важно да ваше асоцијативна имена функције. На крају, Аргумент листа је листа одвојене зарезом свих улаза у своју функцију, од којих сваки има тип и име. Дакле, не само да морате да назначи који тип променљиве функција ће излаз, такође желите да прецизира Који тип и врсте варијабли функција ће бити прихватање као улаза. Па хајде да урадимо пример овде. Хајде да погледамо на конкретније један. Дакле, овде је пример функције декларација за функцију коју би додали два броја заједно. Збир два броја ће се бити цео број, као, као што смо управо разговарали. И тако је повратни тип, овде у зелено, било би Инт. Нас да додате две интс То само говори ће, на крају дана, излаз, или га пљуне назад да нам, цео број. С обзиром на оно што ова функција ради смо Желим да му дати смислено име. Додајте две интс изгледа одговарајуће, с обзиром на водимо два цела броја као улаза и надам се да их сабирањем. То може бити помало гломазна Име и искрено ова функција вероватно није неопходан јер имамо додатак оператер, ако се сећате из наше дискусија оператера, раније. Али рецимо за добробит Аргумент да је ова функција корисна па ћемо назвати додати два Интс. На крају, ова функција узима два улаза. Од којих је сваки цео број. Дакле, ми имамо ову зарез одвојена листа улаза. Сада смо углавном желе да дати име сваком од њих тако да се могу користити у оквиру функције. Имена нису важна страшно. У том случају, нећемо нужно има икакво значење везан њима. Дакле, можемо да их зову и б. То је потпуно у реду. Ако, међутим, пронађете сами у ситуацији где су имена варијабли би могла бити важна, можда ћете желети да их зовем нешто друго него и б да им дам нешто више симболично смисла. Али у овом случају, не морамо баш знам ништа више о функцији. Ми само желимо да додам два броја. Дакле, само ћемо звати они целих бројева а и б. То је један пример. Зашто не узмете други да размишљају о овоме, како би сте написали функцију декларација за функцију коју умножава два флоатинг поинт бројеве? Да ли се сећате шта је флоатинг поинт број? Шта би ова функција Декларација изгледати? Заправо Препоручујемо вам да паузирате видео овде и да колико времена вам је потребно. Размислите шта ово Функција декларација би била? Шта би повратни тип да буде? Шта би смислено име бити? Шта би улаза бити? Па зашто не паузирати видео овде и написати-декларацију функције за функцију која би умножава два плутајући броја заједно тачака. Надам се да застаде видео. Дакле, хајде да погледамо пример једног могућег декларације. Флоат мулт два реалс флоат к, флоат и. Производ два флоатинг поинт бројеве, који се сетим се како смо представљају праве бројеве или бројеви са децималне вредности у ц, ће бити флоатинг поинт број. Када помножите децимале од децимале, вероватно ћеш добити децимала. Желиш да му дати релевантан име. Помножите два Реалс изгледа добро. Али стварно могли назвати мулт два сплавова, или мулт плута. Све тако, докле год дали неко стварно значење ономе ово црна кутија ће да уради. И опет, у овом случају, не знамо Изгледа да има неки смисао у прилогу да имена варијабле ми пролазе у, па смо их зовемо к и и. Сада, ако их ви зовете нешто друго, то је потпуно у реду. У ствари, ако јесте Ова изјава уместо користећи дублу уместо од плута, ако се сећате да двојници су другачији начин да се прецизније навести реалне бројеве или флоатинг поинт променљиве. То је потпуно у реду превише. Или један од оних ће бити у реду. У ствари, постоји неколико различите комбинације начина да прогласи ову функцију. Али ово су два веома добри. Ми смо прогласили функцију, то је сјајно. Ми смо рекли шта је то преводилац је, шта ћемо да радимо. Сада ћемо заправо пишем ту функцију. Да му дати дефиницију, тако да у црној кутији предвидиво понашање се дешава. У ствари, ми смо множењем два реална Бројеви заједно, или додавањем бројева заједно, или ради шта год да је да смо ми тражили нашу функцију везе. Дакле, у ствари, хајде да пробамо и дефинисати помножити два Реалс које смо говорио о пре другог. Сада почетак дефиниција функција изгледа готово потпуно исто као декларација функције. Имам обоје овде. На врху је декларација функција, Тип, име, одвојене зарезом Аргумент Листа, зарез. И запета указује да да је декларација функције. Почетак функције дефиниција изгледа готово потпуно исто, тип, име, одвојене зарезом Аргумент листа, не зарез, отвори коврџаву браце. Отворени коврџава заграда, као ми смо радили са главном, значи да смо сада почињу да се дефинишу шта се дешава унутар црну кутију која одлучили смо да позове мулт два Реалс. Овде је један начин да се то спроведе. Могли бисмо рећи, могли прогласити нови променљива типа флоат назива производа и доделите ту променљиву на вредност к пута и. А онда се врати производ. Шта значи повратак овде. Па повратак је начин ми указују на то да је начин Пролазимо излаз одустати. Дакле ретурн нешто, је исти као, ово је излаз из црне кутије. Дакле, тако се то ради. Ево још један начин да се спроведе. Могли бисмо се вратити к пута год. к је флоат. и флоат. Дакле, к пута пре је такође флоат. Ми чак не морају да створити још једну променљиву. Дакле, то је другачији начин имплементирати потпуно исту црну кутију. Сада се на тренутак, Поново паузирање видео, и покушати да дефинишемо додати две интс, што је друга функција која смо говорио о малопре. Опет овде, ја сам ставио функцију декларација, и тако зарез, и отворен коврџава заграда а затворена коврџава Браце да укаже где ћемо попунити у садржају додати два интс, тако да смо дефинисали посебно Понашање у црној кутији. Дакле, паузирање видео. И узми што више времена морате да пробате и дефинисање имплементација додати два интс, што да када је функција излаза вредност, има, у ствари, повратак збир два улаза. Дакле, баш као у претходном примеру, постоји неколико различитих начина да бисте могли да спроведу додати два Интс. Ево једног. У овде у наранџастом имам Управо сам имао неке цомментс-- Управо сам додао неке коментари да укаже шта се дешава на свакој линији кода. Тако сам прогласити променљиву зове збир типа инт. Кажем сума једнако ПЛУС Б. То је место где смо заправо радимо рад додајући А и Б заједно. И вратити суму. И то има смисла јер Збир је променљива типа инт. А шта је податак да је овај тип Функција ми говори да ће излаз? Инт. Тако Враћам суму, која је цео број варијабла. И то има смисла с обзиром на оно што сам проглашена и дефинисана нашу функцију радити. Сада можете дефинисати функција на овај начин, Инт сума једнака плус б-- прескочити Први степ-- а онда се врати износ. Сада можете имати реализује овако, који сам високо не препоручују. То је лоше за један стил ствар и заиста лош дизајн, али не, у ствари, рад. Ако узмете овај код, који је Инт адд лошу гуја дот ц, и да га користите. То је заправо додати два цела броја заједно. То је врло лоша имплементација овог конкретног понашања. Али то не ради. То је само ту да илуструјем поента да ми не стварно занима ме шта се дешава унутар Тхе Блацк Бок, док јер има излаз да очекујемо. Ово је лоше дизајниран црна кутија. Али на крају дана, зар не још увек излаз збир од плус б. У реду. Тако смо прогласили функције. И ми смо дефинисане функције. Дакле, то је стварно добро. Сада ћемо почети да користите функције да смо прогласили и ми смо дефинисани. Да бисте позвали фунцтион-- То је уствари прилично лако, све што треба да урадите је пасс то одговарајуће аргументе, аргументи типа података да очекује и онда доделити повратак Вредност те функције и ово-- изговор мене-- доделите повратну вредност те функције нешто исправног типа. Дакле, хајде да погледамо ово пракса у датотеци зове гуја 1 тачка Ц, који Имам у ЦС50 ИДЕ. Дакле, овде је гуја 1 тачка Ц. На почетку видиш да имам мој укључује, фунта укључују, Стандардни ИО, и ЦС50 тачка х. А онда имам изјаву функцију. Ово је место где сам говори компајлер досадно ће бити писање функција названа додати два Интс. То ће излаз и цео тип променљиве. То је оно што овај део је овде. И онда имам два улаза на њега а и б, од којих је цео број. Унутар главног, питам корисника за улаз говорећи, ми цео број. И они ће бити затражено да заборавим инт, што је функција која је укључен у ЦС50 библиотеци. И да се складишти у к, цео број варијабилна. Онда смо их затражити још један цео број. Ми смо добили још један цео број и чувајте је у и. А онда, овде на линији 28, је где правимо нашу функцију позив. Ми кажемо, инт з једнаки додати 2 интс х зарез и. Да ли видите зашто ово има смисла? к је цео број типа променљива и и је цео број типа променљива. Дакле, то је добро. То има смисла са којим наша функција Декларација он лине 17 изгледа. Запета одвојен улаз листа очекује два броја, а и б. У том случају, можемо назвати им шта год хоћемо. Само очекује два броја. А к је цео број, а и је цео број. То ради. А ми знамо да функција ће да излаз и цели бројеви као добро. И тако смо чување излаз функције, додати два интс, у типу интегер променљива, коју зову з. А онда можемо рећи, збир посто сам и ја посто је проценат ја. к, и и з респективно попуњавање оних одсто ја је. Шта је дефиниција Додајте две ИНТС изгледати? То је прилично једноставно. То је једна од оних које Управо сам видео пре секунде, инт сум једнако ПЛУС Б повратка суму. Да ли овај посао? Хајде да сачувате датотеку. А онда овде доле на мом терминал Идем да аддер 1, и ја очистим екран. Идем да увеличате јер знам то је мало тешко видети. Тако смо саставити овај програм као гуја 1. Дакле, можемо да урадимо дот сласх Аддер 1. Дај ми цео број, 10. Дај ми још цео број, 20. Збир од 10 и 20 је 30. Тако смо направили успешну функцију позив. Можете поново покрените функцију, негативна 10, 17 сума негативног 10 и 17 је 7. Ова функција ради. Има понашање да смо очекивали да. И тако смо направили успешан функција, дефиниција, декларација, и успешан позив функције. Пар разно тачке о функцијама пре него што закључимо овај одељак. Подсетимо од наших расправа о врстама података, претходно, који функционише понекад може потрајати нема улаза. Ако је то случај, ми прогласи функцију као да има списак празнина аргумент. Да ли се сећате шта је Најчешћи функција смо тако далеко да се види један аргумент листа празнина је? То је главни. Подсетимо се ту функцију понекад не заправо имају излаз. У том случају, изјављујемо функцију као да има неку врсту празнина повратка. Да закључимо овај дио од рјешавању проблема праксе. Дакле, овде је проблем изложио. Желим да напишем неку функцију зове важи троугао. Шта ова функција треба да уради се узети три реалних бројева који представљају дужине три стране троугла као његових параметара, или његови аргументи, или њени инпутс-- други сет синонима да би наиђете. Ова функција би требало или излаз труе или фалсе у зависности од тога да ли та три дужине су у стању прављења троугао. Да ли се сећате тип података који ми користи да означи тачно или нетачно? Сад, како ти имплементирати ово? Па знам да постоје пар правила у вези са троуглове који су заправо корисно знати. Троугао може имати само стране са позитивним дужине. То има смисла. Вероватно сте рекли, Дух. Друга ствар на уму међутим, да је сума од дужине било две стране троугла мора бити већи од дужине треће стране. То је заправо истина. Не можете имати троугао стране 1, 2 и 4, на пример, зато 1 плус 2 није већа од 4. Дакле, то су правила која утврди да ли или не три улаза може убедљиво формирају троугао. Дакле, узмите пар минута и прогласи и онда дефинисати ова функција се зове важи троугао, тако да заправо има понашање наведени овде. То ће резултовати истина ако те три стране могу да садржи троугао, и иначе фалсе Спремни да видим како си урадио? Ево једног имплементација важећих троугао. То није једина. Ваш можда незнатно разликују. Али ова ради, у ствари, имати понашање које очекујемо. Ми објављујемо нашу функцију на самом врху, БооЛ важећи троугао флоат к флоат год флоат з. Дакле, да поновим, ова функција има три реалних бројева као своје аргументе, флоатинг променљиве Поинт Валуе, и даје труе или фалсе вредност, која је Булова, опозив. Зато је повратни тип инт. Онда смо дефинисали функцију. Прва ствар коју урадите је да се уверим да да су све стране су позитивни. Ако је к мање или једнако до 0, или ако и је једнак 0, или ако з је мања од или једнака 0, да не може да буде троугао. Они немају позитивне стране. И тако можемо вратити лажно у тој ситуацији. Даље, ми проверите да ли да сваки пар улаза је већа од трећи. Дакле, ако је к, плус и је мање од или једнако З, или ако је к плус З је мање од или једнако и, или ако и плус з је мања од или једнака к то такође не може бити валидан троугао. Тако смо се вратили опет лажна. Под претпоставком да смо прошли оба чекова Међутим, онда можемо вратити истина. Због те три стране су способни за ретурнинг-- стварања важећу троугао. I to je to. Сада сте проглашени и дефинисана. И можда ћете моћи да сада користити и позвати ову функцију. Одличан посао. Ја сам Доуг Лојд. Ово је ЦС50.