Quando e por que vale a pena usar as funçÔes de seta ES6 e quando não

OlĂĄ Habr! Apresento a vocĂȘ a tradução do artigo " Quando (e por que) vocĂȘ deve usar as funçÔes de seta ES6 - e quando nĂŁo deve ", de Cynthia Lee.

As funçÔes de seta são o recurso mais popular do ES6. Esta é uma maneira nova e concisa de escrever funçÔes.

function timesTwo(params) { return params * 2 } timesTwo(4); // 8 

Agora o mesmo com a função de seta.

 var timesTwo = params => params * 2 timesTwo(4); // 8 

Muito mais curto! Podemos omitir chaves e a declaração de retorno (se não houver bloco, mas mais sobre isso posteriormente).

Vamos descobrir como o novo método difere do método usual.

Sintaxe


A primeira coisa que vocĂȘ notarĂĄ rapidamente sĂŁo as vĂĄrias variaçÔes de sintaxe. Vejamos os principais:

1. Sem parĂąmetros


Se a função nĂŁo tiver parĂąmetros, vocĂȘ pode simplesmente escrever parĂȘnteses vazios antes de =>

 () => 42 

Na verdade, vocĂȘ pode ficar sem suportes!

 _ => 42 

1. Um parĂąmetro


Os parĂȘnteses tambĂ©m sĂŁo opcionais

 x => 42 || (x) => 42 

3. VĂĄrios parĂąmetros


Aqui precisamos de parĂȘnteses

 (x, y) => 42 

4. InstruçÔes


Geralmente, uma expressão funcional retorna um valor, enquanto uma instrução é responsåvel pela ação.

Deve-se lembrar que, no caso de funçÔes de seta, se tivermos um conjunto de açÔes / instruçÔes, devemos usar chaves e a declaração de retorno.
Aqui estå um exemplo de função de seta usada com a instrução if:

 var feedTheCat = (cat) => { if (cat === 'hungry') { return 'Feed the cat'; } else { return 'Do not feed the cat'; } } 

5. O corpo do bloco fĂșngico


Mesmo que sua função simplesmente retorne valores, mas seu corpo esteja entre chaves, a instrução de retorno é necessåria.

 var addValues = (x, y) => { return x + y } 

6. literal do objeto


Se a função retornar um literal de objeto, ela deverĂĄ estar entre parĂȘnteses.

 x =>({ y: x }) 

FunçÔes de seta - anÎnimas


Observe que as funçÔes das setas sĂŁo anĂŽnimas; elas nĂŁo tĂȘm um nome.

Isso cria algumas dificuldades:

  1. DifĂ­cil de degradar

    Quando isso acontece, vocĂȘ nĂŁo poderĂĄ rastrear o nome da função e o nĂșmero da linha onde ocorreu o erro.
  2. NĂŁo pode ser atribuĂ­do a uma variĂĄvel

    Se vocĂȘ precisar de um link dentro da função para algo (recursĂŁo, um manipulador de eventos que precisa ser desfeito), nada funcionarĂĄ

Principal vantagem: nĂŁo isso


Nas funçÔes regulares, isso indica o contexto em que essa função é chamada. essa função da seta é a mesma do ambiente em que a função seta é declarada.

Por exemplo, veja a função setTimeout abaixo:

 // ES5 var obj = { id: 42, counter: function counter() { setTimeout(function() { console.log(this.id); }.bind(this), 1000); } }; 

No exemplo acima, vocĂȘ deve usar .bind (this) para passar o contexto para a função. Caso contrĂĄrio, isso serĂĄ indefinido.

 // ES6 var obj = { id: 42, counter: function counter() { setTimeout(() => { console.log(this.id); }, 1000); } }; 

Neste exemplo, vocĂȘ nĂŁo precisa vincular isso. A função de seta retira isso do fechamento.

Quando usar as funçÔes de seta


Agora, acho, ficou claro que as funçÔes de seta não substituem as comuns.

Aqui estĂŁo alguns exemplos em que Ă© improvĂĄvel que vocĂȘ queira usĂĄ-los.

1. Métodos de objeto


Quando vocĂȘ chama cat.jumps, o nĂșmero de vidas nĂŁo diminui. Isso ocorre porque isso nĂŁo estĂĄ vinculado a nada e herda o valor do fechamento.

 var cat = { lives: 9, jumps: () => { this.lives--; } } 

2. FunçÔes de retorno de chamada com contexto dinùmico


Se vocĂȘ precisar de um contexto dinĂąmico, uma função de seta Ă© uma opção ruim.

 var button = document.getElementById('press'); button.addEventListener('click', () => { this.classList.toggle('on'); }); 

Se clicarmos no botĂŁo, obtemos um TypeError. Isso ocorre porque isso nĂŁo estĂĄ vinculado a um botĂŁo.

3. Quando a legibilidade do cĂłdigo piora


Com as funçÔes usuais, fica sempre claro o que vocĂȘ queria dizer. Com pontas de seta, dadas as variadas opçÔes de sintaxe, algumas coisas se tornam menos Ăłbvias.

Quando exatamente vale a pena usar as funçÔes de seta


As funçÔes de seta sĂŁo Ăłtimas para casos em que vocĂȘ nĂŁo precisa do seu prĂłprio contexto de função.

TambĂ©m gosto muito de usar as funçÔes de seta em todos os tipos de map e reduce - o cĂłdigo lĂȘ dessa maneira melhor.

Source: https://habr.com/ru/post/pt413953/


All Articles