Erlang - Funções

Erlang é conhecido como uma linguagem de programação funcional, portanto, você esperaria ver muita ênfase em como as funções funcionam em Erlang. Este capítulo cobre tudo o que pode ser feito com as funções em Erlang.

Definindo uma função

A sintaxe de uma declaração de função é a seguinte -

Sintaxe

FunctionName(Pattern1… PatternN) ->
Body;

Onde,

  • FunctionName - O nome da função é um átomo.

  • Pattern1… PatternN- Cada argumento é um padrão. O número de argumentos N é a aridade da função. Uma função é definida exclusivamente pelo nome do módulo, nome da função e aridade. Ou seja, duas funções com o mesmo nome e no mesmo módulo, mas com aridades diferentes, são duas funções diferentes.

  • Body - Um corpo de cláusula consiste em uma sequência de expressões separadas por vírgula (,):

O programa a seguir é um exemplo simples do uso de funções -

Exemplo

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

add(X,Y) -> 
   Z = X+Y, 
   io:fwrite("~w~n",[Z]). 
   
start() -> 
   add(5,6).

As dicas a seguir devem ser observadas sobre o programa acima -

  • Estamos definindo duas funções, uma é chamada add que leva 2 parâmetros e o outro é o start função.

  • Ambas as funções são definidas com a função de exportação. Se não fizermos isso, não poderemos usar a função.

  • Uma função pode ser chamada dentro de outra. Aqui, estamos chamando a função add a partir da função inicial.

O resultado do programa acima será -

Resultado

11

Funções anônimas

Uma função anônima é uma função que não possui um nome associado a ela. Erlang tem a facilidade de definir funções anônimas. O programa a seguir é um exemplo de uma função anônima.

Exemplo

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

start() -> 
   Fn = fun() -> 
      io:fwrite("Anonymous Function") end, 
   Fn().

Os seguintes pontos precisam ser observados sobre o exemplo acima -

  • A função anônima é definida com o fun() palavra-chave.

  • A função é atribuída a uma variável chamada Fn.

  • A função é chamada por meio do nome da variável.

O resultado do programa acima será -

Resultado

Anonymous Function

Funções com vários argumentos

As funções Erlang podem ser definidas com zero ou mais parâmetros. A sobrecarga de funções também é possível, em que você pode definir uma função com o mesmo nome várias vezes, desde que tenham diferentes números de parâmetros.

No exemplo a seguir, a demonstração da função é definida com vários argumentos para cada definição de função.

Exemplo

-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).

No programa acima, estamos definindo a função add duas vezes. Mas a definição da primeira função add leva em dois parâmetros e o segundo leva em três parâmetros.

O resultado do programa acima será -

Resultado

11
17

Funções com sequências de guarda

As funções em Erlang também têm a capacidade de ter sequências de guarda. Estas nada mais são do que expressões que somente quando avaliadas como verdadeiras farão com que a função seja executada.

A sintaxe de uma função com uma sequência de guarda é mostrada no programa a seguir.

Sintaxe

FunctionName(Pattern1… PatternN) [when GuardSeq1]->
Body;

Onde,

  • FunctionName - O nome da função é um átomo.

  • Pattern1… PatternN- Cada argumento é um padrão. O número de argumentos N é a aridade da função. Uma função é definida exclusivamente pelo nome do módulo, nome da função e aridade. Ou seja, duas funções com o mesmo nome e no mesmo módulo, mas com aridades diferentes, são duas funções diferentes.

  • Body - O corpo de uma cláusula consiste em uma sequência de expressões separadas por uma vírgula (,).

  • GuardSeq1 - Esta é a expressão que é avaliada quando a função é chamada.

O programa a seguir é um exemplo simples do uso de uma função com uma sequência de guarda.

Exemplo

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

add(X) when X>3 -> 
   io:fwrite("~w~n",[X]). 

start() -> 
   add(4).

O resultado do programa acima é -

Resultado

4

Se a função add foi chamada como add(3), o programa resultará em um erro.