Luciano Ramalho apresenta uma introdução sobre JavaScript, destacando que: (1) o nome é um equívoco de marketing que dificultou a compreensão da linguagem; (2) há uma distinção entre JavaScript e ECMAScript, sendo este o padrão definido pela norma; (3) a pragmática moderna, como uso de frameworks, mudou a percepção sobre a linguagem.
1. JavaScript: agora é sério
Luciano Ramalho
luciano@ramalho.org
Grupo de Discussão JSPRO
http://groups.google.com/group/jspro
Friday, July 1, 2011
2. 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
Friday, July 1, 2011
3. 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
Friday, July 1, 2011
4. 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
Friday, July 1, 2011
5. 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
Friday, July 1, 2011
6. JavaScript x ECMAScript
ECMAS: 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
Friday, July 1, 2011
7. 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
Friday, July 1, 2011
8. 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
Friday, July 1, 2011
9. Tipagem dinâmica e fraca
?
groups.google.com/group/jspro
Friday, July 1, 2011
10. Tipagem dinâmica e fraca
Exemplos do D. Crockford
(O Melhor do JavaScript)
groups.google.com/group/jspro
Friday, July 1, 2011
11. 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
Friday, July 1, 2011
12. 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
groups.google.com/group/jspro
Friday, July 1, 2011
13. 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
Friday, July 1, 2011
14. 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
Friday, July 1, 2011
16. 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
Friday, July 1, 2011
17. Pragmática: novos usos
AJAX: XMLHttpRequest e JSON
HTML5: armazenagem no cliente e Canvas
Plug-ins para navegadores e outros aplicativos
Node.js
Plataforma de programação assíncrona
groups.google.com/group/jspro
Friday, July 1, 2011
18. Pragmática: novos usos
Apache CouchDB
BD NoSQL e plataforma CouchApp
Aptana Jaxer, EJScript, RingoJS, AppengineJS,
Wakanda...
Servidores de aplicações
Common.js
Uma biblioteca padrão de uso geral
groups.google.com/group/jspro
Friday, July 1, 2011
19. Vamos continuar esta conversa
E-mail: luciano@ramgarlic.com
Grupo de discussão http://groups.google.com/group/jspro
Referências
JavaScript: the good parts (Douglas Crockford)
JavaScript patterns (Stoyan Stefanov)
http://www.delicious.com/ramalho/javascript
groups.google.com/group/jspro
Friday, July 1, 2011