ДАГ Lloyd: Гаразд.
Так що тепер давайте візьмемося дійсно велика тема, функції.
До цих пір в процесі, все Програми, які ми були пишучі
були написані всередині основної.
Вони досить прості програми.
Вам не потрібно, щоб усі ці філії та речей відбувається.
Ми можемо просто умістити його всередині основної і
не одержати страшно переважною.
Але, як курс продовжується і як ви почнете розробляти програми
самостійно, вони, ймовірно, буде щоб почати, щоб отримати набагато більше, ніж 10
або 15 рядків.
Ви можете отримати сотні або тисячі або десятки тисяч рядків коду.
І це насправді не що з розуму думка.
Як така, вона, ймовірно, не дуже гарна ідея зберегти всі всередині основної.
Це може стати трохи важко знайти те, що ви шукаєте, якщо ви зробите це.
>> На щастя, хоча C, і в значній мірі кожна мова програмування, який
може працювати, дозволяє нам написати функції.
І я просто хочу, щоб Візьміть швидкий сторону тут
відзначити, що функцій одна область інформатики.
І ви будете бачити більше з них у різні точки протягом усього курсу
і якщо ви будете продовжувати далі.
Там, де є багато синоніми одного і того ж слова.
Так ми називаємо функції.
Але ви могли б також почути їх згадується як процедур,
або методи, зокрема, якщо ви коли-небудь зробити будь об'єктно-орієнтованого програмування
before-- і не турбуватися якщо у вас ні, не
великий deal-- але в аудиторські орієнтовані мови
часто звані методами.
Іноді вони називаються підпрограмами.
Але вони насправді всі вони відносяться до того ж основної ідеї.
>> Давайте подивимося, що ця ідея.
Що таке функція?
Ну функція дійсно не більше, ніж чорний ящик.
Чорний ящик, який має безліч нульовий або більше входів і один вихід.
Так, наприклад, ця може бути функцією.
Ця функція називається функ.
І це займає три входи A, B і С.
І всередині цього чорного ящика, ми не знаю точно, що він робить,
але він обробляє входи в деякому роді, а потім він
дає один вихід, в цьому випадку, м
Тепер, щоб зробити його трохи менш абстрактним, ми
Можна сказати, що, можливо, ми є функція під назвою
Додамо, що займає три входи A, B, і С і обробляє вихідні дані в деякому роді
всередині чорного ящика до виробляти один вихід.
Таким чином, в цьому випадку, якщо додати займає 3, 6, і 7.
Десь усередині додати функцію, ми б
очікувати, що вони будуть додані разом для отримання вихідного сигналу, який
3 плюс 6 плюс 7 або 16.
>> Точно так само, у вас є функція під назвою мульт, який приймає два входи, а і б,
обробляє їх в деякому роді такий що вихід функції
є продуктом двох входів.
Два входи перемножуються.
4 і 5 передається в Mult, щось трапиться, вихід ми очікуємо
20.
Чому ми називаємо це чорний ящик?
Ну, якщо ми не написання Функції себе, що
ми зробили зовсім небагато досі CS50.
Ми бачили друку F, наприклад, що це функція, яку ми не написати
самі, але ми використовуємо весь час.
Якщо ми не пишемо функції самі,
ми насправді не потрібно знати, як це насправді реалізовані під капотом.
>> Так, наприклад, чорний ящик I тільки що показав вам для множення,
сть а, б може бути defined-- і це тільки
деякі pseudocode-- може бути визначається як вихід через раз б.
Це має сенс, вірно.
Якщо у нас є функція під назвою мульт, який приймає два входи.
Ми б очікувати, що результат буде бути два входи перемножуються,
а раз б.
Але мульт також може бути реалізовані, як це,
ми маємо змінну лічильника на отримати набір всередині Mult 0.
А потім ми повторюємо цей процес б раз додати до лічильника.
Наприклад, якщо ми помножимо 3а по 5б, ми могли б сказати встановити лічильник на 0,
повторити п'ять разів, додати 3 до прилавка.
Отже, ми починаємо з 0, а потім ми робимо Це в п'ять разів 3, 6, 9, 12, 15.
Це той же самий результат. Ми досі отримати 3 разів 5 разів
реалізація відрізняється.
>> Це означає, що ми коли ми говоримо, чорний ящик.
Це просто означає, що ми дійсно не піклуються як це реалізовано під капотом
тих пір, поки вихід, що ми очікуємо.
Насправді, це частина договору використання функції, зокрема,
Функції, які пишуть інші.
Поведінка завжди буде типовими, непередбачуваний
на основі імені функції.
І ось чому це дійсно важливо, коли ви пишете функції
або коли інші люди пишуть Функції, які ви могли б використовувати,
що ці функції мають ясно, щодо очевидні імена,
і добре документовані.
Що, звичайно, випадок для функції, як друк ф.
>> Так чому ж ми використовуємо функції?
Ну, як я сказав раніше, якщо ми пишемо весь наш код всередині головних
можете отримати дійсно громіздким і справді складна.
Функції дозволяють нам здатність організувати речі і розбити
дуже складне завдання в багато більш керовані частини суб.
Функції також дозволяють нам спростити процес кодування.
Це набагато простіше налагодити 10 Функція лінія проти лінії 100
функція або функція в 1000 лінія.
Якщо у нас є тільки для налагодження маленькі шматочки в той час,
або написати невеликі шматочки в той час, це робить цей досвід програмування
набагато краще.
Повірте мені на тому.
>> Нарешті, якщо ми пишемо функції ми можна повторно використовувати ці різні частини.
Функції можуть бути перероблені.
Вони можуть бути використані в одна програма або інший.
Ви вже написали функція, все, що вам
потрібно зробити, це сказати, що програма де знайти цю функцію.
Ми утилізації та використання друкувати е більше 40 років.
Але це було тільки один раз написано.
Досить корисно, правильно.
Добре.
Так функції великі.
Ми знаємо, що.
Тепер давайте почнемо писати їх.
Давайте почнемо отримувати їх у наших програмах.
Для того, щоб зробити це, перший що ми робимо, це оголосити функцію.
Коли ви оголошуєте функцію те, що ви робите в основному
говорить компілятору, агов, тільки так ви знаєте,
Я збираюся писати функція пізніше
і ось що він буде виглядати.
Причина цього в тому, що компілятори можуть
зробити деякі дивні речі, якщо вони бачать набір символів
що вони не знайомі.
Таким чином, ми просто дати компілятору очолює, я створюю функцію
і він збирається зробити це.
Оголошення функцій зазвичай якщо Ви організовує свій код таким чином,
що інші зможуть зрозуміти і використовувати,
Ви взагалі хочете, щоб покласти все Ваші оголошення функцій
на самому верху вашого коду, прямо перш ніж почати писати основний навіть.
І зручно, є дуже стандартна форма
що кожна функція декларація наступним чином.
Вони всі в значній мірі виглядати наступним.
Є три частини до функції Декларація, повертається тип, ім'я,
і список аргументів.
>> Тепер тип повернення Яких Мінлива вихід функції волі.
Так, наприклад, якщо ми згадаємо Хвилину тому до множення двох
Функція номера, то, що ми очікуємо, якщо помножимо ціле число ціле число
вихід буде ймовірно, ціле, право.
Множиться два цілих числа разом, ви отримаєте ціле число.
Так тип повертається що Функція буде Int.
Ім'я це те, що ви хочете звернути вашу функції.
Це, ймовірно, найменш важливим частина функції декларації,
з точки зору функціональності.
Але насправді, ймовірно, один з найбільш важливих частин
в оголошенні функції в умовах знаючи, що насправді функція
робить.
Якщо ви назвати вашу функцію F або г або год або таємниця або щось подібне,
ви, ймовірно, збирається отримати трохи спіткнувся, намагаючись
згадати, що ці функції роблять.
Тому важливо, щоб дати вашій осмислені імена функції.
>> Нарешті, список аргументів розділені комою
всіх входів у вашій функції, кожен з яких має тип та ім'я.
Так що не тільки у вас є, щоб вказати, який тип змінної
вихід функція, Ви також хочете, щоб вказати
який тип і типи змінних в Функція буде приймати в якості вхідних.
Так давайте зробимо приклад тут.
Давайте просто подивимося у більш конкретному один.
Так ось приклад функції Заява для функції,
хотів би додати два цілих числа разом.
Сума двох цілих чисел буде бути цілим числом, а також, як ми тільки що
обговорюється.
І тому тип повернення тут, в зелений, буде Int.
Це просто говорить нам, що додати два цілих збирається, врешті-решт,
вихід, або виплюнути назад до нас, ціле число.
Враховуючи те, що ця функція робить ми хочу, щоб дати йому значуще ім'я.
Додати два цілих здається доцільно, враховуючи
ми беремо два цілих числа в якості вхідних і, сподіваюся, додавши їх разом.
Це може бути трохи громіздким Ім'я та відверто ця функція
Ймовірно, немає необхідності так як ми маємо додавання
Оператор, якщо ви пам'ятаєте з нашого обговорення операторів, раніше.
Але давайте просто скажемо, заради Аргумент, що ця функція корисна
і так ми будемо називати його додати два цілих.
Нарешті, ця функція приймає два входи.
Кожен з яких є цілим числом.
Отже, ми маємо цю кому список розділених входів.
Тепер ми зазвичай хочуть дати ім'я кожному з них
таким чином, що вони можуть бути використані у функції.
Імена не страшно важливо.
>> У цьому випадку, ми не обов'язково є якийсь сенс, прикріплений до них.
Таким чином, ми можемо просто назвати їх і б.
Це абсолютно нормально.
Однак, якщо ви знайдете самостійно в ситуації,
де імена змінних дійсно може бути важливим,
Ви можете називати їх щось інше, ніж а і Ь
щоб дати їм щось більше символічно значущим.
Але в даному випадку, ми насправді не знаєте що-небудь ще про функції.
Ми просто хочемо, щоб додати два цілих числа.
Таким чином, ми просто зателефонувати тих, цілі числа а і б.
Ось один приклад.
>> Чому б вам не взяти другий думати про це,
як би ви написати функцію Заява для функції,
примножує двох чисел з плаваючою комою?
Ви пам'ятаєте, що таке число з плаваючою комою?
Що б ця функція Заява виглядає?
Я насправді рекомендуємо Вам призупинити відео сюди і скільки часу вам потрібно.
Подумайте про те, що це Оголошення функції буде?
Що б тип повертається бути?
Що б значуще ім'я буде?
Що б входи бути?
Так чому б вам не зробити паузу відео тут і написати план функцію декларацію
для функції, яка буде множити дві плаваючою комою разом.
Сподіваюся, ви паузу відео.
>> Отже, давайте поглянемо на приклад однією з можливих декларації.
Поплавок Mult дві реала плавати х, у поплавця.
Добуток двох чисел з плаваючою точкою,
які є згадати, як ми представляють реальні цифри
або номери з десятковими значеннями в С, буде число з плаваючою крапкою.
Коли ви примножуєте десяткової в десятковому,
ви, ймовірно, збирається отримати десяткової.
Ви хочете, щоб дати йому відповідну ім'я.
Помножте дві реала здається нормально.
Але ви могли б дійсно назвати це Mult двома поплавками, або Mult поплавці.
Нічого подібного, до тих пір, як це дав йому актуальне значення на те, що
це чорний ящик збирався зробити.
І знову ж, в цьому випадку, ми не здається, є якийсь сенс надає
на іменами змінні ми перехідні в,
так що ми просто називаємо їх х та у.
Тепер, якщо ви їх називаєте щось ще, що це абсолютно нормально.
Справді, якщо ви зробили ця декларація, а
замість цього використовуючи двійників поплавців, якщо згадати,
що подвоюється це інша спосіб більш точно
вказати реальні цифри або з плаваючою комою змінні.
Це абсолютно нормально теж.
Або один з тих, було б прекрасно.
Насправді, є декілька різні комбінації
способів заявити цю функцію.
Але ці дві досить хороші.
Ми оголосили функцію, це здорово.
Ми сказали, що це компілятор є те, що ми збираємося робити.
Тепер давайте насправді писати цю функцію.
Давайте дамо йому визначення, таким чином, що всередині чорної скриньки
передбачувана поведінка відбувається.
Насправді, ми множення двох дійсних номери разом, або додавання телефонного номера
разом, або робити те, що це що ми попросили нашу функцію спільного.
>> Таким чином, справді, давайте спробуємо визначити і помножити дві реала, який ми тільки що
говорили про другу тому.
Тепер початок визначення функції
виглядає майже точно так само, як функція декларації.
У мене є і з них.
У верхній частині знаходиться оголошення функції, тип, назва, розділені комою аргумент
Список, крапка з комою.
Крапка з комою вказує, що що оголошення функції.
Початок функції визначення виглядає майже в точності
те ж саме, тип, ім'я, розділені комою Список аргументів, немає коми,
відкрити фігурну дужку.
Відкрита фігурна дужка, як ми робили з основною,
означає, що ми зараз починає визначати
що відбувається всередині чорного ящика, що ми вирішили назвати Кілька дві реала.
Ось один із способів, щоб його реалізувати.
Ми могли б сказати, що ми могли б оголосити новий змінна типу поплавця називається продукт
і призначити цю змінну у вартість х разів у.
А потім повернутися продукт.
Що означає повернення тут.
Ну повернення шлях зазначимо, що, як
ми передаємо вихід назад.
Так щось повернути, так само, як, це вихід чорного ящика.
Так от, як ви це робите.
Ось ще один спосіб її реалізації.
Ми могли б просто повернути х разів у.
х поплавок.
у з плаваючою крапкою.
Так х разів у також поплавок.
Ми навіть не потрібно створити ще одну змінну.
Так що це інший спосіб здійснити той же чорний ящик.
>> Тепер скористатися моментом, призупинити відео ще раз,
і спробувати визначити додати два цілих, який є іншої функції, що ми
говорили про хвилину тому.
Знову тут, я поклав функції Декларація, і так як крапка з комою,
і відкрита фігурна дужка і закритим кучеряве
дужка, щоб вказати, де ми будемо заповнювати у вмісті додати два цілих,
так що ми визначаємо зокрема Поведінка всередині чорного ящика.
Так призупинити відео.
І взяти стільки часу, скільки Ви повинні спробувати і визначити
реалізація додати два цілих, наприклад що, коли функція виводить значення,
він робить, насправді, повернення сума двох входів.
Так само, як і в попередньому прикладі, Є кілька різних способів
що ви могли б реалізувати додати два цілих.
Ось один.
У тут, в помаранчевий У мене просто були деякі comments--
Я просто додав деякі коментарі, щоб вказати,
що відбувається в кожному рядку коду.
Так що я оголосити змінну називається сума типу Int.
Я говорю сума дорівнює плюс б.
Ось де ми насправді робимо робота додавання А і В разом.
І я повернуся суму.
І, що має сенс, оскільки сума змінна типу Int.
І те, що тип даних, що це функція повідомляє мені, що збирається вивести?
Int.
Так я повертаюся суму, яка є цілої змінної.
І, що має сенс, враховуючи те, що ми Оголошення і визначення нашу функцію
зробити.
>> Тепер ви можете також визначити функція таким чином,
INT сума дорівнює плюс В- пропустити що в першу чергу, а потім step--, повернутися суму.
Тепер ви могли б також реалізовані це так,
який я дуже не рекомендую.
Це поганий стиль для одного що і справді поганий дизайн,
але це, насправді, роботи.
Якщо ви берете цей код, який INT додати погану суматор точка C, і використовувати його.
Це насправді додати два числа разом.
Це дуже погана реалізація цього конкретного поведінки.
Але він працює.
Це просто тут для ілюстрації і справа, що ми насправді не
все одно, що відбувається всередині чорний ящик, поки
як це має висновок, який ми очікували.
Це погано розроблені чорний ящик.
Але врешті-решт, це робить ще вихід сума плюс б.
Добре.
Так ми оголосили функцій.
І ми визначили функцію.
Так що це дійсно добре.
Тепер давайте почнемо використовувати функції що ми оголосили і ми визначили.
Для виклику function-- це насправді досить easy-- все, що вам потрібно зробити,
це передати його відповідними аргументами, Аргументи типу даних
що він очікує, і потім призначити повернення
Значення цієї функції і this-- виправдання me--
привласнити повертається значення цієї функції до чогось правильного типу.
>> Отже, давайте подивимося на На практиці це у файлі
називається суматор 1 точка С, У мене в CS50 IDE.
Так от гадюка 1 точка гр.
На початку ви бачите, я мій включає в себе, фунт включають,
Стандарт І.О., і CS50 точка ч.
А потім у мене оголошення функції.
Це де я говорить компілятор Я
буде написання Функція називається додати два цілих.
Це відбувається для виведення ціла змінна типу.
Це те, що ця частина прямо тут.
А то у мене два входи до нього і б, кожен з яких представляє собою ціле число.
Усередині головного, я прошу у користувача вхід кажучи, дай мені ціле.
І вони запропоновано забути INT, яка є функцією, що
включений в бібліотеці CS50.
І, що зберігається в х, ціла змінна.
>> Тоді ми підштовхнути їх ще цілого.
Ми отримуємо ще ціле і зберігати, що в у.
А потім, тут, на лінії 28, є де ми робимо нашу виклик функції.
Ми говоримо, Int Z рівних додати 2 Інтс х коми у.
Ви бачите, чому це має сенс?
х є змінною цілого типу і у є змінною цілого типу.
Так що це добре.
Це має сенс з якою нашої функції Декларація про відповідність 17 виглядає.
Список введення розділені комою очікує два цілих числа, а і б.
У цьому випадку, ми можемо назвати їм, що ми хочемо.
Це просто чекає два цілих числа.
І х являє собою ціле число, і у є цілим числом.
Це працює.
>> І ми знаємо, що функція буде Для виведення числа, а також.
І таким чином, ми зберігаємо вихід функції,
додати два цілих, в ціле типу Змінна, яка ми називаємо р
І тоді ми можемо говорити, що сума відсотків я і відсотків я це я відсотків.
х, у і г відповідно заповнення в тих відсотків я років.
Що є визначення додати два цілих виглядати?
Це досить просто.
Це один з тих, що ми щойно бачив секунду тому,
INT сума дорівнює б зворотний плюс суму.
Чи означає це працювати?
Давайте зберегти файл.
І тоді тут, на моєму терміналі Я збираюся зробити суматор 1,
і я очистити екран.
Я збираюся збільшити тому що я знаю це трохи важко побачити.
>> Так ми збираємо цю програму в якості суматора 1.
Таким чином, ми можемо зробити точка слеш суматор 1.
Дайте мені ціле, 10.
Дайте мені ще ціле, 20.
Сума 10 і 20 30.
Таким чином, ми зробили виклик успішний функцію.
Ви можете запустити функцію знову, негативний 10, 17 сума від'ємного 10 і 17 +7.
Ця функція працює.
Він має поведінка що ми очікуємо його.
І таким чином, ми зробили успішний Функція, визначення, заява,
і виклик успішним функція.
Пара різний пункти про функції
перш, ніж ми закінчимо цей розділ.
Нагадаємо, з нашого обговорення типів даних,
Раніше, що функції не може зайняти жоден вхід.
Якщо це так, то ми оголосити функцію
як має список аргументів недійсними.
Пам'ятаєш вам, що Найбільш загальна функція
ми бачили досі, що відбувається список аргументів порожнеча?
Це головний.
Нагадаємо також, що функція іноді насправді не мають вихід.
У цьому випадку, ми оголошуємо функцію як мають тип повертається недійсним.
Давайте закінчимо цей параграф вирішення проблеми практики.
>> Так от проблема виклав.
Я хочу, щоб ви написати функцію називається дійсним трикутник.
Що ця функція повинна робити це взяти три реальні цифри
які представляють довжини трьох сторони трикутника, як її параметрів,
або його аргументи, або його inputs-- інший набір синонімів
що ви можете зіткнутися.
Ця функція повинна або вихід істинним чи хибним
в залежності від того цих трьох довжин здатні зробити трикутник.
Ви пам'ятаєте, що тип даних ми використовували, щоб вказати, вірно чи невірно?
Тепер, як ви це реалізувати?
Ну знаєте, є пара правил, що стосуються трикутників
що насправді корисно знати.
Трикутник може мати тільки Сторони з позитивною довжини.
Що має сенс.
Ви, мабуть, сказавши, хм.
Інша річ, до відома хоча, є те, що сума
довжин будь Сторони трикутника
повинен бути більше, ніж Довжина третьої сторони.
Це насправді так.
Ви не можете мати трикутник сторін 1, 2 і 4, наприклад, через 1 плюс 2
максимум, ніж 4.
Так що ті правила, які визначити, чи дійсно трьох
Входи можуть, імовірно, утворюють трикутник.
Так що через пару хвилин і оголосити, а потім визначити
ця функція називається дійсним трикутника, так, що він насправді
має поведінка вказаний тут.
>> Це буде справедливо, якщо вихід цих трьох сторін здатні містить трикутник,
і брехня в іншому випадку Готові побачити, як ви зробили?
Ось одна реалізація з дійсна трикутник.
Це не тільки один.
Ваш може незначно відрізнятися.
Але це робить, насправді, є поведінку, яку ми очікуємо.
Ми заявляємо, що наше функцію на дуже зверху, BOOL дійсний трикутник
плавати х флоат у поплавця р
Отже, ще раз, ця функція приймає три реальні цифри
в якості аргументів, плаваючі точка значення змінних,
і виводить істинним чи хибним значення, яке є логічним, нагадаємо.
Так ось чому тип значення BOOL.
Потім ми визначаємо функцію.
Перше, що ми робимо, це перевірити, щоб переконатися, що всі сторони позитивні.
Якщо х менше або дорівнює 0, або якщо у дорівнює 0,
або якщо г менше або дорівнює 0, що не може бути трикутником.
Вони не мають і позитивні сторони.
І так ми можемо повернутися брехня в цій ситуації.
Далі, ми перевіряємо, щоб переконатися, що кожна пара входів
більше, ніж третій.
>> Так що, якщо х плюс у менш або рівним г,
або якщо х плюс г менше або рівним Y,
або якщо у плюс г, менше або дорівнює х, що також не може бути допустимим трикутник.
Таким чином, ми знову повернутися помилковим.
Припустимо, що ми пройшли обидві перевірки хоча, то ми можемо повернутися правда.
Тому що ті, з трьох сторін здатні returning--
створення дійсний трикутник.
І це все.
Тепер ви оголошені і визначені.
І ви можете бути в змозі в даний час для використовувати і викликати цю функцію.
Чудова робота.
Я Дуг Ллойд.
Це CS50.