JavaScript agora é sério (TDC 2011)

2,714 views

Published on

Published in: Technology, News & Politics

JavaScript agora é sério (TDC 2011)

  1. 1. JavaScript: agora é sérioLuciano Ramalholuciano@ramgarlic.comGrupo de Discussão JSPROhttp://groups.google.com/group/jspro
  2. 2. DemoJavaScript fora donavegador, comNode.jsExemplo de script parachecar links em umarquivo JSONproduzido por umaview no CouchDB
  3. 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 Clubegroups.google.com/group/jspro
  4. 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çagroups.google.com/group/jspro
  5. 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áticagroups.google.com/group/jspro
  6. 6. 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 trn == 0 // true Exemplos do D. Crockford (O Melhor do JavaScript)groups.google.com/group/jspro
  7. 7. 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 trn == 0 // truegroups.google.com/group/jspro
  8. 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 estegroups.google.com/group/jspro problema
  9. 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. 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.1groups.google.com/group/jspro
  11. 11. https://developer.mozilla.org/en/JavaScript
  12. 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
  13. 13. ECMA-262 5.1 Edition jun/2011 256 pag.http://www.ecma-international.org/publications/files/ECMA-ST/Ecma-262.pdf
  14. 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 costumesgroups.google.com/group/jspro
  15. 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. 16. 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
  17. 17. 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
  18. 18. 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çãogroups.google.com/group/jspro
  19. 19. 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 contornadasgroups.google.com/group/jspro
  20. 20. 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.forEachgroups.google.com/group/jspro
  21. 21. forEach// print process.argvprocess.argv.forEach( function (val, index, array) { console.log(index + : + val);});groups.google.com/group/jspro
  22. 22. Usos modernos de uma expressão-função escopo local(function(){ })()groups.google.com/group/jspro
  23. 23. Usos modernos de uma expressão-função jQuery.noConflict(); (function($){ $("div#jQuery").css( "font-weight","bold"); })(jQuery);groups.google.com/group/jspro
  24. 24. 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 CouchAppsgroups.google.com/group/jspro
  25. 25. 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 sintaxegroups.google.com/group/jspro
  26. 26. Referências
  27. 27. http://www.delicious.com/ramalho/javascript
  28. 28. 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

×