JavaScript: agora é sério
Luciano Ramalho
Grupo de Discussão JSPRO
http://groups.google.com/group/jspro
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
https://developer.mozilla.org/en/JavaScript
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
http://www.delicious.com/ramalho/javascript
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)
Top Related