Замість функцій почніть з підпрограм . Скажіть їм, що програма - це лише список інструкцій, рецепт, щоб розповісти комп’ютеру, як щось робити. І що вона виконується одна інструкція за іншою (з можливістю робити кілька кроків паралельно, але про це пізніше).
Деякі завдання є досить поширеними та повторюваними, тому було б жахливо, якби нам завжди доводилося їх записувати знову і знову, тому ми пишемо їх лише один раз і робимо з нього "меншу програму" - підпрограму , яку можна повторно використати інші частини програми. Для того, щоб мати можливість його виконувати не один раз, ми даємо йому значущу назву в нашій програмі. І тоді ми можемо використовувати це ім'я, коли хочемо виконати цю «маленьку програму» як частину більшої, називаючи її цим іменем.
Викликати підпрограму - це як викликати демона, який знає, як виконати це завдання, на ім'я цього демона. Тож, коли ми хочемо виконати саме цю задачу в нашій програмі, ми пишемо "подзвони демона на ім'я Аргот", і демон з'являється і виконує завдання для нас, як ми йому доручили це робити, а потім відходить і ми можемо продовжувати наше робота.
Іноді демону потрібна додаткова інформація, без якої він не може вирішити, яке з завдань виконувати чи що ми хочемо від нього. Наприклад, якщо демон повинен будувати замок, йому може знадобитися знати, де він повинен будувати його, або наскільки великий і т. Д. Це аргументи, передані демону ... Я маю на увазі підпрограму, яка зараз стає параметризований .
Параметри - це ті відомості, які відсутні, але необхідні для виконання завдання. Вони трохи змінюють те, що може зробити підпрограма. Вони схожі на порожні прорізи в рецепті, які потрібно заповнити, перш ніж ми могли виконати його.
Аргументи , з іншого боку, - це фактична інформація (значення), яку ми надаємо за цими параметрами.
Щодо паралельного виконання, ми можемо думати про це так: завжди є хтось (або щось ), який виконує програму (список інструкцій). Це або інша людина (чи знаєте ви, що колись "комп'ютер" був ім'ям для людини, яка проводила обчислення?), Або машина. Програма - це лише список інструкцій, вона не працює самостійно. Має бути хтось чи щось, хто буде виконувати обчислювальний процес(виконайте ці дії зі списку). І іноді ці дії можна робити паралельно - ми можемо поширити копії списку декільком людям і дозволити кожній із них виконувати різний набір завдань зі списку, поки вони не перебивають один одного або не роблять ' не доведеться чекати результатів чужої роботи. Це для вас багатопоточність ;)
Що стосується різниці між функціями та підпрограмами (їх також називають процедурами ), звичайна різниця полягає в тому, що функція викликається для обчислення певного значення, яке вона повертає в результаті її виконання, тоді як процедури виконуються просто для задоволення;) AKA для їх "побічних ефектів" - просто заради операцій, проведених зі списку.
Але якщо виклик процедури чи функції спочатку викликає певні неприємності, ви можете використовувати інший популярний колись термін: стрибки . Можна перейти до підпрограми, а це означає, що ви припиняєте виконувати все, що ви робите зараз, і "перестрибуєте" в інше місце у списку (або інший список) - підпрограму - для виконання своїх завдань. Потім, коли ви закінчите, ви «стрибаєте назад» - тобто повертаєтесь на місце, яке вас перервало, щоб ви могли продовжувати своє попереднє завдання. Різниця між дзвінками та стрибками полягає в тому, що тепер ти - демон.
Що стосується методів, які тут хтось згадав, чи того, що деякі мови "не мають функцій, а лише методи" - це не зовсім правильно, адже методи - це функції! - особливий їх вид : це функції, які використовуються для отримання певної інформації, яка міститься в об'єкті, або працює над ними. Вони є "методом роботи над цими даними". Назва походить від об'єктно-орієнтованої парадигми, в якій дані укладені з об'єктами і не можуть керувати ними безпосередньо, лише за допомогою спеціальних функцій, що називаються "методами".
Метод особливий певним чином: він повинен знати, яким конкретним об'єктом він повинен керувати / викликатися (об'єкт "цей"). Ось чому методи зазвичай прикрашені додатковим прихованим параметром, який зберігає інформацію про об'єкт, на який він викликаний (покажчик "цей"). Це ускладнює те, як функцію викликають трохи, але це "деталь реалізації", який програміст не повинен сильно турбувати, поки він знає, що робить.