JavaScript: agora é sério
      Luciano Ramalho
      luciano@ramalho.org



      Grupo de Discussão JSPRO
      http://groups.google.com/group/jspro
Friday, July 1, 2011
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
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
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
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
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
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
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
Tipagem dinâmica e fraca




                                 ?
 groups.google.com/group/jspro
Friday, July 1, 2011
Tipagem dinâmica e fraca




    Exemplos do D. Crockford
     (O Melhor do JavaScript)
 groups.google.com/group/jspro
Friday, July 1, 2011
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
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
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
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
forEach
   // print process.argv
   process.argv.forEach(
     function (val, index, array) {
       console.log(index + ': ' + val);
   });




 groups.google.com/group/jspro
Friday, July 1, 2011
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
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
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
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

JavaScript agora é sério (FISL 2011)

  • 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 é oque 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 efraca ? groups.google.com/group/jspro Friday, July 1, 2011
  • 10.
    Tipagem dinâmica efraca Exemplos do D. Crockford (O Melhor do JavaScript) groups.google.com/group/jspro Friday, July 1, 2011
  • 11.
    O lado bomdo 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 primeiraclasse 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 primeiraclasse 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 OrdemSuperior 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
  • 15.
    forEach // print process.argv process.argv.forEach( function (val, index, array) { console.log(index + ': ' + val); }); groups.google.com/group/jspro Friday, July 1, 2011
  • 16.
    Funções de primeiraclasse 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 estaconversa 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