Node.js v6 suporta praticamente toda a especificação ES6/ES2015

Em:

Com o release da 6ª versão do Node.js podemos contar com o suporte de praticamente toda especificação ES6/ES2015! Além de diversas mudanças notáveis, a versão 6 conta com a atualização do V8 para a versão 5.0, o que nos deixa com incríveis 93% de suporte para as features ES6/ES2015. Note que essa atualização inclui praticamente todas features realmente úteis para os desenvolvedores, já que o V8 (assim como outras implementações) tendem a priorizar o que é mais importante/relevante.

A versão 6 já é a versão atual e pode ser baixada agora mesmo! Se você usa o nvm, o upgrade pode ser feito via linha de comando: bash
nvm install v6
Resultado nvm install node v6

Sintaxe ES6/ES2015

Vamos ver algumas das features introduzidas com a versão 6:

default parameters

Nos permite inicializar parâmetros com valores padrão, caso nenhum valor tenha sido especificado, ou caso o valor seja undefined.

(function braziljs( date = '26 e 27 de Agosto',
                    city = 'Porto Alegre' ) {
  console.log(`BrazilJS Conf, ${date}, ${city}`);
}());

Veja mais sobre default parameters.

RegExp flags “y” e “u”

A RegExp /y, também chamada de sticky, busca apenas a partir do índice indicado pela propriedade lastIndex da expressão regular na string.

// Exemplo retirado da MDN
var str = '#foo#';
var regex = /foo/y;
regex.lastIndex = 1;
regex.test(str); // true
regex.lastIndex = 5;
regex.test(str); // false (lastIndex é levado em conta com a flag /y)
regex.lastIndex; // 0

A RefExp /u (unicode) lida com pares substitutos (tais como \uD83D\uDE80) como code points e permite que você use code points escapes Unicode (como o \u{1F680}) em expressões regulares.

"𠮷".match(/^.$/u)[0].length === 2;

Leia mais: http://www.2ality.com/2015/07/regexp-es6.html https://developer.mozilla.org/en/docs/Web/JavaScript/Reference/Global_Objects/RegExp/sticky http://stackoverflow.com/questions/4542304/what-does-regex-flag-y-do

PS: Para realmente entender Unicode na ES6/ES2015 (eu não entendi :/), leia o artigo do Mathias Bynens: https://mathiasbynens.be/notes/es6-unicode-regex

Destructuring

É uma expressão JavaScript que torna possível extrair dados de qualquer objeto que seja iterável e coloca-los em outras variáveis.

// Arrays
var [event, year] = ['BrazilJS', 2016]
console.log(event); // BrazilJS
console.log(year); // 2016

Arrays var braziljs = ["BrazilJS", "26 e 27 de Agosto", "Porto Alegre"];
var [event, date, city] = braziljs; 
console.log(event); // "BrazilJS" 
console.log(date); // "26 e 27 de Agosto" 
console.log(city); // "Porto Alegre"
// Objetos 
var event = { name: 'BrazilJS', date: '26 e 27 de Agosto' }; 
var { name, date } = event;
console.log(name); // BrazilJS 
console.log(date); // 26 e 27 de Agosto
// Generator
function* informacoes() {
  yield "BrazilJS";
  yield "26 e 27 de Agosto";
  yield "Porto Alegre";
}
var [event, date] = informacoes();
console.log(event); // BrazilJS
console.log(date); // 26 e 27 de Agosto

Veja mais sobre Destructuring.

let

O let já era suportado, porém somente em strict-mode. A partir da versão 6 já é possível usar o let a qualquer momento. O let declara uma variável em um escopo por bloco.

(function() { if(!braziljs) { let event = 'BrazilJS'; console.log(event); // BrazilJS } console.log(event); // event não existe }());

Vale lembrar que as semânticas do let em modo “sloppy” são diferentes, então o recomendado ainda é usar ele em strict-mode.

Veja mais sobre o let.

class

o suporte ao uso do class somente era possível em outras versões utilizando a flag --harmony. A partir da versão 6 o uso de classes pode ser feito a qualquer momento.

breathe () { console.log(`${this.name} is breathing`); } }
class Dog extends Animal { constructor(name) { super(name); }
bark() { console.log("Woof! Woof! " + this.name + ' is barking'); } }
let dog = new Dog('Costelinha'); dog.breathe(); // Costelinha is breathing dog.bark(); // Woof! Woof! Costelinha is barking

// Exemplo original em: https://github.com/jaydson/js-future-in-the-present

Leia mais sobre classes.

Proxy

Proxy é um objeto usado para definir um comportamento customizado para operações.

var handler = { get: function (target, name) { console.log(`Pegando ${name}`); } };
var event = new Proxy({}, handler); event.name = 'BrazilJS'; var n = event.name; // Pegando name

Saiba mais sobre Proxy.

Reflect

É um objeto que fornece métodos para operações que podem ser capturadas.

var obj = { name: "BrazilJS" };
var name = Reflect.get(obj, "name");
console.log(name); //BrazilJS

Saiba mais sobre Reflect.

Sobre módulos

Mas e a sintaxe de módulos ES6/ES2015? Nem o V8 e nem o Node.js ainda possuem suporte a módulos ES6/ES2015. Essa parte não é tão fácil de ser implementada e precisa de um estudo maior, que é o que está acontecendo no momento. Existem issues abertas no projeto node-eps, que é um repositório para discussões sobre possíveis funcionalidades futuras do Node.js. Além disso, existe uma proposta bem sólida, elaborada por Dave Herman, Yehuda Katz e Caridy Patiño, para solucionar o uso de módulos ES6/ES2015 no ambiente Node.js.

Saiba mais sobre módulos.

Conclusão

Ainda existem muitas outras features ES6/ES2015 não cobertas neste artigo, mas é possível notar que o suporte no Node.js está quase completo. É muito bom ver a evolução da plataforma e ver como o projeto está maduro e caminhando para um futuro cada vez mais promissor.

  • HyperTerm agora é Hyper.app

    O time da Zeit anunciou na última semana uma mudança no terminal JS/HTML/CSS desenvolvido pela empresa. O HyperTerm agora é Hyper.app. Guillermo Rauch, um dos fundadores da empresa, comentou que o projeto iniciou apenas como um experimento e se tornou um dos projetos mais populares no GitHub neste ano, com mais de 9.000 estrelas. O […]

  • Web Share API

    Recentemente, a equipe do Chrome anunciou que um de seus membros, o Matt Giuca, está trabalhando em uma proposta para uma simples API: o Web Share. Esta API permite que websites consigam invocar os recursos de compartilhamento nativos do Sistema Operacional. Um ponto importante da Web Share API é que o controle de onde e […]

  • Primeiros palestrantes da BrazilJS Conf 2017

    Todo ano a equipe BrazilJS se esforça ao máximo para trazer o melhor conteúdo e diversidade para a BrazilJS Conf, afinal, não é à toa que somos um dos principais eventos de tecnologia do país e a maior conferência JavaScript do mundo!

Patrocinadores BrazilJS

Gold

Bronze

BrazilJS® é uma iniciativa NASC.     Hosted by Getup