javascript agora é sério (tdc 2011)

Post on 18-Dec-2014

2.163 Views

Category:

Technology

2 Downloads

Preview:

Click to see full reader

DESCRIPTION

 

TRANSCRIPT

Demo

JavaScript fora do navegador, com Node.js

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

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

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

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

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)

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

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

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)

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

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

ECMA-2625.1 Editionjun/2011256 pag.

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

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

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)

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)

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.

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

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

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

groups.google.com/group/jspro

forEach

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

});

groups.google.com/group/jspro

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

(function(){ })()

escopolocal

groups.google.com/group/jspro

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

jQuery.noConflict();

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

})(jQuery);

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

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

Referências

groups.google.com/group/jspro

Vamos continuar esta conversaE-mail: luciano@ramgarlic.com

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)

top related