3. 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
4. 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
5. 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
8. Tipagem dinâmica e fraca
'' == '0' // false
0 == '' // true
0 == '0' // true
false == 'false' // false
false == '0' // true
false == undefined // false
false == null // false
null == undefined // true vale notar
' trn ' == 0 // true que Python
e Ruby não
têm este
groups.google.com/group/jspro problema
9. Resolvendo este problema
'' === '0' // false
0 === '' // false
0 === '0' // false
false === 'false' // false
false === '0' // false
false === undefined // false
false === null // false
null === undefined // false
' trn ' === 0 // false
Solução do D. Crockford
(O Melhor do JavaScript)
groups.google.com/group/jspro
10. 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
12. JavaScript x ECMAScript
ECMA: European Computer Manufacturers Association
1 1997 1ª edição
2 1998 ISO/IEC 16262
padrão
3 1999 regex, try/catch, JS 1.5
de fato
5 2009 strict mode, get/set, JSON
Harmony ???? várias idéias de JS 1.6, 1.7, 1.8...
groups.google.com/group/jspro
14. Gramática x Pragmática
Gramá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
15. 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
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27. O lado bom do JavaScript
Vantagens 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
28. 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
29. Funções de primeira classe
Como 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
30. 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
31. 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
33. Usos modernos de uma
expressão-função
escopo
local
(function(){ })()
groups.google.com/group/jspro
34. Usos modernos de uma
expressão-função
jQuery.noConflict();
(function($){
$("div#jQuery").css(
"font-weight","bold");
})(jQuery);
groups.google.com/group/jspro
35. 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
36. Pragmática: novos usos
Aptana 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
groups.google.com/group/jspro
41. Vamos continuar esta conversa
E-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)
groups.google.com/group/jspro