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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

Функциональный прототип

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

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

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

int sum(int a, int b) 

Примечание. Языки программирования, такие как 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 имеют одинаковые подписи.

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

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

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