DEV Community

Lucas Cavalcante
Lucas Cavalcante

Posted on

Facilitando o entendimento da arrow function no PHP

Se você já estudou um pouco sobre programação funcional, provavelmente já ouviu falar sobre a função que nomeia este artigo. E além disso, se estudou Javascript, possivelmente já estudou muito sobre esse conceito.

Trago neste artigo uma dica rápida de como aplicar este conceito tão popular na programação funcional (amplamente popularizado pelo Javascript) dentro do PHP.

Arrow function

As arrow functions foram introduzidas no PHP a partir da versão 7.4 da linguagem, e tem como principais missões dar produtividade ao desenvolvedor e facilitar o trabalho com escopo.

Vamos ver um exemplo de código sem usar arrow function:

    $valorDoEmprestimo = 30000;
    $taxaDeJuros = 18.63;

    function calcularJuros($emprestimo, $taxa) {
        return $emprestimo * ($taxa/100);
    }

    var_dump(calcularJuros($valorDoEmprestimo, $taxaDeJuros));
Enter fullscreen mode Exit fullscreen mode

Vamos supor que essa taxa é fixa e não precisa ser passada como parâmetro:

    $valorDoEmprestimo = 30000;
    $taxaDeJuros = 18.63;

    function calcularJuros($emprestimo) {
        return $emprestimo * ($taxaDeJuros/100);
    }

    var_dump(calcularJuros($valorDoEmprestimo));
Enter fullscreen mode Exit fullscreen mode

Nesse caso, vamos receber um erro:

Undefined variable: taxaDeJuros
Enter fullscreen mode Exit fullscreen mode

Porque a variável $taxaDeJuros foi declarada fora da função calcularJuros e por conta do escopo, ela não é enxergada dentro da função. Aí que entra a arrow function.

Antes, vamos ver o mesmo exemplo de código com uma função anônima:

    $valorDoEmprestimo = 30000;
    $taxaDeJuros = 18.63;

    $jurosCalculados = function ($emprestimo) use ($taxaDeJuros) {
        return $emprestimo * ($taxaDeJuros/100);
    };

    var_dump($jurosCalculados($valorDoEmprestimo));
Enter fullscreen mode Exit fullscreen mode

Bom, resolvemos em parte o nosso problema. O use nos permite "herdar" variáveis do escopo pai. Não precisamos passar como parâmetro na função, mas ainda assim precisamos referenciar.

Agora, o mesmo exemplo de código usando arrow function:

    $valorDoEmprestimo = 30000;
    $taxaDeJuros = 18.63;

    $jurosCalculados = fn ($emprestimo) => $emprestimo * ($taxaDeJuros/100);

    var_dump($jurosCalculados($valorDoEmprestimo));
Enter fullscreen mode Exit fullscreen mode

Muito mais conciso, não é? Mas o que mudou? Vamos enumerar:

  1. Redução da palavra function para apenas fn
  2. Substituição do par de chaves { } pela arrow =>
  3. Supressão do return
  4. E, finalmente, não foi preciso referenciar a variável $taxaDeJuros em lugar nenhum. Ela simplesmente foi reconhecida por ser do escopo pai.

Fácil, né?

Se ficou alguma dúvida ou gostaria de dar um feedback, deixa um comentário. :)

No próximo artigo vou trazer outros conceitos da programação funcional usando as funções map, filter e reduce no PHP.

Discussion (0)