Тема 5. ФУНКЦИИ
Зачем нужны функции?
Функции являются модулями, из которых создаётся программа. Существуют, по крайней мере, две веские причины использовать функции: во-первых, они существенно упрощают разработку, отладку и поддержку программ, во-вторых, они могут позволить избежать дублирования кода. При грамотном использовании функций в программах отсутствуют запутанные логические конструкции, глубоко вложенные циклы и прочие нежелательные вещи. В конечном счете, использование функций делает программу легко читаемой и понятной даже программисту, который не участвовал в её разработке.
Функция – это часть программы (или подпрограмма), которая решает одну конкретную задачу. Точнее, данное определение относится к грамотно написанной функции, но именно к проектированию таких функций мы и стремимся. Функция может производить какие-то вычисления и возвращать полученный результат, а может просто выполнять последовательность действий и ничего не возвращать. Функция, которая не возвращает значения, в некоторых языках программирования называется процедурой. В объектно-ориентированном программировании функции называются методами.
Функцию часто представляют в виде черного ящика, который принимает что-то на вход и возвращает что-то на выходе.
Функции предназначены для того, чтобы их вызывать, а перед вызовом их требуется определить. Рассмотрим, как это делается. Для примера создадим функцию, которая приветствует пользователя на трёх разных языках.
//Определение функции
void say_hello() {
cout << "Hello!" << endl;
cout << "Bonjour!" << endl;
cout << "Привет!" << endl;
}
int main() {
//Вызов функции
say_hello();
return 0;
}
Разберём подробно эту программу. В данном случае функция не принимает никаких аргументов и не возвращает никакого значения: она просто выполняет некоторые действия, точнее, выводит три приветствия. Фактически мы просто назвали группу из трёх команд
cout << "Hello!" << endl;
cout << "Bonjour!" << endl;
cout << "Привет!" << endl;
именем say_hello(). После этого для выполнения этих команд достаточно вызвать функцию, другими словами, указать её имя, а не писать эти три команды. Таким образом, программа
int main() {
cout << "Hello!" << endl;
cout << "Bonjour!" << endl;
cout << "Привет!" << endl;
return 0;
}
Выполнит те же действия, что и программа
int main() {
say_hello();
return 0;
}
Заметим, что рассмотренная функция say_hello(), работает всегда одинаково. Рассмотрим теперь функцию, которая может работать по-разному от вызова к вызову. Создадим функцию, которая принимает в качестве аргумента целое число n и выводит на экран n звёздочек.
#include <iostream>
using namespace std;
void drawStars(int n) {
for (int i=1; i<=n; i++) {
cout << "*";
}
cout << endl;
}
int main() {
drawStars(10);
drawStars(2);
int x=7;
drawStars(x);
return 0;
}
Следующая функция вычисляет среднее арифметическое трех чисел и возвращает это значение
float average(float x, float y, float z) {
float sum = x+y+z;
return sum/3.0;
}
int main() {
cout << average(1,2,3) << endl;
cout << average(7,5,8) << endl;
cout << average(2,2,2) << endl;
}
Определение функции состоит из нескольких частей:
- тип возвращаемого значения;
- название функции;
- формальные параметры;
- тело функции;
- оператор return.