Facilitando o entendimento da arrow function no PHP

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

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

Nesse caso, vamos receber um erro:

Undefined variable: taxaDeJuros

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

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

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.