Percursos
/
Elixir
Elixir
/
Programa
/
Funções com múltiplas cláusulas
Fu

Funções com múltiplas cláusulas em Elixir

72 exercícios

Sobre Funções com múltiplas cláusulas

Em Elixir, uma única função pode ter várias cláusulas. Isto consegue-se através da correspondência de padrões com os argumentos da função e do uso de guards.

# pattern matching the argument
def number(7) do
  "Awesome, that's my favorite"
end

# using a guard
def number(n) when is_integer(n) do
  "That's not my favorite"
end

def number(_n) do
  "That's not even a number!"
end
  • Usa múltiplas cláusulas de funções para extrair a lógica de controlo das funções.
  • As cláusulas são tentadas por ordem, de cima para baixo do ficheiro de origem, até uma delas ter sucesso.
  • Se nenhuma tiver sucesso, a BEAM VM lança um FunctionClauseError.
  • Se as variáveis dos argumentos não forem usadas nem no corpo da função nem num guard, devem ser prefixadas com um _, caso contrário o compilador emite um aviso.
  • As funções anónimas também podem ter várias cláusulas.
    fn
      13 -> "Awesome, that's my favorite"
      _ -> "That's not my favorite"
    end
    

Repara que as funções com múltiplas cláusulas não devem ser confundidas com a sobrecarga de funções que possas conhecer de outras linguagens de programação. Em Elixir, as funções são identificadas apenas pelo nome e pela aridade, não pelos tipos dos argumentos (uma vez que não há tipagem estática). A função number/1 do exemplo é considerada uma única função, independentemente do número de cláusulas que tenha.

Editar via GitHub A ligação abre numa nova janela ou separador

Aprende Funções com múltiplas cláusulas

A prática está bloqueada

Desbloqueia mais 10 exercícios para praticares Funções com múltiplas cláusulas