Desenvolvimento

2 jul, 2018

A ES2018 finalmente saiu: o que tem de bom?

Publicidade

A tão esperada nona versão da especificação ECMAScript finalmente está disponível no site oficial, no formatos HTML e PDF (você acessá-los aqui). O documento possui mais de 800 páginas específicas com detalhes, não só do funcionamento de cada uma das novidades que serão implementadas nativamente no JavaScript, mas de todo o resto também. Como funcionam os tipos e suas operações, a sintaxe da linguagem, as funções, os objetos; está tudo detalhado lá.

O documento é extremamente importante e relevante, mas igualmente massivo e confuso. Para te poupar o trabalho de fazer essa leitura, neste artigo vamos dar uma breve olhada nas novidades que estão por vir (e que na verdade já estão sendo utilizadas desde que chegaram no Stage-4).

Lembrando que para utilizá-las, é sempre necessário consultar a disponibilidade delas nas respectivas engines dos navegadores. Para todo caso, o mais seguro em qualquer lançamento é utilizar o Babel (ou outro transpiler suportado), que fará o trabalho de converter todas as melhorias em código compatível com os navegadores.

E o ES6, ES7 e ES8?

Antes de começarmos, caso você ainda não tenha domínio do ES6 (ES2015), ES7 (ES2016) e/ou ES8(ES2017), recomendo fortemente que você os estude, principalmente o ES6. Nesta versão que vieram todas as grandes mudanças que estão sendo evoluídas nas especificações seguintes. Para te ajudar, vou disponibilizar abaixo o link dos meus cursos no Udemy com link promocional:

Espero que te ajude nos estudos.

Object Rest/Spread Properties

O ES6 nos presenteou com o desestruturamento de objetos, uma maneira de extrair de um objeto somente as características desejadas. Agora, é possível não só fazer isso, mas como resgatar todo o resto e armazená-lo em uma variável. Por exemplo:

const valores = {
  x:1, y:2, a:3, b:4
};

const {x,y, ...z} = valores;

console.log(x); // 1
console.log(y); // 2
console.log(z); // {a:3, b:4}

O mesmo para o inverso:

let n = { x, y, ...z };
console.log(n); // { x: 1, y: 2, a: 3, b: 4 }

O link da proposta está disponível aqui.

Asynchronous Iteration

Com a iteração assíncrona, temos iteradores e iteráveis assíncronos. Os iteradores assíncronos são como os iteradores regulares, exceto pelo método next(). Nos assíncronos, eles retornam uma promessa para um par {value, done}. Para consumir iterações assíncronas, agora podemos usar a palavra-chave await com loops do tipo for…of.

Como, por exemplo, para ler todas as linhas de um arquivo:

for await (const linha of lerLinhas(caminhoDoArquivo)) {
  console.log(linha);
}

O link da proposta está disponível aqui.

Promise.prototype.finally()

Para quem já conhece a estrutura de try-catch-finally, o finally das promises é basicamente igual. A ideia é que agora conseguimos invocar um método logo após a promise ser finalizada (aceita ou rejeitada). A vantagem é que isso vai economizar muitas linhas de código, pois não será necessário repetir o mesmo código no .then() e no catch().

Sua utilização segue esta linha:

fetch('http://api.github.com/users/DiegoPinho')
  .then(data => data)
  .catch(err => err)
  .finally(() => {
        // posso fazer qualquer coisa aqui
  })

O link da proposta está disponível aqui.

Conclusão

Estas são as principais novidades da especificação. Além destas novidades, há também coisas novas a RegExp (expressões regulares). Para quem tiver a curiosidade, segue o link das especificações:

Como prometido pelo TC39 em 2015, as especificações continuam saindo a cada ano e o JavaScript se torna ainda mais completo, divertido e gostoso de usar. Eu já estou ansioso para o que virá no ES2019, e vocês?

Referências