51
JAVASCRIPT É FÃ DO PYTHON Por / Fabio M. Costa @fabiomiranda

Javascript é fã do Python

Embed Size (px)

DESCRIPTION

Nessa palestra falo sobre a nova versão da especificação do Javascript, o Ecmascript 6, e mostro as novas funcionalidades que são baseadas em funcionalidades do Python.

Citation preview

Page 1: Javascript é fã do Python

JAVASCRIPTÉ FÃ DO PYTHON

Por / Fabio M. Costa @fabiomiranda

Page 2: Javascript é fã do Python
Page 3: Javascript é fã do Python

QUEM?Fabio Miranda CostaNatal - RNEngenheiro de Front End do FacebookEx Globo.comEx YipitCore developer do Mootools desde 2009Co-criador do Thumbor

Page 4: Javascript é fã do Python

DESIGN DE COMUNICAÇÃOCOMMUNICATION DESIGN

Page 5: Javascript é fã do Python

ESTRUTURA1. Porque?2. História3. Novidades

Page 6: Javascript é fã do Python

PORQUE?

Page 7: Javascript é fã do Python

NODE.JSA comunidade node.js está mudando o Open-Source — Gregg Caines

Baterias não inclusasDesenvolvimento de bibliotecas pequenasDesenvolvimento acontece com ferramentas comuns, git egithub.com

Page 8: Javascript é fã do Python

GITHUB

Page 9: Javascript é fã do Python

TIOBE

Page 10: Javascript é fã do Python

HISTÓRIA

Page 11: Javascript é fã do Python

ECMA-262Especificação do ECMAScriptTC39Javascript é a implementação mais conhecida

Page 12: Javascript é fã do Python

ES3 (1999)Implementação do IE6 e 7O que a grande maioria de nós usamosswitch, RegExp, try/catch, throw ...

Page 13: Javascript é fã do Python

“Vamos aprender com o Python. JavaScript émuito similar ao Python”

“We're going to learn from Python. JavaScript ispretty close to Python”

— Brendan Eichhttp://www.infoworld.com/d/developer-world/update-javascript-take-cues-python-323

Page 14: Javascript é fã do Python

“Dados os anos de desenvolvimento do Python esimilaridades com o ECMAScript, deveríamosseguir seus passos. Assim, reaproveitamos o

conhecimento e experiência com design eimplementação. …”

“Given the years of development in Python andsimilarities to ECMAScript in application

domains and programmer communities, wewould rather follow than lead. By standing on

Python's shoulders we reuse developerknowledge as well as design and implementation

experience. …”

— Brendan Eichhttp://www.infoworld.com/d/developer-world/update-javascript-take-cues-python-323

Page 15: Javascript é fã do Python
Page 16: Javascript é fã do Python

ES4Abandonada

Page 17: Javascript é fã do Python

ES5 (2009)Firefox, Chrome, Safari, OperaUpgrade enxutoJSON, getters e setters, fn.bind() ...

Page 18: Javascript é fã do Python

ES6 (2013?)Previsto para dezembro de 2013Harmony ou ES.nextMuitas ideias vieram do ES4Firefox está na frente

Page 19: Javascript é fã do Python
Page 20: Javascript é fã do Python

NOVIDADES DOJAVASCRIPT

Page 21: Javascript é fã do Python

CONFIGURAÇÃOCódigo javascript executado no Chrome 30Empythoned - CPython 2.7 compilado para Javascript usandoEmscriptendef citacao(msg, autor): return '"' + msg + '" - ' + autor

print citacao( 'Eu descobri que o Javascript tem partes boas.', 'Douglas Crockford')

"Eu descobri que o Javascript tem partes boas." - Douglas Crockford

Page 22: Javascript é fã do Python

OPERADOR DE DISTRIBUIÇÃO (...)SPREAD OPERATOR

Page 23: Javascript é fã do Python

OPERADOR DE DISTRIBUIÇÃO - PYTHONprint max(14, 3, 77)print max(*[14, 3, 77])

7777

Page 24: Javascript é fã do Python

OPERADOR DE DISTRIBUIÇÃO - JAVASCRIPTEXEMPLO SIMPLES

// uso normalvar max = Math.max(14, 3, 77);// ES 5var max = Math.max.apply(null, [14, 3, 77]);// ES 6var max = Math.max(...[14, 3, 77]);

não suportado neste navegador

Page 25: Javascript é fã do Python

OPERADOR DE DISTRIBUIÇÃO - JAVASCRIPTvar cache = {palestrantes: []};// ES 5function salvar(nome) { var items = [].slice.call(arguments, 1); items.forEach(function (item) { cache[nome].push(item); });}// ES 6function salvar(nome, ...items) { items.forEach(function (item) { cache[nome].push(item); });}salvar('palestrantes', 'cabra', 'romulo', 'victor', 'andrews', 'chico');console.log(cache);

não suportado neste navegador

Page 26: Javascript é fã do Python

PARÂMETROS DEFAULTDEFAULT PARAMETERS

Page 27: Javascript é fã do Python

PARÂMETROS DEFAULT - PYTHONdef incremento(x, y=1): return x + y

print incremento(4)print incremento(4, 2)

56

Page 28: Javascript é fã do Python

PARÂMETROS DEFAULT - JAVASCRIPT// ES 5function incremento(x, y) { y = (arguments.length === 1) ? 1 : y; return x + y;}// ES 6function incremento(x, y = 1) { return x + y;}

console.log(incremento(4));console.log(incremento(4, 2));

não suportado neste navegador

Page 29: Javascript é fã do Python

PARÂMETROS DEFAULT - PYTHONdef adicionar_bacon(hamburguer=[]): hamburguer.append('bacon') return hamburguer

print 1, adicionar_bacon()print 2, adicionar_bacon()

1 ['bacon']2 ['bacon', 'bacon']

Page 30: Javascript é fã do Python

PARÂMETROS DEFAULT - JAVASCRIPTfunction adicionar_bacon(hamburguer = []) { hamburguer.push('bacon'); return hamburguer;}

console.log(1, adicionar_bacon());console.log(2, adicionar_bacon());

não suportado neste navegador

Page 31: Javascript é fã do Python

DESESTRUTURAÇÃODESTRUCTURING

Page 32: Javascript é fã do Python

DESESTRUTURAÇÃO - PYTHONum, dois = [1, 2]print um, dois

1 2

Page 33: Javascript é fã do Python

DESESTRUTURAÇÃO - JAVASCRIPTvar [um, dois] = [1, 2];console.log(um, dois);

não suportado neste navegador

Page 34: Javascript é fã do Python

DESESTRUTURAÇÃO E OPERADOR DE DISTRIBUIÇÃO -JAVASCRIPT

var [cabeca, ...corpo] = [1, 2, 3, 4];console.log(corpo); // [2, 3, 4]

não suportado neste navegador

Page 35: Javascript é fã do Python

DESESTRUTURAÇÃO - PYTHONQual o valor de 'b'? (Python 2.7)

a, *b = [1, 2, 3, 4]print a, b

File "<stdin>", line 1 a, *b = [1, 2, 3, 4] ̂SyntaxError: invalid syntax

Funciona no python 3.3

Page 36: Javascript é fã do Python

DESESTRUTURAÇÃO EM OBJETOS - JAVASCRIPTvar {globocom, r7} = { globocom: 'globo.com', r7: 'r7.com'};console.log(globocom, r7);

não suportado neste navegador

Page 37: Javascript é fã do Python

DESESTRUTURAÇÃO EM FUNÇÕES - JAVASCRIPTvar ajax = function(url, { async = true, cache = true // ...}) { console.log(url, async, cache);};ajax( 'http://python.org', {async: false}); // 'http://python.org' false true

não suportado neste navegador

Page 38: Javascript é fã do Python

GERADORESGENERATORS

Page 39: Javascript é fã do Python

GERADORES - PYTHONdef essenciais(): yield 'celular' yield 'chave' yield 'carteira'

for essencial in essenciais(): print essencial

celularchavecarteira

Page 40: Javascript é fã do Python

GERADORES - JAVASCRIPTfunction* essenciais() { yield 'celular'; yield 'chave'; yield 'carteira';}for (var essencial of essenciais()) { console.log(essencial);}

"celular""chave""carteira"

Page 41: Javascript é fã do Python

GERADORES - JAVASCRIPTfunction* essenciais() { yield 'celular'; yield 'chave'; yield 'carteira';}var essenciaisGen = essenciais();console.log(essenciaisGen.next()); // {done: false, value: 'celular'}console.log(essenciaisGen.next()); // {done: false, value: 'chave'}console.log(essenciaisGen.next()); // {done: false, value: 'carteira'}console.log(essenciaisGen.next()); // {done: true}//console.log(essenciaisGen.next()); // Exceção

{"value":"celular","done":false}{"value":"chave","done":false}{"value":"carteira","done":false}{"done":true}

Page 42: Javascript é fã do Python

ARRAY COMPREHENSION

Page 43: Javascript é fã do Python

ARRAY COMPREHENSION - PYTHONprint [i for i in [1,4,2,3,-8] if i < 3]

[1, 2, -8]

Page 44: Javascript é fã do Python

ARRAY COMPREHENSION - JAVASCRIPT// ES 5[1,4,2,3,-8].filter(function(i) { return i < 3 });

// ES 6[for (i of [1,4,2,3,-8]) if (i < 3) i];

não suportado neste navegador

Page 45: Javascript é fã do Python

MODULOSMODULES

Page 46: Javascript é fã do Python

MODULOS - PYTHON# calculadora/lib/calc.pydef quadrado(x): return x * x

# calculadora/main.pyfrom lib.calc import quadrado as qprint q(3)

Page 47: Javascript é fã do Python

MODULOS - JAVASCRIPT// calculadora/lib/calc.jslet naoExportado = 'abc';export function quadrado(x) { return x * x;}export const CONSTANTE = 123;

// calculadora/main.jsimport { quadrado as q, CONSTANTE } from 'lib/calc';console.log(q(3));

// exemplo de modulo inlinemodule 'lib/ios' { ...}

não suportado neste navegador

Page 48: Javascript é fã do Python

OUTRAS NOVIDADES// constantesconst PAIS = 'EUA';

// classesclass Presidente { constructor(nome) { this.nome = nome; }}class PresidenteAmericano extends Presidente { constructor(nome) { this.espiao = true; super(nome); } // definição concisa de métodos espionar(paises) { // funcao seta paises = paises.filter(pais => pais.emExpansao()); // escopo em bloco // 'pais' é 'undefined' fora do bloco do "for" for (let pais of paises) { // ... } return true; }}// Map, Set, WeakMap, Symbol, quasi-literals, Proxy, e muito mais!

Page 49: Javascript é fã do Python

OBRIGADOCOMUNIDADE PYTHON!

Page 50: Javascript é fã do Python

[email protected]@fabiomirandagithub.com/fabiomcostafacebook.com/fabiomirandacosta

Page 51: Javascript é fã do Python

LINKS E REFERÊNCIASPerguntas e respostas com o TC39 na Bocoup, 18/09/2913Histórico resumido do ESTabela que mostra as funcionalidades do ES6 implementadaspelos navegadoresPalestra excelente do Kit Cambridge sobre ES6Post muito bom sobre as novas funcionalidades do ES6Modulos em JavascriptRanking de popularidade de linguagens no GithubMatéria do Ajaxian sobre ES4 com frases do Brendan EichMatéria da Infoworld sobre ES4 com frases do Brendan EichTraceur - Compilador de ES6 para ES5Emscripten - Compilador de LLVM para JavascriptEmpythoned - CPython compilado para Javascript usandoEmscripten