Percursos
/
Elixir
Elixir
/
Programa
/
Funções anónimas
Fu

Funções anónimas em Elixir

4 exercícios

Sobre Funções anónimas

As funções anónimas são muito usadas em todo o Elixir, por si só, como valores devolvidos e como argumentos em funções de ordem superior como Enum.map/2:

Enum.map([1, 2, 3], fn n -> n + 1 end)
# => [2, 3, 4]

Em Elixir, as funções são tratadas como cidadãos de primeira classe:

  • As funções nomeadas e as funções anónimas podem ser atribuídas a variáveis.
  • As funções nomeadas e as funções anónimas podem circular como dados, tanto como argumentos como valores devolvidos.
  • As funções anónimas podem ser criadas dinamicamente.

As funções anónimas criam-se com a palavra-chave fn e são invocadas com um ponto (.):

function_variable = fn n -> n + 1 end

function_variable.(1)
# => 2

As funções anónimas também podem ser criadas com a forma abreviada de captura &.

  • O & inicial marca o início da expressão de captura.

  • &1, &2 e assim por diante referem-se aos argumentos posicionais da função anónima.

    # Instead of:
    fn x, y -> abs(x) + abs(y) end
    
    # We can write:
    &(abs(&1) + abs(&2))
    
  • O operador de captura & também pode ser usado para capturar uma função nomeada existente:

    # Instead of:
    fn a, b -> a <= b end
    
    # We can capture the function using its name and arity:
    &<=/2
    

Em Elixir, as funções anónimas são closures. Conseguem aceder a variáveis que estão no âmbito quando a função é definida. As variáveis atribuídas dentro de uma função anónima não são acessíveis fora dela:

y = 2

square = fn ->
  x = 3
  x * y
end

square.()
# => 6

x
# => ** (CompileError): undefined function x/0
Editar via GitHub A ligação abre numa nova janela ou separador

Aprende Funções anónimas

A prática está bloqueada

Desbloqueia mais 1 exercício para praticares Funções anónimas