View
1.918
Download
1
Category
Preview:
DESCRIPTION
Citation preview
JavaScript: agora é sérioLuciano Ramalho
luciano@ramalho.org
Grupo de Discussão JSPRO
http://groups.google.com/group/jsproFriday, July 1, 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
Friday, July 1, 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
Friday, July 1, 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
Friday, July 1, 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
Friday, July 1, 2011
groups.google.com/group/jspro
JavaScript x ECMAScript
ECMAS: 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
Friday, July 1, 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
Friday, July 1, 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)
Friday, July 1, 2011
groups.google.com/group/jspro
Tipagem dinâmica e fraca
?Friday, July 1, 2011
groups.google.com/group/jspro
Tipagem dinâmica e fraca
Exemplos do D. Crockford(O Melhor do JavaScript)
Friday, July 1, 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)
Friday, July 1, 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
Friday, July 1, 2011
groups.google.com/group/jspro
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
Friday, July 1, 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
Friday, July 1, 2011
groups.google.com/group/jspro
forEach
// print process.argvprocess.argv.forEach( function (val, index, array) { console.log(index + ': ' + val);
});
Friday, July 1, 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
Friday, July 1, 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
Node.js
Plataforma de programação assíncrona
Friday, July 1, 2011
groups.google.com/group/jspro
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
Friday, July 1, 2011
groups.google.com/group/jspro
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
Friday, July 1, 2011
Recommended