Дъг LLOYD: Добре. Така че сега нека да се справи с наистина голяма тема, функции. Досега в хода, всички програми, които ние сме били писане са написани вътре в основната. Те са доста прости програми. Не е нужно да имате всичко това клонове и неща се случват. Ние просто може да го побере всички вътрешността на основна и тя не се получи ужасно поразителен. Но тъй като по време продължава и като започнете да се разработят програми независимо, те вероятно ще да започне да получите много повече от 10 или 15 линии. Може да получите стотици или хиляди или десетки хиляди реда код. И това наистина не е че луда мисъл. Като такъв, той вероятно не е добра идея да запази всичко в себе си на главната. Тя може да се получи малко трудно да се намери това, което търсите за вас, ако го направя. За щастие, макар и C, и доста много всеки друг език за програмиране, който може да работи с, позволява нас, за да напишете функции. И аз съм просто ще хвърлим един бърз настрана тук да се спомене, че функции е една област на компютърните науки. И вие ще видите много повече от тях, най- различни точки по целия курс и ако продължите нататък. Където има много синоними на една и съща дума. Така че ние наричаме функциите. Но вие също може да ги чуе по-долу процедури, или методи, по-специално, ако някога сте прави всеки обект ориентирано програмиране before-- и не се притеснявай ако не, не трябва голям deal-- но в ориентирани езици за одит често са наречени методи. Понякога те се наричат ​​подпрограми. Но те наистина всичко се отнасят на същата основна идея. Нека видим какво е тази идея. Какво е функция? Ами функция е наистина нищо повече от една черна кутия. A черна кутия, която има набор от нула или повече входове и един изход. Така например, този може да бъде функция. Това е функция, наречена функция. И това отнема три входа А, В и С. И вътре, че черната кутия, ние Не знам точно какво прави, но тя обработва входовете по някакъв начин и след това го дава един изход, в този случай, Z. Сега, за да го направи малко по- по-малко абстрактно, ние Може да се каже, че може би ние има функция, наречена добавя, че отнема три входа а, б, и в и обработва продукцията по някакъв начин вътре в черната кутия да произвеждат един-единствен изход. Така че в този случай, ако добави отнема 3, 6 и 7. Някъде вътре в добави функция, ние бихме очакваме от тях да бъдат сумирани за производство на продукцията, която е 3 плюс 6 плюс 7 или 16. По същия начин, трябва да имате функция, наречена MULT, че се извършва по два входа, а и б, ги обработва по някакъв начин, като че продукцията на функцията е продукт на двата входа. Двата входа умножават. 4 и 5, които да се прехвърлят в MULT, нещо се случи, на изхода очакваме е 20. Защо ние го наричаме черна кутия? Ами ако не се пише за Функционира себе си, които ние сме направили доста малко досега cs50. Виждали сме печат е, например, които е функция, която ние не пиша себе си, но ние не използвайте цялото време. Ако ние не се пише на себе си като функции, ние наистина не трябва да се знае как е действително извършените под капака. Така например черната кутия I Просто ти показах за умножение, MULT А, В може да бъде defined-- и това е само някои pseudocode-- може да бъде определя като изход от едно време б. Това има смисъл, нали. Ако имаме функция, наречена MULT, че се извършва по два входа. Бихме очаквали, че продукцията ще са двата входа умножават, пъти б. Но също така може да бъде MULT осъществява по този начин, имаме насрещно променлива да се определя вътре в MULT до 0. И тогава ние повторите този процес б пъти добавите да контраатакуват. Например, ако умножим 3а от 5б, бихме могли да кажем определени в противоречие с 0, повтаря пет пъти, добавете 3 до брояч. Така че ние започваме при 0 и след това, което правим тези пет пъти 3, 6, 9, 12, 15. Това е един и същ резултат. Ние все още се 3 пъти само 5 изпълнението е различно. Това е, което имаме предвид, когато казваме черна кутия. Това просто означава, че не ми пука как се осъществява под капака толкова дълго, колкото продукцията е това, което ние очакваме. В действителност, това е част от договора за използване функции, по-специално функции, които другите пишат. Поведението винаги ще да бъде типично, непредсказуема въз основа на името на функцията. И ето защо това е наистина важно, когато пишете функции или когато други хора пишат функции, които можете да използвате, че тези функции са ясни и относително очевидни имена, и са добре документирани. Което със сигурност е така за функция като на печат е. Така че защо да използвате функции? Ами, както казах по-рано, ако пишем всички от нашия код вътре в основните неща може да получите наистина тромава и наистина сложно. Функции ни позволяват способността да организира нещата и да се разбият много сложен проблем в много по-лесно управляеми части под. Функции също ни позволяват да опрости процеса на кодиране. Това е много по-лесно да се трасира на 10 Онлайн функция в сравнение с 100 линия функция или функция за 1000 линия. Ако имаме само за отстраняване на грешки малки парчета наведнъж, или напишете малки парчета в момента, го прави, че опит в програмирането много по-добре. Довери ми се, че един. И накрая, ако пишем ние функции да повторната употреба на тези различни части. Функциите могат да се рециклират. Те могат да се използват в една или друга програма. Вече съм писал функцията, всичко, което трябва да направите е кажа, че програмата къде да намеря тази функция. Ние сме били рециклиране и използване на отпечатате е повече от 40 години. Но това е само писмено едно време. Доста полезно, нали. Всичко е наред. Така функции са страхотни. Ние знаем, че. Сега нека да започнем да ги пише. Нека да започнат да получават ги в нашите програми. За да направите това, първият нещо, което правим, е да обяви функцията. Когато декларира функция това, което основно се прави Показателно е, съставител, хей, просто, за да знаете, Аз отивам да се пише функция по-късно и ето какво тя ще изглежда така. Причината за това е, защото компилатори може направя някои странни неща, ако те видите набор от символи че те не са запознати. Така че ние просто даде компилатор оглавява, аз съм създаване на функция и то се случва да направите това. Декларации Функция принцип ако можете да започнете организирането кода си по начин, че други ще бъдат в състояние да разбере и да използва, вие обикновено искате да сложите всички на декларации на функциите си на самия връх на кода си, нали преди да започнете да пишете основната дори. И удобно, има много стандартен формуляр че всяка декларация функция следва. Те всички почти изглежда така. Има три части към функция декларация, връщане тип, име, и списъкът с аргументите. Сега видът връщане е какъв вид променлива изход функция воля. Така например, ако си мислим назад Преди минути до умножи две номера функция, какво да очакваме, ако умножим цяло число от цяло число продукцията ще бъде Вероятно цяло число, нали. Мултиплицирани две цели числа заедно, вие получавате цяло число. Така че типът на връщане, че функция би било инт. Името е това, което искате да се обадите на вашия функция. Това е може би най-маловажното част от декларацията на функцията, по отношение на функционалност. Но всъщност може би един на най-важните части на декларацията на функцията по отношение на знаейки какво функцията всъщност прави. Ако дадете име на функция е или г или ч или мистерия или нещо подобно, вие вероятно ще се получи малко спънал се опитва да се помни това, което правят тези функции. Така че е важно да се даде своя смислени имена на функции на. На последно място, списъкът с аргументите е Списъкът на разделени със запетая на всички входове към вашата функция, всеки от които има тип и име. Така че не само трябва да се зададени какъв тип променлива изхода на функцията воля, и вие искате да се уточни какъв тип и видове променливи функция ще се приеме като суровини. Така че нека да направим един пример тук. Нека просто да погледнем в по-конкретен една. Така че тук е един пример за функция декларация за функция, която Ще добавя две числа заедно. Сборът от двете числа ще се да бъде цяло число, както и, тъй като ние просто обсъдено. И така от типа връщане, тук, в зелено, ще бъде инт. Това просто ни, които добавят две цели числа разказва ще, в края на деня, изход, или да го плюе обратно при нас, цяло число. Като се има предвид това, което прави тази функция ние Искам да му се даде смислено име. Добавят се две цели числа изглежда е подходящо, като се има предвид ние сме като две цели числа като суровини и се надяваме да ги добавяте заедно. Тя може да бъде малко на една тромава име и честно казано тази функция Вероятно не е необходимо тъй като ние имаме добавяне оператор, ако си спомняте от нашия обсъждане на операторите, по-рано. Но нека просто кажем, заради на аргумент, че тази функция е полезна и така ние ще се обадя да го добавите две цели числа. На последно място, тази функция се извършва по два входа. Всеки от които е цяло число. Така че ние имаме това запетая списък с разделени входове. Сега ние по принцип искам да дадете име на всеки един от тях така че да може да се използва в рамките на функция. Имената не са ужасно важни. В този случай, ние не задължително никакво значение, прикрепен към тях. Така че ние можем просто да ги наречем, и б. Това е напълно наред. Ако обаче откриете себе си в ситуация, където имената на променливите всъщност може да е важно, може да искате да ги наречем нещо различно от а и б да им даде нещо повече символично значение. Но в този случай, ние наистина не знам нищо друго за функцията. Ние просто искаме да добавим две цели числа. Така че ние просто ще се обадя тези числа а и б. Ето един пример. Защо не вземе втори да се мисли за това, как ще напише функция декларация за функция, която умножава две числа с плаваща запетая? Спомняте ли си какво е плаваща точка номер е? Какво би тази функция декларация изглежда? Аз всъщност ви препоръчваме да направите пауза във видеото тук и да вземат колко време ви трябва. Помислете за това, този декларация функция ще бъде? Какво ще бъде от типа замяна? Какво би било смислено име? Какви ще са входовете? Така че защо не направите пауза във видеото тук и пишат нагоре декларация функция за функция, която ще се размножават два плаващи числа точкови заедно. Надяваме се спря видеото. Така че нека да разгледаме един пример на една възможна декларация. Float MULT две равни числа плувка х, у плувка. Продуктът от две числа с плаваща запетая, които са се припомни как сме представляват реални числа или номера с десетични стойности в гр, ще е число с плаваща точка. Когато се размножават по- десетична от десетична, вие вероятно ще получите десетична. Искаш ли да му се даде съответното име. Умножете две равни числа изглежда добре. Но вие наистина може да го наречем MULT две плувки, или MULT поплавъци. Нещо подобно, стига да даде някои актуално значение на това, което тази черна кутия щеше да направи. И отново, в този случай, ние не правим изглежда да има някакъв смисъл, прикрепен до имената на променливи сме преминаващи през, така че ние просто ги наричаме х и у. Сега, ако ги наречем нещо останало, това е напълно наред. В действителност, ако си направил тази декларация, вместо вместо с помощта на двойки на плувки, ако си спомняте че двойки са с различен начин за по-точно зададени реални числа или с плаваща запетая с променливи. Това е напълно добре също. Всеки един от тези, които ще се оправи. В действителност, те са няколко различни комбинации начини да декларират тази функция. Но това са две доста добри. Ние сме обявена функция, това е страхотно. Ние сме казал компилатора какво е, това, което ние ще се прави. Сега нека всъщност пиша тази функция. Нека му се даде определение, така, че вътре в черната кутия предвидимо поведение се случва. В действителност, ние се умножи два недвижими номера заедно, или добавяне на номера заедно, или как да правим каквото и да е че ние попита нашата функция, за да се направи. Така че в действителност, нека да се опитаме и да се определят умножи две равни числа, които ние просто Говорих преди втория въпрос. Сега началото на дефиниция на функция изглежда почти точно същата като декларация на функция. Имам и двете от тях тук. На върха е декларацията на функцията, Вид, наименование, разделени със запетая аргумент списък, точка и запетая. Точката и запетаята показва, че това е функцията декларация. Началото на функцията определение изглежда почти точно една и съща, вида, името, разделени със запетая списъкът с аргументите, не запетая, отворите фигурна скоба. Откритият фигурна скоба, точно както ние сме били прави с основната, означава, че сега сме започва да се определи това, което се случва вътре в черната кутия, която ние решихме да се обадя MULT две равни числа. Ето един начин да го изпълни. Бихме могли да кажем, бихме могли да обяви нов променлива от тип плувка нарича продукт и възлага тази променлива до стойност х пъти у на. И след това се върнете продукта. Какво означава връщане кажа тук. Ами възвръщаемост е начинът, ние се посочи, че това е начина, ние сме преминаване на изхода се откаже. Така се върне нещо, е същата като, това е на изхода на черната кутия. Така че това е начина, по който го направи. Ето още един начин да го приложат. Бихме могли просто да се върне у х пъти. х е число с плаваща запетая. у е число с плаваща запетая. Така х пъти у е също с плаваща запетая. Ние дори не е необходимо да се създадете друга променлива. Така че това е един различен начин, за да приложи точно същата черна кутия. Сега отделете малко време, пауза във видеото отново, и да се опитаме и да се определят две цели числа добави, която е друга функция, ние Говорихме за преди малко. Отново тук, аз съм сложи функцията декларация, и така и запетая, и открита фигурна скоба и затворено къдрава скоба за да покаже, където ние ще запълни в съдържанието на две цели числа добави, така че ние определяме частното поведение вътре в черната кутия. Така пауза във видеото. И отделяш толкова време, колкото трябва да се опита и да определи реализация на две цели числа се добавят, като че когато функцията извежда стойност, това е така, в действителност, завръщане сумата от двата входа. Така че точно като предишния пример, има няколко различни начина че бихте могли да приложат добавете две цели числа. Ето един. В тук в оранжево съм Просто трябваше някои comments-- Току-що добавя някои коментари да посочат това, което се случва на всеки ред код. Така че аз декларирам променлива нарича сума от тип инт. Казвам сума се равнява на един плюс б. Това е, когато ние всъщност правим работата добавяне А и Б заедно. И аз се върне сума. И това има смисъл, защото сума е променлива от тип инт. И това, което е тип данни, че това функция ми казва, че ще изход? Int. Така че аз съм връщане сума, която е целочислена променлива. И това има смисъл, предвид това, което ние сме декларирани и определено нашата функция да направя. Сега можете също така да определите функцията по този начин, инт сума се равнява на един плюс В- пропуснете, че Първият step-- и след това се върнете сума. Сега можете да имате също тя изпълнява по този начин, които аз силно не препоръчвам. Това е лош стил за една нещо и наистина лош дизайн, но го прави в действителност, работа. Ако сте приели този код, което е инт добави лоша усойница точка с, и да го използвате. То всъщност не добавя две числа заедно. Това е много лошо изпълнение на тази поведение. Но тя не работи. Това е просто тук, за да илюстрират точката, че ние наистина не интересува какво се случва вътре черната кутия, толкова дълго, тъй като има на изхода, че ние очакваме. Това е лошо проектирани черна кутия. Но в края на деня, го прави Все още на изхода на сумата от един плюс б. Всичко е наред. Така че ние сме декларирани функции. И ние сме дефинирана функция. Така че това е наистина добра. Сега нека да започнем да използва функциите че сме обявена и ние сме определени. За повикване на function-- това е всъщност доста easy-- всичко, което трябва да направите, е да го давате подходящи аргументи, аргументи от типа на данните че очаква и след това присвоява връщането стойност на тази функция и this-- извинение me-- присвояване на стойността замяна на тази функция към нещо на правилния тип. Така че нека да разгледаме това на практика във файл наречено ехидна 1 точка в, която Аз имам в моята cs50 IDE. Така че тук е ехидна 1 точка в. В началото виждате имам ми включва, паунд включват, стандартна IO и cs50 дот ч. И тогава аз имам декларация моята функция. Това е мястото, където съм казва на компилатора, че съм Ще бъдат написването на функция, наречена добавете две цели числа. Това ще изход число променлива тип. Това е, което тази част е точно тук. И тогава аз имам два входа към нея на и Ь, всяка от които е цяло число. Вътре на главната, аз питам за потребителя вход, като казва, дай ми едно цяло число. И те са подканени да забравите инт, което е функция, която е включена в cs50 библиотеката. И това стане съхраняват в х, една целочислена променлива. Тогава можем да ги пита за друго число. Ние получаваме друго число и съхраняване на тази в ш. И след това, тук на линия 28, е когато ние правим нашия извикване на функция. Ние казваме, Int Z равни добавете 2 цели числа х запетая у. Виждаш ли защо това има смисъл? х е променлива на тип число и у е променлива тип цяло число. Така че това е добре. Това има смисъл от това, което нашата функция декларация по ред 17 прилича. Разделени със запетая списък Входният очаква две цели числа, а и б. В този случай, можем да наречем тях каквото си искаме. Тя просто се очаква две цели числа. И х е цяло число и у е цяло число. Това работи. И ние знаем, че тази функция ще да изходни числа, както добре. И така, ние се съхранение на изхода на функцията, добавете две цели числа, в цяло число тип променлива, която се обаждате Z. И тогава можем да кажем, сумата от процента аз и сто процента е аз мога. X, Y и Z, съответно попълване на тези процента аз му. Какво е определението за добавете две цели числа приличат? Това е доста проста. Това е един от тези, които ние Току-що видях преди една секунда, инт сума се равнява на един плюс б връщане сума. Дали тази работа? Нека да запишете файла. И тогава тук на моя терминал Отивам да се направи ехидна 1, и аз изчистите екрана си. Отивам да я увеличите, защото знам, това е малко трудно да се види. Така че ние се съберат тази програма като ехидна 1. Така че ние можем да направим дот наклонена черта ехидна 1. Дай ми цяло число, 10. Дай ми друга число, 20. Сумата от 10 и 20 е 30. Така че ние направи успешен извикване на функция. Можете да стартирате функцията отново отрицателна 10, 17, сума в размер на отрицателното 10 и 17 е 7. Тази функция работи. Той има поведението че можем да го очакваме да. И така, ние сме направили успешен функция, определение, декларация, и успешно извикване на функция. Двойка разни точки за функции преди да сключи този раздел. Спомнете си от нашия обсъждане на типове данни, Преди това, че функции понякога може да отнеме не входове. Ако това е така, ние декларира функция като има списък с аргумент за невалидни. Спомняте ли си какво, Най-честата функция сме виждали досега, че отнема списък за нищожен аргумент е? Това е основното. Спомнете си също, че функция понякога всъщност не са с мощност. В този случай, ние заявяваме, функцията като имащи вид невалидни възвръщаемост. Нека да завършим този раздел от справяне с проблема на практика. Така че тук е проблемът, изложени. Искам да напиша функция наречено валидна триъгълник. Какво трябва да направи тази функция се вземат три реални числа които представляват дължините на тримата страни на триъгълник, като нейните параметри, или неговите аргументи, или си inputs-- друг набор от синоними които може да срещнете. Тази функция трябва да или изход вярно или невярно в зависимост от това дали тези три дължини са в състояние да направи един триъгълник. Спомняте ли си, че типът на данните ние се използва за указване вярно или невярно? Сега, как да приложат тази? Добре знаем, че има няколко на правила по отношение на триъгълници които всъщност са полезно да се знае. A триъгълник може да има само страни с положителен дължина. Това има смисъл. Вероятно си казваше, дух. Другото нещо е да се отбележи обаче, е, че сумата от дължините на всяка две страни на триъгълника трябва да бъде по-голяма от дължина на трета страна. Това е действително вярно. Не може да има триъгълник на страни 1, 2 и 4, например, защото 1 плюс 2 е не по-голяма от 4. Така че тези, които са правилата, които определи дали тримата или не входове могат евентуално да образуват триъгълник. Така че да отнеме няколко минути и декларира и тогава се определя тази функция, наречена валидно триъгълник, така че тя всъщност има поведението посочено тук. Той ще изведе вярно, ако тези три страни са способни съдържащ триъгълник, и лъжа в противен случай Готови ли сте да видите как си направил? Ето една реализация на валиден триъгълник. Това не е единственият. Yours може леко да варира. Но този човек прави, всъщност, има поведението, което очакваме. Ние заявяваме нашата функция в самия връх, булев валидна триъгълник плувка плувка х у плувка Z. Така че отново, тази функция отнема три реални числа като свои аргументи, плаващ променливи точка стойност, и извежда вярно или невярно стойност, която е Булева, изземване. Значи затова типа връщане е булев. След това ние определяме функцията. Първото нещо, което правим, е да се уверите, проверете че всички страни са положителни. Ако X е по-малко от или равно 0, или ако Y е равно на 0, или Z е по-малко от или равно на 0, че не може да е триъгълник. Те не разполагат с положителни страни. И така можем да се върнем фалшиво в тази ситуация. След това, ние се уверете, че всяка двойка входове е по-голяма от една трета. Така че, ако х плюс у е по-малко от или равно на Z, или ако х плюс Z е по-малко от или равна на у, или ако Y плюс Z е по-малко от или равно на х, който също не може да бъде валиден триъгълник. Така че ние се върне фалшиви отново. Ако приемем, че сме преминали и двете от проверките макар, тогава можем да се върнем вярно. Тъй като тези три страни са способни да returning-- създаването на валиден триъгълник. И това е. Сега съм декларирал и определено. И вие може да имате възможност да се сега използвате и се обадете на тази функция. Добра работа. Аз съм Дъг Лойд. Това е cs50.