ecmascript 6, o futuro do javascript hoje

59
ECMASCRIPT 6 O futuro do Javascript hoje

Upload: henrique-limas

Post on 16-Jul-2015

191 views

Category:

Software


0 download

TRANSCRIPT

Page 1: Ecmascript 6, O futuro do Javascript hoje

ECMASCRIPT 6O futuro do Javascript hoje

Page 2: Ecmascript 6, O futuro do Javascript hoje

HENRIQUE LIMASgoogle.com/+HenriqueRamosLimas

github/HenriqueLimas [email protected]

Page 3: Ecmascript 6, O futuro do Javascript hoje

DECLARAÇÕES DE VARIÁVEIS

Page 4: Ecmascript 6, O futuro do Javascript hoje

let jedi = { firstName: 'Luke', lastName: 'Skywalker' }; !

if (jedi) { let darkSide = false; } !

console.log(darkSide); !

Erro na execução

Variaveis podem ser acessada somente no

escopo

let

Page 5: Ecmascript 6, O futuro do Javascript hoje

const JEDI_MASTER = { name: 'Yoda' }; !

JEDI_MASTER = jedi; !

conts DARTH; !

!

const

Variáveis devem ser inicializaras

Erro de “read-only”

Page 6: Ecmascript 6, O futuro do Javascript hoje

let [force, darkSide] = ['Yoda', ‘Darth Sidious']; !

let {force, darkSide} = {force: 'Yoda', darkSide: 'Darth Sidious'}; !

!

!

!

Destructuring

Page 7: Ecmascript 6, O futuro do Javascript hoje

CHAVES DE OBJETOS

Page 8: Ecmascript 6, O futuro do Javascript hoje

let jedi = { ['full' + 'Name']: 'Luke Skywalker' }; !

console.log(jedi.fullName); !

!

!

!

Keys computadas

Page 9: Ecmascript 6, O futuro do Javascript hoje

function novoJedi(firstName, lastName) { return { firstName, lastName }; } !

!

!

firstName: firstName

Keys abreviadas

Page 10: Ecmascript 6, O futuro do Javascript hoje

PARÂMETROS E ARGUMENTOS

Page 11: Ecmascript 6, O futuro do Javascript hoje

function novoJedi( {firstName, lastName} ) { console.log(firstName); console.log(lastName); } !

!

novoJedi( {firstName: 'Luke', lastName: ‘Skywalker'} ); !

!

Nomeando parâmetros

Usando “Destructuring”

Page 12: Ecmascript 6, O futuro do Javascript hoje

function novoJedi(firstName='Luke', lastName='Skywawlker') { console.log(firstName); console.log(lastName); } !

!

novoJedi(); !

!

firstName = firstName || ‘Luke’;

Parâmetros default

Page 13: Ecmascript 6, O futuro do Javascript hoje
Page 14: Ecmascript 6, O futuro do Javascript hoje

function novoJedi(firstName, lastName, ...forcas) { return { firstName, lastName, forcas }; } !

novoJedi('Luke', 'Skywalker', 'sabre de luz', 'força'); !

Usando os “…”

Parâmetros Rest

Page 15: Ecmascript 6, O futuro do Javascript hoje

new Date(...[1977, 5, 25]); !

let arr = [42, 23, 21]; !

Math.max(…arr); !

!

!

!

Math.max(42, 23, 21);

new Date(1977, 5, 25)

Spread operator

Page 16: Ecmascript 6, O futuro do Javascript hoje

let jedi = { firstName: 'Luke', lastName: 'Skywalker' }; !

let DarthVader = `${jedi.firstName} ${jedi.lastName}, I am your father.`; !

!Chamando o objeto “jedi”

Template Strings

Page 17: Ecmascript 6, O futuro do Javascript hoje

let jedis = ['Luke Skywalker', 'Obi-wan Kenobi']; !

jedis.forEach( jedi => { console.log(jedi); }); !

!

!

!

Usando a “flecha”

Arrows function

Page 18: Ecmascript 6, O futuro do Javascript hoje

let jedis = ['Luke Skywalker', 'Obi-wan Kenobi']; !

let theForce = { jedis, printJedis: function() { jedis.forEach((jedi, key) => { console.log(this.jedis[key]); }); } } !

console.log(theForce.printJedis());

Mesma referência do objeto “theForce”

Arrows function

Page 19: Ecmascript 6, O futuro do Javascript hoje

CLASSES E SUBCLASSES

Page 20: Ecmascript 6, O futuro do Javascript hoje
Page 21: Ecmascript 6, O futuro do Javascript hoje

class Jedi { constructor(firstName, lastName) { this.firstName = firstName; this.lastName = lastName; } get fullName() { return this.firstName + ' ' + this.lastName; } usarForca() {} usarSabreDeLuz() { console.log('Zuuuuumm'); } } !

Criação de propriedades “read-only”

Método executado na instância

Class

Page 22: Ecmascript 6, O futuro do Javascript hoje

let luke = new Jedi('Luke', 'Skywalker'); !

luke.fullName; luke.usarForca(); luke.usarSabreDeLuz(); !

!

!

!

!

!

Class

Page 23: Ecmascript 6, O futuro do Javascript hoje

class Human { constructor(firstName, lastName) { this.firstName = firstName; this.lastName = lastName; } get fullName() { return this.firstName + ' ' + this.lastName; } } !

!

!

!

Subclasses

Page 24: Ecmascript 6, O futuro do Javascript hoje

!

class Jedi extends Human { constructor(firstName, lastName) { super(firstName, lastName); } usarForca() {} usarSabreDeLuz() { console.log('Zuuuuumm'); } } !

!

!

!

chamada da classe “Human”

Extendendo a class “Human”

Subclasses

Page 25: Ecmascript 6, O futuro do Javascript hoje

!

!

let han = new Human(‘Han’, ‘Solo’); let luke = new Jedi('Luke', 'Skywalker'); !

luke.fullName; luke.usarForca(); luke.usarSabreDeLuz(); !

han.fullName; !

!

!

!

!

Subclasses

Page 26: Ecmascript 6, O futuro do Javascript hoje

MODULARIZAÇÃO

Page 27: Ecmascript 6, O futuro do Javascript hoje

// jedi.js export class Jedi {} !

// force.js import {Jedi} from './jedi'; !

export let force = { jedis: [new Jedi('Luke', 'Skywalker'), new Jedi('Obi-wan', 'Kenobi')] }; !

// empire.js import {force} from './force'; !

!

exportando um objeto.

Importando a classe “Jedi” do modulo “jedi"

Modulos

Page 28: Ecmascript 6, O futuro do Javascript hoje

GENERATORS E ITERATORS

Page 29: Ecmascript 6, O futuro do Javascript hoje

ITERATORS

Iteração nas estruturas de dados

Page 30: Ecmascript 6, O futuro do Javascript hoje

function criarIterator(arr) { let index = 0; return { next() { if (index < arr.length) { return { done: false, value: arr[index++] }; } else { return { done: true}; } } }; }

Objeto de retorno

Função que passa para próxima iteração

Iterator

Page 31: Ecmascript 6, O futuro do Javascript hoje

let iterator = criarIterator(['Luke', 'Obi-wan']); !

console.log(iterator.next()); console.log(iterator.next()); console.log(iterator.next()); !

!

// {“done”:false,"value":"Luke"} // {“done”:false,"value":"Obi-wan"} // {“done”:true} !

!

Criando o nosso Iterator

Iterator

Page 32: Ecmascript 6, O futuro do Javascript hoje

GENERATORS

Suspender a execução de funções

Page 33: Ecmascript 6, O futuro do Javascript hoje

function* generatorFunction() { yield 'Luke Skywalker'; yield 'Obi-wan Kenobi'; } !

let generator = generatorFunction(); !

console.log(generator.next()); console.log(generator.next()); console.log(generator.next()); !

// {“value”:"Luke Skywalker","done":false} // {“value”:"Obi-wan Kenobi","done":false} // {“done”:true} !

Iterators

Usando o *

Generators

Page 34: Ecmascript 6, O futuro do Javascript hoje

LOOP FOR…OF

Page 35: Ecmascript 6, O futuro do Javascript hoje

function* generatorFunction() { yield 'Luke Skywalker'; yield 'Obi-wan Kenobi'; } !

let generator = generatorFunction(); !

for(let jedi of generator) { console.log(jedi); } !

// Luke Skywalker // Obi-wan Kenobi !

Iterando todas as suspensões da função

For…of

Page 36: Ecmascript 6, O futuro do Javascript hoje

SYMBOL, UM NOVO TIPO PRIMITIVO

Page 37: Ecmascript 6, O futuro do Javascript hoje

let yoda = Symbol(); !

typeof yoda; // symbol !

let jedis = {}; !

let LUKE_SKYWALKER = Symbol(); !

jedis[LUKE_SKYWALKER] = new Jedi('Luke', 'Skywalker'); !

!

!

!

!

!

Utilizando Symbol como chaves

retorna um novo Symbol unico para o a variável

Symbols

Page 38: Ecmascript 6, O futuro do Javascript hoje

const HUMANS = Symbol(); const HUTTS = Symbol(); const JAWAS = Symbol(); const TUSKEN_RAIDERS = Symbol(); !

function getTatooineHabitant(habitant) { switch(habitant) { case HUMANS: ... case HUTTS: ... case JAWAS: ... case TUSKEN_RAIDERS: ... } }

Symbol como enums

Symbols

Page 39: Ecmascript 6, O futuro do Javascript hoje

let jedis = { membros: [new Jedi('Luke', 'Skywalker'), new Jedi('Obi-Wan', 'Kenobi')], [Symbol.iterator]() { const self = this; let index = 0; return { next() { if (index < self.membros.length) { return { value: self.membros[index++]}; } else { return { done: true}; } } } } }

Criação de Iterators

Symbols

Page 40: Ecmascript 6, O futuro do Javascript hoje

ESTRUTURAS DE DADOS

Page 41: Ecmascript 6, O futuro do Javascript hoje

let empire = new Map(); !

let jedi = {}; !

empire.set(jedi, ‘Luke’); empire.get(jedi); !

empire.has(jedi); empire.delete(jedi); !

empire.clear(); !

!

!

Utilizando chaves por referência

Map

Page 42: Ecmascript 6, O futuro do Javascript hoje

for(let key of empire.keys()) { console.log(key); // {} } !

for(let values of empire.values()) { console.log(values); // Luke } !

for(let [key, value] of empire) { console.log(key, value); // {} Luke } !

!

!

Iterando as chaves e os valores

Iterando todas as chaves

Map

Iterando todos valores

Page 43: Ecmascript 6, O futuro do Javascript hoje

let empire = new WeakMap(); !

let jedi = {}; !

empire.set(jedi, ‘Luke’); empire.get(jedi); !

empire.has(jedi); empire.delete(jedi); !

!

!

!

!

Mesmos metodos do Map

Criação de Map sem ser coletados no garbage

WeakMap

Page 44: Ecmascript 6, O futuro do Javascript hoje

let empire = new Set(); !

let jedi = { name: 'Luke' }; !

empire.add(jedi); empire.has(jedi); !

empire.delete(jedi); empire.clear(); !

!

!

Limpando a estrutura

Adicionando uma chave na estrutura

Set

Page 45: Ecmascript 6, O futuro do Javascript hoje

for(let value of empire) { console.log(value); // { name: 'Luke' }; } !

empire.forEach(value => console.log(value)); !

!

!

!

!

!

!

Passando por todos os elementos

Iteração dos elementos

Set

Page 46: Ecmascript 6, O futuro do Javascript hoje

let empire = new WeakSet(); !

let jedi = { name: 'Luke' }; !

empire.add(jedi); empire.has(jedi); !

empire.delete(jedi); !

!

!

!

Mesmos métodos do Set

Criação de Set sem ser coletados no garbage

WeakSet

Page 47: Ecmascript 6, O futuro do Javascript hoje

PROMISE API

Page 48: Ecmascript 6, O futuro do Javascript hoje

PROMISES

O que é isto?

Page 49: Ecmascript 6, O futuro do Javascript hoje

function getJedis() { let promise = new Promise(function(resolve) { setTimeout(function() { let jedis = ['Luke Skywalker', 'Obi-wan Kenobi']; resolve(jedis); }, 1000); }); return promise; } !

getJedis().then(function(jedis) { console.log(jedis); }); !

Resolvendo a Promise

Criando uma Promise

Promise

Executanod a Promise

Page 50: Ecmascript 6, O futuro do Javascript hoje
Page 51: Ecmascript 6, O futuro do Javascript hoje

PROMISES

Page 52: Ecmascript 6, O futuro do Javascript hoje

PROMISES

Page 53: Ecmascript 6, O futuro do Javascript hoje

COMO E ONDE APRENDER MAIS?

Page 54: Ecmascript 6, O futuro do Javascript hoje
Page 55: Ecmascript 6, O futuro do Javascript hoje
Page 56: Ecmascript 6, O futuro do Javascript hoje
Page 57: Ecmascript 6, O futuro do Javascript hoje
Page 58: Ecmascript 6, O futuro do Javascript hoje
Page 59: Ecmascript 6, O futuro do Javascript hoje

console.log(‘Obrigado’);

google.com/+HenriqueRamosLimas github/HenriqueLimas [email protected]