O documento apresenta as principais evoluções da linguagem Javascript na versão ECMAScript 6, incluindo novas funcionalidades como constants, arrow functions, template literals, classes, generators, promises e outras. O objetivo é expor os novos recursos disponíveis e demonstrar exemplos de sintaxe e utilização.
2. Contextualização
● O intuito desta apresentação é expor alguns dos recursos que estão disponíveis na
nova versão da linguagem;
● Demonstrar exemplo de sintaxe e utilização das novas features;
● Apresentar novos conceitos inseridos na linguagem;
6. Scoping
Criação de novos escopos com “{}”, isso permite que novos escopos sejam criados de
maneira mais fácil. No ES5 (ESMAScript 5) isso é era possível através da criação de
funções.
Code: Output:
8. Scoping
Let
Novo modificador que define um escopo local para variável, e ao contrário do
modificador “var” este novo modificador não participa do hoisting.
Code: Output:
9. Arrow Functions
● Muito semelhante ao Lambda do Java, essa funcionalidade tem se tornado muito
comum na maiorias das linguagens modernas. Ela tem o principio de tornar a
criação de código menos verbosa.
● Utilização mais intuitiva do this, com a implementação do this léxico na
linguagem, agora o this fica amarando ao contexto e não mais a onde a função é
chamada.
17. Não existe uma equivalência no ES5 (ESMAScript 5). Mas para ilustrar qual a
diferença se usar o operador, observe o exemplo abaixo.
Code: Output:
Extended Parameter
19. Template Literals
Tagged template literals
Funciona parecido com o spread operator, passando como parâmetro para a tag
function a string template e um rest parameter com as variáveis dinâmicas.
Code:
20. Template Literals
Tagged template literals
Funciona parecido com o spread operator, passando como parâmetro para a tag
function a string template e um rest parameter com as variáveis dinâmicas.
Output:
37. Modules
Suporte nativo a criação de módulos. Isso é uma importante ferramenta para
organização de código, reaproveitamento e para evitar poluição do escopo global.
Code:
38. Classes
Foi adicionado uma espécie de açúcar sintático auxilia a criação de objetos
(Prototypes) para quem vem de linguagens com paradigma OO (Object-oriented)
Code:
40. Iterators
Suporte a customização do comportamento de iterações, permite criar e manipular
iterações. Obrigatoriamente deve possuir um método chamado [Symbol.iterator] e
usar yield para retornar a resposta.
Code: Output:
41. Generators
Funções de controle de fluxo que gerenciam as chamadas, elas começam, param e
retornam o fluxo de execução. Sempre retorna um objeto que obedece o Iterador
Protocol ({ value, done }).
Code: Output:
42. Map/Set E Weak Map/Set
Map/Set
Estruturas de dados de mapa e conjunto.
Code: Output:
43. Map/Set E Weak Map/Set
Equivalente no ES5 (ESMAScript 5).
Code:
44. Map/Set E Weak Map/Set
Weak Map/Set
● Estruturas de dados de mapa e conjunto com fracas referências. Isso significa que
caso não haja referência para o objeto inserido ele será coletado pelo GC.
● Serve como um repositório fechado, não é possível recuperar os objetos depois de
armazenados, apenas apagá-los ou verificar se estão contidos dentro container.
Code:
45. Typed Arrays
● ArrayBuffer: um buffer binário genérico, de tamanho fixo que não pode ter seu
conteúdo alterado diretamente.
● Views: Novos objetos criados para manusear com mais eficiências que a API
Array, um typed array não passa no teste Array.isArray().
● DataView: sua função é permitir a navegação em estruturas complexas com
diferentes tipos de dados.
48. New Methods
Novos métdos adicionados a APIs já existentes :
● Array Element Finding
● Object Property Assignment
● String Repeating
● String Searching
● Number Type Checking
● Number Comparison
● Number Truncation
● ...
53. Meta-Programming
● Proxy: Define uma espécie de hook para objeto em runtime-time level. Permite
alterar ou adicionar comportamentos ao objeto.
● Reflection: permite e facilita acesso a Metadados e Meta-operadores (dos do
Prototype).
Code: Output:
54. Promises
Novo objeto nativo usado para execução de processos assíncronos que tomam muito
tempo, baseado no conceito de promessa de uma retorno após dado processamento. A
promise possui estados (pendente, rejeitado e realizada) e ao final chama uma ação
para de sucesso ou para falha.
https://developer.mozilla.org/pt-BR/docs/Web/JavaScript/Reference/Global_Objects/Promise