ECMAScript 6 Entre de cabeça no futuro do JavaScript
Diego Martins de PinhoPrefácio
O ano era 1995. Estava sendo criada uma nova plataforma de comunicação chamada mIRC (Internet Relay Chat Client), e a Microsoft acabava de lançar seu próprio navegador, o Internet Explorer. Ao mesmo tempo, surgia uma nova linguagem, ainda pouco compreendida e, até certo ponto, ridicularizada. Originalmente chamada de Mocha, posteriormente teve seu nome modificado para LiveScript e, por fim, ganhou a imortalidade como JavaScript.
Passadas mais de duas décadas desde o seu surgimento, é praticamente impossível imaginar a internet sem ela. E como é gratificante trabalhar com uma linguagem que evolui dessa maneira! O JavaScript hoje tem um papel fundamental na evolução da web.
O lançamento do ECMAScript 6, a mais recente atualização da especificação, traz uma série de novas features à linguagem. Recursos estes que vão influenciar diretamente no modo como desenvolvemos em JavaScript.
E, assim, o JS continuará sua evolução constante, como tem feito desde sua origem. Em consequência, você precisará evoluir em conjunto. Lembre-se sempre disso, pois a evolução está cada vez mais rápida.
Neste livro, Diego aborda de forma brilhante as principais mudanças que a ECMAScript 6 trouxe à linguagem. Ele não apresenta somente o conceito, mas sim como aplicá-lo na prática e em situações que todos nós vivemos no dia a dia.
Nós dois estivemos no Vale do Silício durante a iMasters DevTrip 2016, visitando algumas das principais empresas que são referência para nós desenvolvedores. Lá, ficou claro que a grande diferença entre os países não é técnica, mas sim a sua cultura de colaboração.
Lembre-se sempre de que o JavaScript é um código aberto, sem controle centralizado de corporações e de fácil aprendizado. Busque trabalhar em colaboração, integrando-se à comunidade e respeitando as características dessa linguagem criada por Brandan Eich, em 1995.
Conhecimento precisa ser compartilhado, e é exatamente isso que Diego faz neste livro. Parabéns, meu caro!
A você, que segura agora este exemplar, uma excelente leitura. Estude bastante estas páginas e, principalmente, espalhe o seu conhecimento.
Então, vamos começar?
Tiago Baeta — Fundador do iMasters — http://www.imasters.com.br
Introdução
Seja muito bem-vindo a uma nova era na história do JavaScript! Há muitos anos que a linguagem JavaScript não ganhava modificações e funcionalidades novas relevantes, mas isso mudou com a chegada da nova versão da especificação ECMAScript.
Nos últimos cinco anos, o JavaScript ganhou muita força com o "grande boom" do ecossistema Node.js e NPM. A flexibilidade da linguagem tem sido usada a favor não somente do lado do cliente, mas também do lado do servidor. Tudo isso fez com que a comunidade reconhecesse a força da linguagem e finalmente a levasse a sério.
UM BREVE RESUMO DO JAVASCRIPT NA ATUALIDADE
No início da década de 90, começaram a ser desenvolvidas as primeiras aplicações web. A internet estava tomando forma e as páginas começavam a ficar cada vez mais complexas. No entanto, a maior parte dos usuários que tinham acesso à internet utilizava conexões lentíssimas de, no máximo, 28.8 kbps. Você consegue se imaginar usando uma internet dessas hoje em dia? Nem eu.
Como você deve saber, essa velocidade de conexão não estava conseguindo acompanhar a evolução das aplicações web. Elas ficavam maiores e mais complexas, e a velocidade de acesso não conseguia lidar com isso.
Foi nesta época que o JavaScript — também conhecido por nomes como Mocha, LiveScript, JScript e ECMAScript —, uma das linguagens de programação mais famosas do mundo, nasceu. Ela foi criada em 1995 por um engenheiro da Netscape, chamado Brendan Eich. Originalmente batizada de LiveScript, ela foi lançada pela primeira vez com o Netscape 2, no início do ano de 1996, e prometia ajudar os navegadores dos usuários a acompanhar a evolução das aplicações web.
E para tentar embalar no sucesso na época da linguagem de programação Java, da Sun Microsystems (hoje pertencente a Oracle, que a comprou em 2009), a linguagem mudou o seu nome para JavaScript, mesmo tendo muito pouco em comum com a linguagem Java (e isso causa muita confusão até hoje!). Por este e mais tantos outros motivos, o JavaScript sempre foi conhecido por ser a linguagem de programação mais incompreendida do mundo.
Embora ela tenha sido ridicularizada por muitos anos por ser uma “linguagem de brincadeira”, hoje, praticamente após 20 anos do seu lançamento, ela cresceu absurdamente na comunidade de desenvolvedores, tornou-se mais robusta, poderosa e é usada em uma infinidade de aplicações de alto nível, tanto no front-end quanto no back-end das aplicações. Ela é a tecnologia por trás de ferramentas, frameworks e bibliotecas consagradas no mercado, tais como: Angular, Ember, React, Backbone, jQuery, Grunt... A lista é enorme. Atualmente, é essencial que um profissional de TI tenha domínio desta tecnologia, tanto para aplicações web, aplicativos mobile e/ou desktop.
É exatamente para isto que este livro foi escrito. Para que você seja capaz de entender todas as mudanças que vieram com o ECMAScript 6, aprimorar suas habilidades como desenvolvedor e se destacar no mercado de trabalho que hoje é tão concorrido.
A QUEM SE DESTINA ESTE LIVRO
Este livro é destinado aos desenvolvedores web que tenham, pelo menos, conhecimentos básicos da linguagem JavaScript. A seguir, seguem os principais tópicos que é necessário ter pelo menos um conhecimento básico para melhor aproveitamento do conteúdo: Declaração de funções e variáveis; Estrutura de dados: objetos e arrays; Funções anônimas e de callback; Escopos; Herança por prototipagem.
Ter domínio desses conceitos, mesmo que seja somente o básico, será essencial. Ao longo do livro, tomei o cuidado de fazer revisões nos principais tópicos da linguagem, mas é imprescindível ter um conhecimento prévio.
Caso você ainda não esteja totalmente seguro sobre os seus conhecimentos nestes tópicos, procure ler alguns livros e artigos, assistir videoaulas, fazer alguns cursos e pequenos experimentos com a linguagem. A internet está recheada de material gratuito de altíssima qualidade sobre o assunto. Dê uma olhada no capítulo de recomendações para ver algumas dicas legais.
Uma vez que você conheça pelo o básico destes tópicos, estará pronto para seguir em frente!
O QUE VOU APRENDER NESTE LIVRO?
Neste livro, abordaremos as principais mudanças que a nova versão da especificação trouxe para a linguagem. Aprenderemos não somente o conceito, mas como aplicá-lo na prática em situações reais. Dentre elas, estão: Novas maneiras de iterar objetos e coleções; Declaração de variáveis com let e const; Melhorias em funções com arrow functions; As novas de estruturas de Map, WeakMap, Set e WeakSet; Modularização e classes; Geradores e símbolos; E muito mais.
COMO DEVO ESTUDAR COM ESTE LIVRO?
Este livro foi estruturado de modo que os tópicos apresentados se complementem e se tornem gradualmente mais complexos ao decorrer da leitura. Em todos eles, serão apresentados diversos conceitos, sempre apoiados por códigos contextualizados em casos de uso reais, seguindo as boas práticas. Você notará não somente a evolução dos conceitos, mas também a dos códigos apresentados à medida que a leitura for seguindo.
Como acredito que somente com a prática que aprendemos a programar e fixar o conhecimento, no repositório deste livro no GitHub, você encontrará uma série de exercícios elaborados pensando na prática dos tópicos apresentados. Junto aos exercícios, você também encontrará o gabarito comentado. No final do livro, também há uma série de recomendações de livros, artigos e cursos para que você se aprofunde nos estudos.
Consulte o livro sempre que surgirem dúvidas e entre contato sempre que sentir necessidade. Leia e releia até compreender os conceitos. Não tenha pressa.
Em caso de dúvidas, estarei sempre a disposição. Não deixe de comentar e participar das discussões sobre o livro e os exercícios no site oficial e nos nossos canais de comunicação! O site e o repositório continuarão sendo atualizados com novos exercícios, artigos, notícias e projetos de exemplo. Vamos aprender juntos! E o mais importante: nunca deixe de praticar!
Edição atualizada: a evolução do JavaScript não para!
Desde a primeira edição deste livro, que foi lançada em março de 2017, o TC39 — comitê da ECMA Internacional responsável por manter a ECMA-262, especificação que define as características e comportamentos da linguagem JavaScript — lançou mais duas versões da especificação, o ECMAScript 2016 (ES7) e o ECMAScript 2017 (ES8). Ambas as especificações são relativamente menores em relação à versão do ECMAScript 2015 (ES6), mas isso não significa que as funcionalidades adicionadas sejam inúteis, muito pelo contrário, são extremamente importantes e são a evolução de mecanismos trazidos na versão de 2015, como é o caso do async/await.
Para que os leitores continuem evoluindo junto com a linguagem, adicionei dois capítulos extras a esta obra. No primeiro capítulo, vamos explorar com detalhes as funcionalidades do ES7. Lá falaremos sobre o novo operador exponencial — representado por dois asteriscos seguidos (**) — e o Array.prototype.includes.
No segundo capítulo, falaremos sobre o ES8. Esta edição acabou compensando a anterior e trouxe ainda mais ferramentas para o desenvolvedor JavaScript. Lá falaremos sobre os métodos Object.values e Object.entries, padStart e padEnd, Object.getOwnPropertyDescriptors e o poderoso mecanismo de async/await.
E não para por aí. O comitê já está trabalhando no ESNext (nome utilizado para se referir à próxima versão da ECMAScript). Com o tempo, mais funcionalidades serão adicionadas e precisaremos continuar estudando para nos manter atualizados. O JavaScript está em constante evolução, mas com este livro, você também estará.
Boa leitura e ótimos códigos!
Sumário
- 1 ECMAScript x JavaScript
- 1.1 Implementações da especificação
- 1.2 Breve histórico
- 1.3 Futuro
- 2 Precisamos falar sobre o Babel
- 2.1 Outras ferramentas
- 3 Métodos auxiliares para Array
- 3.1 A maneira tradicional de iterar um Array
- 3.2 forEach
- 3.3 map
- 3.4 filter
- 3.5 find
- 3.6 every
- 3.7 some
- 3.8 reduce
- 4 Iteração com iteradores e iteráveis
- 4.1 Iteradores
- 4.2 Iteráveis
- 4.3 Iteradores e iteráveis na prática
- 5 Iteração com o laço for...of
- 5.1 Diferenças entre o for...of e for...in
- 5.2 break e continue
- 5.3 Voltando para o Chapéu Seletor
- 6 As novas estruturas de Map e WeakMap
- 6.1 Map
- 6.2 WeakMap
- 6.3 Administrando uma biblioteca
- 7 Listas sem repetições com Sets e WeakSets
- 7.1 Set
- 7.2 WeakSet
- 8 Declaração de variáveis com const e let
- 8.1 Constantes com const
- 8.2 let é o novo var
- 8.3 Qual a diferença, no final das contas?
- 9 Manipulação de textos com template strings
- 9.1 Template strings simples
- 9.2 Template strings marcado
- 10 Arrow functions
- 10.1 São menos verbosas
- 10.2 O contexto de execução é diferente
- 11 Melhorias em objetos literais
- 11.1 Declaração de propriedades
- 11.2 Índices de propriedades computadas
- 11.3 Objetos literais x JSON
- 12 Parâmetros predefinidos em funções
- 12.1 Atribuindo valores padrões
- 12.2 Valores undefined
- 12.3 Referenciando outros valores padrões
- 12.4 Referenciando variáveis internas
- 12.5 Utilizando funções como valores padrões
- 12.6 Tornando parâmetros obrigatórios
- 13 Parâmetros infinitos com operador Rest
- 13.1 Entenda o que arguments faz
- 13.2 Arguments X Operador Rest
- 13.3 Particularidades do operador Rest
- 13.4 Podemos utilizar em conjunto com parâmetros “fixos”
- 14 Expansão com o operador Spread
- 14.1 Fazendo compras com o Spread
- 14.2 Adicionando itens a um Array
- 14.3 Operador Spread em chamadas de funções
- 14.4 Operador Rest x Operador Spread
- 15 Desestruturamento de Arrays e Objetos
- 15.1 Rotulando propriedades
- 15.2 Desestruturamento de vários objetos
- 15.3 Desestruturamento em retorno de chamadas de métodos
- 15.4 Desestruturamento de Arrays
- 15.5 Desestruturando Arrays — Parte 2
- 16 Modelando com classes
- 16.1 Utilize classes do ES6
- 16.2 Estendendo classes
- 16.3 Hoisting em classes
- 16.4 Declaração por meio de expressões
- 16.5 Métodos estáticos
- 16.6 Atributos privados com WeakMap
- 16.7 Últimas considerações
- 17 Módulos
- 17.1 CommonJS x AMD
- 17.2 Importar e exportar módulos
- 17.3 Exportando classes
- 17.4 Rótulos em módulos
- 17.5 Últimas considerações
- 18 Funções geradoras
- 18.1 O que são funções geradoras?
- 18.2 Iterações com geradores
- 18.3 Entendendo o Symbol.iterator
- 18.4 Delegação de funções geradoras
- 19 Operações assíncronas com promises
- 19.1 O que são promises?
- 19.2 Os estados das promises
- 19.3 O esqueleto de uma promise
- 19.4 Operações assíncronas
- 19.5 Aninhamento de then e catch
- 19.6 Como lidar com erros inesperados
- 20 Metaprogramação com proxies
- 20.1 O que é metaprogramação?
- 20.2 Voltando para os proxies
- 20.3 Validações de inputs com proxies e traps
- 20.4 Desativando um proxy
- 20.5 Últimas considerações
- 21 Um futuro brilhante para o JavaScript
- 22 ECMAScript 2016 (ES7)
- 22.1 Operador Exponencial (**)
- 22.2 Array.prototype.includes
- 23 ECMAScript 2017 (ES8)
- 23.1 Object.values e Object.entries
- 23.2 padStart e padEnd
- 23.3 Das Promises ao async/await
- 24 Recomendações
- 25 Referências
Dados do produto
- Número de páginas:
- 227
- ISBN:
- 978-85-5519-258-6
- Data publicação:
- 03/2017. Atualizado em 05/2018.