evoluindo seu código js com o es2015 e o es2016 (bruno gonçalves)

35
Evoluindo seu código JS com o ES2015 e o ES2016 Entendendo novas features do JS

Upload: concrete-solutions

Post on 09-Jan-2017

78 views

Category:

Technology


0 download

TRANSCRIPT

Page 1: Evoluindo seu código JS com o ES2015 e o ES2016 (Bruno Gonçalves)

Evoluindo seu código JS com o ES2015 e o ES2016

Entendendo novas features do JS

Page 2: Evoluindo seu código JS com o ES2015 e o ES2016 (Bruno Gonçalves)

Agenda – Fluxo de adição de novas features no JS– Es2016

• Var, let e const• De IIFEs para blocos• Arrow functions• Templates literais• Default params• Spread operator e rest params• Class• Classes derivadas• ES2016 modules

– Es2017• Array.prototype.includes• Exponential operator

Page 3: Evoluindo seu código JS com o ES2015 e o ES2016 (Bruno Gonçalves)

O que é o TC-39

Comite responsável pela evolução e manutenção do Javascript. Formado por pessoas ligadas à área de web, browsers vendors e empresas sem fins lucrativos.

Page 4: Evoluindo seu código JS com o ES2015 e o ES2016 (Bruno Gonçalves)

TC-39 wants

YOU

Page 5: Evoluindo seu código JS com o ES2015 e o ES2016 (Bruno Gonçalves)

Processo aberto à comunidade

“Minha opinião: A melhor feature do ES2016 foi o fato dela ter sido desenvolvida inteiramente via GitHub. É realmente maravilhoso o esforço da comunidade!”

- Brian Terlson, editor dos padrões do ECMAScript

Page 6: Evoluindo seu código JS com o ES2015 e o ES2016 (Bruno Gonçalves)

Fluxo de adição de novas features no JS

Proposta Esboço Candidata FinalizadaRascunho

Simplesmente o envio de propostas. Deve ser feito por algum membro ou contribuidor do TC-39, e em seguida as propostas são discutidas em reuniões.

Page 7: Evoluindo seu código JS com o ES2015 e o ES2016 (Bruno Gonçalves)

Fluxo de adição de novas features no JS

Proposta Esboço Candidata FinalizadaRascunho

Um membro do TC-39 é escolhido como responsável por essa proposta (champion). O problema a ser resolvido pela proposta deve ser descrito uma API deve ser

mostrada.

Page 8: Evoluindo seu código JS com o ES2015 e o ES2016 (Bruno Gonçalves)

Fluxo de adição de novas features no JS

Proposta Esboço Candidata FinalizadaRascunho

A especificação da proposta deve estar completa e um exemplo deve ser descrito usando Javascript. Duas implementações da proposta são necessárias, podendo

uma delas usar transpiladores (ex.: Babel)

Page 9: Evoluindo seu código JS com o ES2015 e o ES2016 (Bruno Gonçalves)

Fluxo de adição de novas features no JS

Proposta Esboço Candidata FinalizadaRascunho

A especificação da proposta é revisada por dois membros do TC-39, e então assinada pelos revisores e pelo champion responsável. Ao menos dois navegadores devem conter alguma implementação (não ativada por padrão), compatível com a

especificação.

Page 10: Evoluindo seu código JS com o ES2015 e o ES2016 (Bruno Gonçalves)

Fluxo de adição de novas features no JS

Proposta Esboço Candidata FinalizadaRascunho

A proposta está pronta para entrar formalmente como uma especificação do Javascript. É nesta etapa que os testes de aceitação devem ser mergeados com o

repositório de testes do JS - https://github.com/tc39/test262

Page 11: Evoluindo seu código JS com o ES2015 e o ES2016 (Bruno Gonçalves)

Var, let e const

Page 12: Evoluindo seu código JS com o ES2015 e o ES2016 (Bruno Gonçalves)

Var, let e const

var golsDoBrasil = 1;

var golsDaAlemanha = 7;

{

let golsDoBrasil = 2;

var golsDaAlemanha = 1;

golsDoBrasil; // 2

golsDaAlemanha; // 1

}

golsDoBrasil; // 1

golsDaAlemanha; // 1

const maioridadePenal = 18;

maioridadePenal = 16;

// Uncaught SyntaxError "maioridadePenal" is

read-only

const pessoa = {

corDeCabelo: “loiro”

};

pessoa.corDeCabelo = “castanho”;

pessoa.corDeCabelo; // castanho

Page 13: Evoluindo seu código JS com o ES2015 e o ES2016 (Bruno Gonçalves)

De IIFEs para blocos

Page 14: Evoluindo seu código JS com o ES2015 e o ES2016 (Bruno Gonçalves)

De IIFEs para blocos

(function () {

var tmp = ···;

}());

console.log(tmp); // ReferenceError

{

let tmp = ···;

}

console.log(tmp); // ReferenceError

Page 15: Evoluindo seu código JS com o ES2015 e o ES2016 (Bruno Gonçalves)

Arrow functions

Page 16: Evoluindo seu código JS com o ES2015 e o ES2016 (Bruno Gonçalves)

Arrow functions

var elementos = [

"Hidrogenio",

"Helio",

"Litio",

"Berilio"

];

var elementosMapeados = elementos.map(function(s){

return s.length;

});

var elementosMapeados2 = elementos.map( s => s.length );

Page 17: Evoluindo seu código JS com o ES2015 e o ES2016 (Bruno Gonçalves)

Arrow functions e o this

function Pessoa() {

this.idade = 0;

var pessoa = this;

setInterval(function crescer() {

this.idade++;

//‘this’ referencia a função crescer()

pessoa.idade++;

// ’pessoa’ referencia o objeto Pessoa

}, 1000);

}

function Pessoa(){

this.idade = 0;

setInterval(() => {

this.idade++;

//‘this’ referencia o objeto Pessoa

}, 1000);

}

var p = new Pessoa();

Page 18: Evoluindo seu código JS com o ES2015 e o ES2016 (Bruno Gonçalves)

Templates literals

Page 19: Evoluindo seu código JS com o ES2015 e o ES2016 (Bruno Gonçalves)

Template literais e interpolação de strings

const HTML = `

<!doctype html>

<html>

<head>

<meta charset="UTF-8">

<title></title>

</head>

<body>

</body>

</html>`;

var a = 5;

var b = 10;

console.log(`Quinze é ${a + b} e não ${2 *

a + b}.`);

// "Quinze é 15 e não 20."

Page 20: Evoluindo seu código JS com o ES2015 e o ES2016 (Bruno Gonçalves)

Default params

Page 21: Evoluindo seu código JS com o ES2015 e o ES2016 (Bruno Gonçalves)

Default params

function foo(x, y) {

x = x || 0;

y = y || 0;

}

function foo(x = 0, y = 0) {

···

}

Page 22: Evoluindo seu código JS com o ES2015 e o ES2016 (Bruno Gonçalves)

Spread operator e rest params

Page 23: Evoluindo seu código JS com o ES2015 e o ES2016 (Bruno Gonçalves)

Spread operator e rest params

function func(...args) {

console.log(args.length);

}

func(); // 0

func(1, 2); // 2

func(1, 2, 3); //3

var numbers = [1, 2, 3];

var myOthersNumbers = [...numbers, 4, 5, 6];

console.log(myOthersNumbers); //1, 2, 3, 4, 5, 6

Page 24: Evoluindo seu código JS com o ES2015 e o ES2016 (Bruno Gonçalves)

Spread operator e apply()

Math.max.apply(null, [-1, 5, 11, 3]);

//Es2015

Math.max(...[-1, 5, 11, 3]);

Page 25: Evoluindo seu código JS com o ES2015 e o ES2016 (Bruno Gonçalves)

Class

O tão querido sintax sugar

Page 26: Evoluindo seu código JS com o ES2015 e o ES2016 (Bruno Gonçalves)

Class

function Person(name) {

this.name = name;

}

Person.prototype.describe = function () {

return 'Person called ' + this.name;

};

var p = new Person('Foo');

class Person {

constructor(name) {

this.name = name;

}

describe() {

return `Person called ${this.name}`;

}

}

var p = new Person('Foo');

Page 27: Evoluindo seu código JS com o ES2015 e o ES2016 (Bruno Gonçalves)

Classes derivadas

Além de Class, agora temos extends e super

Page 28: Evoluindo seu código JS com o ES2015 e o ES2016 (Bruno Gonçalves)

Classes derivadas

function Employee(name, title) {

Person. call(this, name); // super(name)

this.title = title;

}

Employee.prototype = Object.create(Person. prototype);

Employee.prototype.constructor = Employee;

Employee.prototype.describe = function describe() {

return Person.prototype.describe. call(this) // super.describe()

+ ' (' + this.title + ')';

};

class Employee extends Person {

constructor(name, title) {

super(name);

this.title = title;

}

describe() {

return super.describe() + ' (' + this.title + ')

';

}

}

Page 29: Evoluindo seu código JS com o ES2015 e o ES2016 (Bruno Gonçalves)

ES2015 Modules

Page 30: Evoluindo seu código JS com o ES2015 e o ES2016 (Bruno Gonçalves)

Es2015 modules - exportando múltiplas funções

//------ lib.js ------

var sqrt = Math.sqrt;

function square(x) {

return x * x;

}

function diag(x, y) {

return sqrt(square(x) + square(y));

}

export {sqrt, square, diag};

//------ main1.js ------

import {sqrt, square, diag} from "lib"

console.log(square(11)); // 121

console.log(diag(4, 3)); // 5

Page 31: Evoluindo seu código JS com o ES2015 e o ES2016 (Bruno Gonçalves)

ES2016

Page 32: Evoluindo seu código JS com o ES2015 e o ES2016 (Bruno Gonçalves)

Exponential operator

var a = 2, b = 3;

a ** b // 8

var c = 2;

a ** (b ** c) // 512

Page 33: Evoluindo seu código JS com o ES2015 e o ES2016 (Bruno Gonçalves)

Array.prototype.includes

var boolean = array.includes(searchElement[, fromIndex]);

[1, 2, 3].includes(2); // true

[1, 2, 3].includes(4); // false

[1, 2, 3].includes(3, 3); // false

Page 35: Evoluindo seu código JS com o ES2015 e o ES2016 (Bruno Gonçalves)

www.concretesolutions.com.brblog.concretesolutions.com.br

Rio de Janeiro – Rua São José, 90 – cj. 2121Centro – (21) 2240-2030

São Paulo - Rua Sansão Alves dos Santos, 433 4º andar - Brooklin - (11) 4119-0449