Эрланг известен как функциональный язык программирования, поэтому вы ожидаете увидеть большой акцент на том, как работают функции в Erlang. В этой главе описывается, что можно сделать с помощью функций в Erlang.
Синтаксис объявления функции выглядит следующим образом:
FunctionName(Pattern1… PatternN) ->
Body;
- FunctionName - имя функции - это атом.
- Pattern1 ... PatternN - Каждый аргумент является шаблоном. Число аргументов N - это арность функции. Функция уникально определяется именем модуля, именем функции и arity. То есть две функции с одним и тем же именем и в одном модуле, но с разными уровнями - две разные функции.
- Body - состоит из последовательности выражений, разделенных запятой (,):
Следующая программа представляет собой простой пример использования функций:
-module(helloworld).
-export([add/2,start/0]).
add(X,Y) ->
Z = X+Y,
io:fwrite("~w~n",[Z]).
start() ->
add(5,6).
Следует отметить следующие указатели относительно вышеуказанной программы -
- Мы определяем две функции: один называется add, который принимает 2 параметра, а другой - функцию начала
- Обе функции определяются с помощью функции экспорта. Если мы этого не сделаем, мы не сможем использовать эту функцию
- Одна функция может быть вызвана внутри другой. Здесь мы вызываем функцию add из функции start
Анонимные функции
Анонимная функция - это функция, у которой нет имени, связанного с ней. У Erlang есть возможность определять анонимные функции. Следующая программа является примером анонимной функции.
-module(helloworld).
-export([start/0]).
start() ->
Fn = fun() ->
io:fwrite("Anonymous Function") end,
Fn().
Необходимо отметить следующие моменты в приведенном выше примере.
- Анонимная функция определяется ключевым словом fun ()
- Функция назначается переменной Fn.
- Функция вызывается через имя переменной.
Функции с несколькими аргументами
Функции Erlang могут быть определены с нулевым или большим количеством параметров. Также возможна перегрузка функций, в которой вы можете определить функцию с тем же именем несколько раз, если у них есть различное количество параметров.
-module(helloworld).
-export([add/2,add/3,start/0]).
add(X,Y) ->
Z = X+Y,
io:fwrite("~w~n",[Z]).
add(X,Y,Z) ->
A = X+Y+Z,
io:fwrite("~w~n",[A]).
start() ->
add(5,6),
add(5,6,6).
В приведенной выше программе мы дважды определяем функцию добавления. Но определение первой функции добавления принимает два параметра, а второе принимает три параметра.
Функции с охранными последовательностями
Функции в Erlang также могут иметь защитные последовательности. Это не что иное, как выражения, которые только при оценке на true вызовут функцию. Синтаксис функции с защитной последовательностью показан в следующей программе.
FunctionName(Pattern1… PatternN) [when GuardSeq1]->
Body;
- FunctionName - имя функции - это атом.
- Pattern1 ... PatternN - Каждый аргумент является шаблоном. Число аргументов N - это арность функции. Функция уникально определяется именем модуля, именем функции и arity. То есть две функции с одним и тем же именем и в одном модуле, но с разными уровнями - две разные функции.
- Body - предложения - состоит из последовательности выражений, разделенных запятой (,).
- GuardSeq1 - это выражение, которое оценивается при вызове функции.
Следующая программа представляет собой простой пример использования функции с защитной последовательностью.
-module(helloworld).
-export([add/1,start/0]).
add(X) when X>3 ->
io:fwrite("~w~n",[X]).
start() ->
add(4).
0 комментариев