Урок №17. Чому функції корисні і як їх ефективно використовувати в програмуванні?

  Юрій  | 

  Оновл. 15 Кві 2020  | 

 61

Тепер, коли ми вже знаємо, що таке функції і навіщо вони потрібні, давайте більш детально розглянемо те, чому вони так корисні.

Навіщо потрібно використовувати функції?

Початківці часто запитують: «А чи можна обходитися без функцій і весь код розміщувати безпосередньо в функції main()?”. Відповідь: “Якщо ваш код складає всього лише 10-20 рядків, то можна, якщо ж серйозно, то функції призначені для спрощення коду, а не для його ускладнення”. Вони мають ряд переваг, які роблять їх надзвичайно корисними в нетривіальних програмах.

Переваги функцій:

   Структура. Як тільки програми збільшуються в розмірі/складності, зберігати весь код всередині main() стає важко. Функція — це як міні-програма, яку ми можемо записати окремо від головної програми, не заморочуючись при цьому на рахунок інших частин коду. Це дозволяє розбивати складні завдання на більш дрібні і прості, що кардинально знижує загальну складність програми.

   Повторне використання. Після оголошення функції, її можна викликати багато разів. Це дозволяє уникнути дублювання коду і зводить до мінімуму ймовірність виникнення помилок при копіюванні/вставці коду. Функції також можуть використовуватися і в інших програмах, зменшуючи обсяг коду, який потрібно писати з нуля кожен раз.

   Тестування. Оскільки функції прибирають зайвий код, то і тестувати його стає набагато простіше. А так як функція — це самостійна одиниця, то нам досить протестувати її один раз, щоб переконатися в її працездатності, а потім ми можемо її повторно використовувати багато разів без необхідності проводити тестування ще раз (до тих пір, поки не внесемо зміни в цю функцію).

   Модернізація. Коли потрібно внести зміни в програму або розширити її функціонал, то функції є відмінним варіантом. З їх допомогою можна внести зміни в одному місці, щоб вони запрацювали всюди.

   Абстракція. Для того, щоб використовувати функцію, нам потрібно знати її ім’я, вхідні дані, вихідні дані і де ця функція знаходиться. Нам не потрібно знати, як вона працює. Це дуже корисно для написання коду, зрозумілого іншим (наприклад, стандартна бібліотека С++ і все, що в ній знаходиться, — створена саме за цим принципом).

Кожен раз, при виклику std::cin або std::cout для введення або виведення даних, ми використовуємо функцію зі стандартної бібліотеки C++, яка відповідає всім зазначеним вище концепціям.

Ефективне використання функцій

Однією з найбільш поширених проблем, з якою стикаються початківці, є розуміння того, де, коли і як ефективно використовувати функції. Ось кілька основних рекомендацій при написанні функцій:

   Рекомендація №1: Код, який з’являється більше одного разу в програмі, краще переписати у вигляді функції. Наприклад, якщо ми отримуємо дані від користувача кілька разів одним і тим же способом, то це чудова нагода для написання окремої функції.

   Рекомендація №2: Код, який використовується для сортування будь-чого, краще записати у вигляді окремої функції. Наприклад, якщо у нас є список речей, які потрібно впорядкувати — пишемо функцію сортування, куди передаємо несортований список і звідки отримуємо уже відсортований.

   Рекомендація №3: Функція повинна виконувати одне (і тільке одне) завдання.

   Рекомендація №4: Коли функція стає дуже великою, складною чи незрозумілою — її варто розбити на декілька підфункцій. Це називається “рефакторингом коду“.

При вивченні C++ вам потрібно буде написати багато програм, які будуть включати наступні три підзавдання:

   Отримання даних від користувача.

   Опрацювання даних.

   Вивід результату на екран.

Для простих програм (менше 30 рядків коду) частково або всі з цих трьох підзавдань можна записати у функції main(). Для більш складних програм (або просто для практики) кожне з цих трьох підзавдань є хорошим варіантом для написання окремої функції.

Початківці дуже часто комбінують в одній функції відразу і опрацювання даних від користувача, і виведення результату. Проте це порушує правило “одного завдання”. Функція, яка опрацьовує значення, повинна повертати його назад в викликаючу функцію, а далі вже нехай ця функція сама вирішує, що їй з цим значенням робити.

Оцінити статтю:

1 Зірка2 Зірки3 Зірки4 Зірки5 Зірок (2 оцінок, середня: 5,00 з 5)
Loading...

Залишити відповідь

Ваш E-mail не буде опублікований. Обов'язкові поля відмічені *