JavaScript: agora é sério

   Quem sou eu:
       Luciano Ramalho, programador desde 1978
       Desenvolvedor Web desde 1994
       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...
       Usando principalmente Python desde 1998
       Experimentando JavaScript em aplicações com
        banco de dados CouchDB desde 2010
                  E gostando!
JavaScript, a linguagem

   Gramática
       Sintaxe: como se constroi comandos corretos
                   Quem não sabe comete erros sintáticos
       Semântica: significado (”paradigma”)
                   Quem não sabe comete erros lógicos e sub-
                     utiliza a linguagem
       Léxico: vocabulário (funções, bibliotecas)
                   Quem não sabe reinventa a roda
   Pragmática: linguagem em seu contexto de uso
       Ambientes (cliente, servidor, embutida)
       Ecosistema: ferramentas, frameworks
JavaScript: um nome maldito

   Não tem nada a ver com Java
       Foi uma decisão de marketing
       Ambas imitam a sintaxe de C e C++
       Não é um Java simplificado, mas essa percepção
        complica entender a semântica de JavaScript
       Marca pertencia à Sun, agora pertence à Oracle
       Sun autorizou Netscape a usar a marca, Mozilla
        Foundation deve ter herdado esta autorização
   ECMAScript
       European Computer Manufacturers Association
       Padrões: ECMAScript 3, ECMAScript 5
JavaScript: um nome maldito

   Reunião de equívocos de outras linguagens de
    scripting (Perl, a fonte; PHP bebeu na mesma)
       Variáveis automáticas
                  Esconde erros difíceis de localizar
       Sintaxe imitando C, mesmo quando não faz sentido
                  Laço for (_;_;_)
       Sem noção de módulos, nem mesmo include
       Sem noção de namespace
       Tipagem fraca = conversão automática
                                                   Python não tem
                                                    Python não tem
                                                   estes problemas
                                                    estes problemas
Tipagem fraca

   Conversão automática é coisa do demo

        '' == '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
Tipagem fraca

   Conversão automática é coisa do demo

        '' == '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
Tipagem fraca

    Conversão automática é coisa do demo

         '' == '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
Python não tem
Python não tem
estes problemas
 estes problemas
JavaScript: o lado bom

   O melhor do scripting
       Gerenciamento automatico de memória
       Objetos nativos com sintaxe conveniente e
        expressiva
                  Arrays (como listas)
                  Objects (como dicionários ou arrays
                    associativos)
                  Expressões regulares (integradas como em Perl)
                  Funções e closures (como em Scheme)
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
   Uma função pode ser:
       Criada em 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
Funções de ordem superior

   Higher-order functions
       aceitam outras funções como argumentos
   Exemplos clássicos:
       Map
       Filter
       Reduce
   Criação dinâmica de funções
Funções de primeira classe

   Aplicações:
       Callbacks
       Sistemas orientados a eventos
       Programação assíncrona
       GUIs
       Clientes e servidores de protocolos de redes
        altamente escaláveis
   Conceito tão poderoso que graças a ele muitas
    das limitações conceituais de JavaScript
    podem ser superadas ou contornadas
Pragmática: novos usos

   AJAX: XMLHttpRequest e JSON
   HTML5
       Armazenagem no cliente
       Canvas
   Plug-ins para navegadores e outros aplicativos
   Node.js
       Plataforma de programação assíncrona
   TiddlyWiki
       Wiki pessoal, inovador, roda todo no cliente
        (sugestão de um participante na CampusParty 2011)
Mais usos

   Apache CouchDB
       BD NoSQL e plataforma CouchApp
   Common.js
       Uma biblioteca padrão de uso geral
   Aptana Jaxer
       Servidor para aplicações AJAX
        (sugestão de um participante na CampusParty 2011)
Frameworks

   JQuery – DOM, UI
   YUI
   Prototype
   Dojo
   Mootools
   Closure
Ferramentas

   Consoles
   Debuggers
   Selenium
   QUnit
   Node.js
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)
       123 links que me interessaram:
                   http://www.delicious.com/ramalho/javascript

JavaScript: agora é sério

  • 1.
    JavaScript: agora ésério  Quem sou eu:  Luciano Ramalho, programador desde 1978  Desenvolvedor Web desde 1994  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...  Usando principalmente Python desde 1998  Experimentando JavaScript em aplicações com banco de dados CouchDB desde 2010  E gostando!
  • 2.
    JavaScript, a linguagem  Gramática  Sintaxe: como se constroi comandos corretos  Quem não sabe comete erros sintáticos  Semântica: significado (”paradigma”)  Quem não sabe comete erros lógicos e sub- utiliza a linguagem  Léxico: vocabulário (funções, bibliotecas)  Quem não sabe reinventa a roda  Pragmática: linguagem em seu contexto de uso  Ambientes (cliente, servidor, embutida)  Ecosistema: ferramentas, frameworks
  • 3.
    JavaScript: um nomemaldito  Não tem nada a ver com Java  Foi uma decisão de marketing  Ambas imitam a sintaxe de C e C++  Não é um Java simplificado, mas essa percepção complica entender a semântica de JavaScript  Marca pertencia à Sun, agora pertence à Oracle  Sun autorizou Netscape a usar a marca, Mozilla Foundation deve ter herdado esta autorização  ECMAScript  European Computer Manufacturers Association  Padrões: ECMAScript 3, ECMAScript 5
  • 4.
    JavaScript: um nomemaldito  Reunião de equívocos de outras linguagens de scripting (Perl, a fonte; PHP bebeu na mesma)  Variáveis automáticas  Esconde erros difíceis de localizar  Sintaxe imitando C, mesmo quando não faz sentido  Laço for (_;_;_)  Sem noção de módulos, nem mesmo include  Sem noção de namespace  Tipagem fraca = conversão automática Python não tem Python não tem estes problemas estes problemas
  • 5.
    Tipagem fraca  Conversão automática é coisa do demo '' == '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
  • 6.
    Tipagem fraca  Conversão automática é coisa do demo '' == '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
  • 7.
    Tipagem fraca  Conversão automática é coisa do demo '' == '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 Python não tem Python não tem estes problemas estes problemas
  • 8.
    JavaScript: o ladobom  O melhor do scripting  Gerenciamento automatico de memória  Objetos nativos com sintaxe conveniente e expressiva  Arrays (como listas)  Objects (como dicionários ou arrays associativos)  Expressões regulares (integradas como em Perl)  Funções e closures (como em Scheme)
  • 9.
    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  Uma função pode ser:  Criada em 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
  • 10.
    Funções de ordemsuperior  Higher-order functions  aceitam outras funções como argumentos  Exemplos clássicos:  Map  Filter  Reduce  Criação dinâmica de funções
  • 11.
    Funções de primeiraclasse  Aplicações:  Callbacks  Sistemas orientados a eventos  Programação assíncrona  GUIs  Clientes e servidores de protocolos de redes altamente escaláveis  Conceito tão poderoso que graças a ele muitas das limitações conceituais de JavaScript podem ser superadas ou contornadas
  • 13.
    Pragmática: novos usos  AJAX: XMLHttpRequest e JSON  HTML5  Armazenagem no cliente  Canvas  Plug-ins para navegadores e outros aplicativos  Node.js  Plataforma de programação assíncrona  TiddlyWiki  Wiki pessoal, inovador, roda todo no cliente (sugestão de um participante na CampusParty 2011)
  • 14.
    Mais usos  Apache CouchDB  BD NoSQL e plataforma CouchApp  Common.js  Uma biblioteca padrão de uso geral  Aptana Jaxer  Servidor para aplicações AJAX (sugestão de um participante na CampusParty 2011)
  • 15.
    Frameworks  JQuery – DOM, UI  YUI  Prototype  Dojo  Mootools  Closure
  • 16.
    Ferramentas  Consoles  Debuggers  Selenium  QUnit  Node.js
  • 17.
    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)  123 links que me interessaram:  http://www.delicious.com/ramalho/javascript