Урок 11. Функции

Уроки для начинающих   1 Июль 2013  Автор статьи:  

На повестке дня стал вопрос о функциях, их назначении и применении. Очень часто бывает, что какой — то набор операторов нужно объединить в какой — то один кусок, чтобы иметь к нему доступ из различных участков кода. Например, у нас есть код вывода значений нашего массива. По условию некоторой задачи требуется вывести его и вначале программы, и в конце, и в середине. Сейчас мы вынуждены были бы писать один и тот же код несколько раз, возможно где — то ошиблись или еще что — то. Функции позволяют избегать таких ошибок.
Итак, как же все таки создавать функции?

1
2
3
4
void sample_function()
{
    cout<<"Hello, function!";
}

Мы видим обычную функцию, которая имеет имя sample_function, и которая выводит фразу «Hello, function!». Для того, чтобы вызвать данную функцию из кода достаточно написать следующее:

1
2
3
4
5
int main()
{
    sample_function();
    return 0;
}

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

1
2
3
4
5
6
7
8
9
10
void get_name()
{
    cout<<"Vasya";
}

void get_full_text()
{
    cout<<"Hi";
    get_name();
}

Я хотел обратить ваше внимание на расположение функций друг относительно друга, например, если поменять местами функции get_name и get_full_text, то мы получим ошибку компиляции, так как функция get_full_text не будет знать о существовании get_name. Отсюда следует, что всегда следует помнить о расположении функций друг относительно друга.
Теперь поговорим о магическом слове void перед объявлением функции, что оно означает и зачем нужно. Ключевое слово void говорит о том, что функция ничего не собирается возвращать. Реализуем сложение двух целых чисел с помощью функции add:

1
2
3
4
int add(int a, int b)
{
    return a + b;
}

Так как результат работы add целое число, то мы это и указываем вначале объявления функции. После этого в круглых скобочках мы указываем все значения, которые мы принимаем на вход. В данном случае нам достаточно двух значений, которые мы собираемся складывать, оба они целочисленного типа данных. Функция может принимать сколько угодно таких значений на вход, и естественно, что они могут быть разного типа. Вызов такой функции тоже достаточно прост:

1
2
3
4
5
6
7
int main()
{
    int value = 3;
    int res = add(2, value);
    cout<<res;//5
    return 0;
}

На самом деле main тоже функция, которая возвращает целочисленное значение, и которая, в нашем случае не принимает никаких значений на вход. Какой логический смысл у возвращаемого значения этой функции? В случае, если main вернет значение отличное от нуля, это будет говорить о том, что программа завершила работу с ошибкой. Номер этой ошибки — это и есть возвращаемое значение.
Оператор return нужен для того, чтобы возвращать какие — то значения из функции, т.е при его вызове, значение стоящее справа от него будет значением функции, при ее вызове. После выполнения оператора return все остальные операции не выполнятся, так как функция завершит свою работу. Может ли внутри функции находится несколько return-ов? Да, в дальнейшем, мы увидим зачем это может быть нужно.
Давайте подытожим все сказанное выше. Функция языка программирования — это набор операторов, который может вызываться из любой части программы по имени. Кроме этого, функция может принимать на вход некоторые значения и как — то использовать их внутри себя. Обычно функции используются для логического структурирования операторов, т.е объединения их по смыслу. На этом разговор о функциях еще не окончен, но мы вернемся к ним позже.


Функции в Java
Функции в Delphi

Научиться программировать

  • на Delphi

  • на Java

  • на C++