Обзор функций

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

В разных функциональных языках для написания функции используется разный синтаксис.

Предпосылки для написания функции

Перед написанием функции программист должен знать следующие моменты:

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

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

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

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

Управление потоком функции

Когда функция «вызывается», программа «передает» управление для выполнения функции, и ее «поток управления» выглядит следующим образом:

  • Программа переходит к оператору, содержащему «вызов функции».

  • Выполняется первая строка внутри функции.

  • Все операторы внутри функции выполняются сверху вниз.

  • Когда функция выполняется успешно, управление возвращается к тому оператору, с которого оно началось.

  • Любые данные, вычисленные и возвращенные функцией, используются вместо функции в исходной строке кода.

Синтаксис функции

Общий синтаксис функции выглядит следующим образом -

returnType functionName(type1 argument1, type2 argument2, . . . ) {     
   // function body 
}

Определение функции в C ++

Давайте рассмотрим пример, чтобы понять, как функция может быть определена на C ++, который является объектно-ориентированным языком программирования. В следующем коде есть функция, которая складывает два числа и предоставляет результат в качестве вывода.

#include <stdio.h> 

int addNum(int a, int b);     // function prototype  

int main() {    
   int sum; 
   sum = addNum(5,6);         // function call 
   printf("sum = %d",sum); 
   return 0; 
}  
int addNum (int a,int b) {    // function definition      
   int result; 
   result = a + b; 
   return result;             // return statement 
}

Он выдаст следующий результат -

Sum = 11

Определение функции в Erlang

Давайте посмотрим, как ту же функцию можно определить в Erlang, который является функциональным языком программирования.

-module(helloworld).  
-export([add/2,start/0]).   

add(A,B) ->
   C = A + B,  
   io:fwrite("~w~n",[C]).  
start() ->  
   add(5,6).

Он выдаст следующий результат -

11

Прототип функции

Прототип функции - это объявление функции, которое включает тип возвращаемого значения, имя функции и список аргументов. Это похоже на определение функции без тела функции.

For Example - Некоторые языки программирования поддерживают создание прототипов функций, а некоторые - нет.

В C ++ мы можем сделать прототип функции функции sum следующим образом:

int sum(int a, int b)

Note - Языки программирования, такие как Python, Erlang и т. Д., Не поддерживают прототипирование функций, нам нужно объявить полную функцию.

Какая польза от прототипа функции?

Прототип функции используется компилятором при вызове функции. Компилятор использует его для обеспечения правильного возвращаемого типа, правильного списка аргументов и правильности их возвращаемого типа.

Подпись функции

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

void Sum(int a, int b, int c);         // function 1  
void Sum(float a, float b, float c);   // function 2  
void Sum(float a, float b, float c);   // function 3

Function1 и Function2 имеют разные сигнатуры. Function2 и Function3 имеют одинаковые подписи.

Note - Перегрузка функций и переопределение функций, которые мы обсудим в следующих главах, основаны на концепции сигнатур функций.

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

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