javascript agora é sério (tdc 2011)

41
JavaScript: agora é sério Luciano Ramalho [email protected] Grupo de Discussão JSPRO http://groups.google.com/group/jspro

Upload: luciano-ramalho

Post on 18-Dec-2014

2.163 views

Category:

Technology


2 download

DESCRIPTION

 

TRANSCRIPT

Page 2: JavaScript agora é sério (TDC 2011)

Demo

JavaScript fora do navegador, com Node.js

Exemplo de script para checar links em um arquivo JSON produzido por uma view no CouchDB

Page 3: JavaScript agora é sério (TDC 2011)

groups.google.com/group/jspro

Quem sou eu?Luciano Ramalho, programador desde 1978 (Web ’94)

BOL (Abril S/A), UOL, AOL, Globo.com, IDG Now! etc.

Entusiasta de linguagens

Python, Ruby, Scheme, Java, PHP, JavaScript, Perl, C, C++, Pascal, Smalltalk, Tcl/Tk, Processing, BASIC, VB, HyperTalk, Lingo, Assembly Z-80, 8086, HP-25, TI-58...

JavaScript com CouchDB na BIREME/OPAS/OMS

APyB, FISL 1...11 (quase), Garoa Hacker Clube

Page 4: JavaScript agora é sério (TDC 2011)

groups.google.com/group/jspro

JavaScript: um nome maldito

Não tem nada a ver com Java, foi uma decisão de marketing

Não é um Java simplificado, mas essa percepção complica entender a semântica de JavaScript

Ambas imitam a sintaxe de C e C++

Marca pertencia à Sun, agora pertence à Oracle

Sun licenciou a marca para a Netscape, Mozilla Foundation herdou a licença

Page 5: JavaScript agora é sério (TDC 2011)

groups.google.com/group/jspro

JavaScript: um nome maldito

Uma salada de equívocos de outras linguagens de scripting (Perl, Tcl; PHP bebeu na mesma fonte)

Variáveis automáticas: erros difíceis de localizar

Sintaxe de C (for(;;) ilógico, switch perigoso...)

Sem noção de módulos, nem mesmo include

Abuso do contexto global, sem noção de namespace

Tipagem fraca = conversão automática

Page 6: JavaScript agora é sério (TDC 2011)

groups.google.com/group/jspro

Tipagem dinâmica e fraca'' == '0' // false0 == '' // true0 == '0' // truefalse == 'false' // falsefalse == '0' // truefalse == undefined // falsefalse == null // falsenull == undefined // true' \t\r\n ' == 0 // true

?Exemplos do D. Crockford(O Melhor do JavaScript)

Page 7: JavaScript agora é sério (TDC 2011)

groups.google.com/group/jspro

Tipagem dinâmica e fraca'' == '0' // false0 == '' // true0 == '0' // truefalse == 'false' // falsefalse == '0' // truefalse == undefined // falsefalse == null // falsenull == undefined // true' \t\r\n ' == 0 // true

Page 8: JavaScript agora é sério (TDC 2011)

groups.google.com/group/jspro

Tipagem dinâmica e fraca'' == '0' // false0 == '' // true0 == '0' // truefalse == 'false' // falsefalse == '0' // truefalse == undefined // falsefalse == null // falsenull == undefined // true' \t\r\n ' == 0 // true

vale notar que Python e Ruby não têm este problema

Page 9: JavaScript agora é sério (TDC 2011)

groups.google.com/group/jspro

'' === '0' // false0 === '' // false0 === '0' // falsefalse === 'false' // falsefalse === '0' // falsefalse === undefined // falsefalse === null // falsenull === undefined // false' \t\r\n ' === 0 // false

Resolvendo este problema

Solução do D. Crockford(O Melhor do JavaScript)

Page 10: JavaScript agora é sério (TDC 2011)

groups.google.com/group/jspro

JavaScript x ECMAScript

JavaScript: quem define é a Mozilla Foundation

documentação oficial:

https://developer.mozilla.org/en/JavaScript

versão estável atual: 1.8.5

Firefox 4 e 5, SeaMonkey 2.1

Page 12: JavaScript agora é sério (TDC 2011)

groups.google.com/group/jspro

JavaScript x ECMAScript

ECMA: European Computer Manufacturers Association

1 1997 1ª edição

2 1998 ISO/IEC 16262

3 1999 regex, try/catch, JS 1.5

5 2009 strict mode, get/set, JSON

Harmony ???? várias idéias de JS 1.6, 1.7, 1.8...

padrãode fato

Page 13: JavaScript agora é sério (TDC 2011)

ECMA-2625.1 Editionjun/2011256 pag.

http://www.ecma-international.org/publications/files/ECMA-ST/Ecma-262.pdf

Page 14: JavaScript agora é sério (TDC 2011)

groups.google.com/group/jspro

Gramática x PragmáticaGramática:

Sintaxe: como se constrói comandos, evitando erros sintáticos

Semântica: significado (“paradigma”): como se constrói programas corretos aproveitando as características da linguagem

Léxico: vocabulário (funções, bibliotecas): como tirar proveito das bibliotecas e não reinventar a roda

Pragmática: usos e costumes

Page 15: JavaScript agora é sério (TDC 2011)

groups.google.com/group/jspro

Pragmática é o que mudou no JavaScript moderno

Como a linguagem é utilizada no mundo real

“sotaque”, expressões idiomáticas, estilo

“boas maneiras” e boas práticas

Contextos de uso

ambientes (cliente, servidor), embutida, independente

Ecosistema

ferramentas, frameworks, “autoridades” (gurus)

Page 16: JavaScript agora é sério (TDC 2011)
Page 17: JavaScript agora é sério (TDC 2011)
Page 18: JavaScript agora é sério (TDC 2011)
Page 19: JavaScript agora é sério (TDC 2011)
Page 20: JavaScript agora é sério (TDC 2011)
Page 21: JavaScript agora é sério (TDC 2011)
Page 22: JavaScript agora é sério (TDC 2011)
Page 23: JavaScript agora é sério (TDC 2011)
Page 24: JavaScript agora é sério (TDC 2011)
Page 25: JavaScript agora é sério (TDC 2011)
Page 26: JavaScript agora é sério (TDC 2011)
Page 27: JavaScript agora é sério (TDC 2011)

groups.google.com/group/jspro

O lado bom do JavaScriptVantagens tradicionais de linguagens scripting

Gerenciamento automático de memória

Objetos nativos com sintaxe conveniente e expressiva

Arrays (como listas dinâmicas e heterogêneas)

Objects (como dicionários ou arrays associativos)

Expressões regulares (integradas como em Perl)

Funções e closures (como em Scheme)

Page 28: JavaScript agora é sério (TDC 2011)

groups.google.com/group/jspro

Funções de primeira classe

First-class functions

Como em “First-class citizens”

Cidadãos que gozam de todos os direitos civis Funções como objetos de primeira classe

Na maioria das linguagens, números e strings são objetos de primeira classe.

Page 29: JavaScript agora é sério (TDC 2011)

groups.google.com/group/jspro

Funções de primeira classeComo qualquer objeto de primeira classe, uma função pode ser:

Criada dentro uma expressão, em tempo de execução

Atribuída a uma variável

Inserida em uma estrutura (array, object)

Passada como parâmetro para outra função

Devolvida como resultado de uma outra função

Page 30: JavaScript agora é sério (TDC 2011)

groups.google.com/group/jspro

Funções de primeira classe

Aplicações mais comuns:

Callbacks em sistemas orientados a eventos (GUIs, clientes e servidores de protocolos de redes de alto desempenho e escalabilidade)

Conceito tão poderoso que graças a ele muitas das limitações conceituais de JavaScript podem ser superadas ou contornadas

Page 31: JavaScript agora é sério (TDC 2011)

groups.google.com/group/jspro

Funções de Ordem Superior

Higher-order functions

Aceitam outras funções como argumentos

Exemplos clássicos: Map, Filter, Reduce

Exemplo comum em JS: Array.forEach

Page 32: JavaScript agora é sério (TDC 2011)

groups.google.com/group/jspro

forEach

// print process.argvprocess.argv.forEach( function (val, index, array) { console.log(index + ': ' + val);

});

Page 33: JavaScript agora é sério (TDC 2011)

groups.google.com/group/jspro

Usos modernos de uma expressão-função

(function(){ })()

escopolocal

Page 34: JavaScript agora é sério (TDC 2011)

groups.google.com/group/jspro

Usos modernos de uma expressão-função

jQuery.noConflict();

(function($){ $("div#jQuery").css( "font-weight","bold");

})(jQuery);

Page 35: JavaScript agora é sério (TDC 2011)

groups.google.com/group/jspro

Pragmática: novos usos

AJAX: XMLHttpRequest e JSON

HTML5: armazenagem no cliente e Canvas

Plug-ins para navegadores e outros aplicativos

Apache CouchDB

BD NoSQL orientado a documentos

Plataforma para CouchApps

Page 36: JavaScript agora é sério (TDC 2011)

groups.google.com/group/jspro

Pragmática: novos usosAptana Jaxer, RingoJS, AppengineJS, Wakanda...

Servidores de aplicações

Common.js

Uma biblioteca padrão de uso geral

Node.js

Plataforma de programação assíncrona

CoffeeScript: uma nova sintaxe

Page 37: JavaScript agora é sério (TDC 2011)
Page 38: JavaScript agora é sério (TDC 2011)
Page 39: JavaScript agora é sério (TDC 2011)

Referências

Page 41: JavaScript agora é sério (TDC 2011)

groups.google.com/group/jspro

Vamos continuar esta conversaE-mail: [email protected]

Twitter: @luciano

Grupo de discussão: http://groups.google.com/group/jspro

Links: http://www.delicious.com/ramalho/javascript

JavaScript: The Good Parts (Douglas Crockford)

JavaScript: The Definitive Guide 6 ed. 2011 (D. Flanagan)

Padrões JavaScript (Stoyan Stefanov)