Blog fellyph cintra - trabalhando com arrow function javascript blog fellyph

Diferença entre Arrow function e traditional function em JavaScript

Além de um formato mais elegante na escrita de funções arrow function possui uma diferença importante sobre as funções tradicionais JavaScript.

Com EcmaScript 6 JavaScript, também conhecido como ES6 tivemos a adição de vários recursos, incluindo suporte para classes, módulos e arrow functions assunto que abordaremos nesse artigo.

O que é arrow function?

Primeiramente, se você não está familiarizado com arrow function, elas foram introduzidas na versão do EcmaScript 6 ou também conhecido EcmaScript 2015. Vamos comparar os dois formatos:

Formato tradicional

const saudacoes = function(nome) {
  return `Olá, ${nome}`
}Code language: JavaScript (javascript)

Arrow function

const saudacoes = nome => `Olá, ${nome}`;Code language: JavaScript (javascript)

Mas as diferenças não são apenas na escrita, o arrow function também possui algumas particularidades, a primeira delas é que elas sempre são funções anónimas, além disso, o seu comportamento muda referente a função tradicional.

Valor this

Por muitos anos a chamada do valor this foi uma dor de cabeça para quem estava começando com JavaScript, pois o seu valor era dinâmico, e o que isso significa?

O contexto mudava de como a função era chamada. Criemos uma classe para entender esse ponto:

class Pessoa {
    constructor(nome) {
        this.nome = nome;
    }

    nomeComArrow() {
        setTimeout(() => {
            console.log(this.nome);
        }, 100);
    }

    nomeComTradicional() {
        setTimeout(function() {
            console.log(this.nome);
        }, 100);
    }
}

const fellyph = new Pessoa('Fellyph');
fellyph.nomeComArrow();
fellyph.nomeComTradicional();Code language: JavaScript (javascript)

Se executarmos o código acima com node, teremos um erro no método nome tradicional.

Testando Arrow function javascript
Testando Arrow function javascript

Como podemos ver a primeira chamada acontece, mas a segunda gera um erro porque o this é undefined, isso acontece pelo fato do escopo dinâmico, com arrow mantém o this como a classe Pessoa. Já a função tradicional é chamada na última linha fora da classe assim o this aponta para raiz da aplicação, caso esse código rode no navegador o this seria o window.

Uso de construtores

Com as funções tradicionais podemos utilizar a palavra-chave new para criar uma instância de um tipo que criamos via função:

function Cidade(nome) {
    this.nome = nome;
}

const caruaru = new Cidade('Caruaru');
console.log(caruaru instanceof Cidade);Code language: JavaScript (javascript)

Caso queiramos usar construtores em arrow-function, tiremos ter um erro: TypeError: Cidade is not a constructor.

Objeto de argumentos

Nas funções tradicionais temos um objeto onde são armazenados todos os argumentos passados para a função. Esse objeto pode ser acionado pela palavra-chave arguments.

function funcaoTradicional() {
    console.log(arguments);
}
funcaoTradicional('a', [1, 2], fellyph); Code language: JavaScript (javascript)

Mesmo sem especificar quais os argumentos foram passados para função, conseguimos acessar com a chamada do objeto arguments.

Testando o objeto arguments
Testando o objeto arguments

Já com a arrow function, não temos objeto atrelado a função, se executarmos o código em node, teremos o retorno dos argumentos da aplicação node e se utilizarmos o this teremos undefined como retorno.

const funcaoTradicional = () => {
    console.log(this.arguments);
}
funcaoTradicional('a', [1, 2], fellyph); Code language: JavaScript (javascript)

Return Implícito

Um dos recursos que simplificam ainda mais o uso de funções arrow é o uso do return implícito, no começo do tutorial utilizei um exemplo onde tinha a seguinte função:

const saudacoes = nome => `Olá, ${nome}`;
console.log(saudacoes('José'));Code language: JavaScript (javascript)

Neste caso, a ausência das chaves, sinalizam que essa função retorna uma string com `Olá, ${nome}`. Isso pode ser utilizado para cálculos e retorno de valores.

Essas foram minhas considerações sobre as principais diferenças entro funções tradicionais e funções de arrow. Esse novo formato ajuda bastante na hora de escrever funções em JavaScript. Mas, ainda existem exceções que o formato tradicional é necessário.

Apesar de ser uma funcionalidade já a um bom tempo na especificação do JavaScript ainda tem muita gente que não usa os benefícios da arrow function. Muita gente tem receio por conta do suporte dos navegadores, um dos empecilhos era a falta de suporte pelo Internet Explorer 11 que foi descontinuado este ano.

Suporte as funções de arrow pelos principais navegadores
Suporte as funções de arrow pelos principais navegadores é de mais de 96%

Para aprender mais sobre JavaScript, continue lendo os posts sobre o assunto no blog.

Veja mais conteúdo relacionado:


Publicado

em

por

Tags:

Comentários

Deixe um comentário

O seu endereço de e-mail não será publicado. Campos obrigatórios são marcados com *