Урок 14. Почему функции полезны и как их эффективно использовать

   ⁄ 

 Обновлено 25 Фев 2018  ⁄ 

 ⁄   2 

⁄   5277

Теперь, когда мы уже знаем, что такое функции и зачем они нужны, давайте более подробно рассмотрим то, почему они так полезны.

Зачем использовать функции?

Начинающие программисты часто спрашивают: «А можно ли обходиться без функций и весь код помещать непосредственно в функцию main()?». Если кода всего 10-20 строк, то можно, если же серьёзно, то функции предназначены для упрощения кода, а не для его усложнения. Они имеют ряд преимуществ, которые делают их чрезвычайно полезными в нетривиальных программах:

  Структура. Как только программы увеличиваются в размере и в сложности, сохранять весь код внутри main() становится трудно. Функция — это как мини-программа, которую мы можем записать отдельно от головной программы, не заморачиваясь при этом об остальной части кода. Это позволяет разбивать сложные задачи на более мелкие и простые, что кардинально снижает общую сложность программы.

  Повторное использование. После объявления функции, её можно вызывать много раз. Это позволяет избежать дублирования кода и сводит к минимуму вероятность возникновения ошибок при копировании/вставке кода. Функции также могут использоваться и в других программах, уменьшая объем кода, который нужно писать с нуля каждый раз.

  Тестирование. Поскольку функции убирают лишний код, то тестировать кода остается меньше. И так как функция — это самостоятельная единица, то нам будет достаточно протестировать её один раз, чтобы убедиться в её работоспособности и можно будет без дальнейшего тестирования повторно использовать её много раз (до тех пор, пока мы не внесем изменения в эту функцию). Итого: меньше кода, проще поиск ошибок.

  Модернизация. Когда нужно внести изменения в программу или расширить её функционал — функции отличный вариант. С их помощью можно внести изменения в одном месте и всё будет корректно работать при каждом вызове этой функции.



  Абстракция. Для того, чтобы использовать функцию, нам нужно знать её имя, данные ввода, данные вывода и где эта функция находится. Нам не нужно знать, как она работает. Это очень полезно для написания понятного другим кода (например, стандартная библиотека С++ и всё, что в ней находится, создана по этому принципу).

Каждый раз, при вызове std::cin или std::cout для ввода или вывода данных, мы используем функцию из стандартной библиотеки C++, которая соответствует всем указанным выше критериям.

Эффективное использование функций

Одна из самых больших проблем, с которой сталкиваются новички (помимо изучения языка программирования) – разобраться: где, когда и как эффективно использовать функции. Вот несколько основных рекомендаций при написании функций:

  Код, который появляется более одного раза в программе, лучше переписать в виде функции. Например, если мы получаем данные от пользователя несколько раз одним и тем же способом, то это отличный вариант для написания отдельной функции.

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

  Функция должна выполнять одно (и только одно) задание.

  Когда функция становится слишком большой, сложной или непонятной – её следует разбить на несколько подфункций. Это называется рефакторинг (refactoring).

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

1. Получение данных от пользователя.

2. Обработка данных.

3. Вывод результата.

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

Новички часто комбинируют обработку ввода и вывод результата в одну функцию. Тем не менее, это нарушает правило «одного задания». Функция, которая обрабатывает значение, должна возвращать его в caller (объект, который вызывает функцию), а дальше пускай уже caller решает, что делать.



Оценить статью:

Звёзд: 1Звёзд: 2Звёзд: 3Звёзд: 4Звёзд: 5 (98 оценок, среднее: 4,99 из 5)
Загрузка...
Подписаться на обновления:

Комментариев: 2

  1. Семён:

    Спасибо ! Очень полезно и интересно , но и все уроки нужно подкреплять практикой и что бы хоть один раз получилось вызвать функцию , написать параметры и аргументы .

    1. Дима:

      В предыдущих уроках их предостаточно.
      Пример с ОК — круть

Добавить комментарий

Ваш e-mail не будет опубликован. Обязательные поля помечены *

ПОДПИСЫВАЙТЕСЬ

НА КАНАЛ RAVESLI В TELEGRAM

@ravesli

ПОДПИСАТЬСЯ БЕСПЛАТНО