SlideShare uma empresa Scribd logo
1 de 41
Baixar para ler offline
JavaScript: agora é sério

Luciano Ramalho
luciano@ramgarlic.com



Grupo de Discussão JSPRO
http://groups.google.com/group/jspro
Demo

JavaScript fora do
navegador, com
Node.js
Exemplo de script para
checar links em um
arquivo JSON
produzido por uma
view no CouchDB
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
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
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
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
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


groups.google.com/group/jspro
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 este
groups.google.com/group/jspro              problema
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
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
https://developer.mozilla.org/en/JavaScript
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
ECMA-262
                                                        5.1 Edition
                                                         jun/2011
                                                         256 pag.




http://www.ecma-international.org/publications/files/ECMA-ST/Ecma-262.pdf
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
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
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
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
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
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
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
forEach
// print process.argv
process.argv.forEach(
  function (val, index, array) {
    console.log(index + ': ' + val);
});




groups.google.com/group/jspro
Usos modernos de uma
  expressão-função

                                escopo
                                 local


(function(){ })()
groups.google.com/group/jspro
Usos modernos de uma
  expressão-função
 jQuery.noConflict();

 (function($){
     $("div#jQuery").css(
         "font-weight","bold");
 })(jQuery);


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
    Apache CouchDB
      BD NoSQL orientado a documentos
      Plataforma para CouchApps


groups.google.com/group/jspro
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 sintaxe

groups.google.com/group/jspro
Referências
http://www.delicious.com/ramalho/javascript
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

Mais conteúdo relacionado

Mais procurados

Mais procurados (11)

Introdução ao JavaScript
Introdução ao JavaScriptIntrodução ao JavaScript
Introdução ao JavaScript
 
De Zero à Web com Python e Django
De Zero à Web com Python e DjangoDe Zero à Web com Python e Django
De Zero à Web com Python e Django
 
Django - Desenvolvimento web ágil com Python
Django - Desenvolvimento web ágil com PythonDjango - Desenvolvimento web ágil com Python
Django - Desenvolvimento web ágil com Python
 
JavaScript for Beginners
JavaScript for BeginnersJavaScript for Beginners
JavaScript for Beginners
 
JavaScript: agora é sério
JavaScript: agora é sérioJavaScript: agora é sério
JavaScript: agora é sério
 
tmn - Introdução ao JavaScript
tmn - Introdução ao JavaScripttmn - Introdução ao JavaScript
tmn - Introdução ao JavaScript
 
Javascript
JavascriptJavascript
Javascript
 
Ajax em java
Ajax em javaAjax em java
Ajax em java
 
Javascript levado a serio
Javascript levado a serioJavascript levado a serio
Javascript levado a serio
 
Javascript aula 01 - visão geral
Javascript   aula 01 - visão geralJavascript   aula 01 - visão geral
Javascript aula 01 - visão geral
 
Lib.SAPO.JS - Codebits2007
Lib.SAPO.JS  - Codebits2007Lib.SAPO.JS  - Codebits2007
Lib.SAPO.JS - Codebits2007
 

Destaque

NoSQL na BIREME: 20 anos de experiência
NoSQL na BIREME: 20 anos de experiênciaNoSQL na BIREME: 20 anos de experiência
NoSQL na BIREME: 20 anos de experiênciaLuciano Ramalho
 
JavaScript de qualidade: hoje, amanhã e sempre!
JavaScript de qualidade: hoje, amanhã e sempre!JavaScript de qualidade: hoje, amanhã e sempre!
JavaScript de qualidade: hoje, amanhã e sempre!Thiago de Oliveira Pires
 
Java script em 2016 - Como sobreviver a essa sopa de letrinhas com vue.js
Java script em 2016 - Como sobreviver a essa sopa de letrinhas com vue.jsJava script em 2016 - Como sobreviver a essa sopa de letrinhas com vue.js
Java script em 2016 - Como sobreviver a essa sopa de letrinhas com vue.jsVinicius Reis
 
Aprender Javascript e jQuery (UFCD
Aprender Javascript e jQuery (UFCDAprender Javascript e jQuery (UFCD
Aprender Javascript e jQuery (UFCDAfonso Gomes
 
Javascript, Done Right
Javascript, Done RightJavascript, Done Right
Javascript, Done RightAndré Luís
 
DOMinando JavaScript
DOMinando JavaScriptDOMinando JavaScript
DOMinando JavaScriptThiago Poiani
 
Minicurso - Desenvolvendo aplicações web com JavaScript e AngularJS - Estácio...
Minicurso - Desenvolvendo aplicações web com JavaScript e AngularJS - Estácio...Minicurso - Desenvolvendo aplicações web com JavaScript e AngularJS - Estácio...
Minicurso - Desenvolvendo aplicações web com JavaScript e AngularJS - Estácio...Rodrigo Branas
 
Introdução a JavaScript
Introdução a JavaScriptIntrodução a JavaScript
Introdução a JavaScriptBruno Catão
 
Minicurso de JavaScript (Portuguese)
Minicurso de JavaScript (Portuguese)Minicurso de JavaScript (Portuguese)
Minicurso de JavaScript (Portuguese)Bruno Grange
 

Destaque (14)

Binary divination
Binary divinationBinary divination
Binary divination
 
NoSQL na BIREME: 20 anos de experiência
NoSQL na BIREME: 20 anos de experiênciaNoSQL na BIREME: 20 anos de experiência
NoSQL na BIREME: 20 anos de experiência
 
JavaScript de qualidade: hoje, amanhã e sempre!
JavaScript de qualidade: hoje, amanhã e sempre!JavaScript de qualidade: hoje, amanhã e sempre!
JavaScript de qualidade: hoje, amanhã e sempre!
 
Java script em 2016 - Como sobreviver a essa sopa de letrinhas com vue.js
Java script em 2016 - Como sobreviver a essa sopa de letrinhas com vue.jsJava script em 2016 - Como sobreviver a essa sopa de letrinhas com vue.js
Java script em 2016 - Como sobreviver a essa sopa de letrinhas com vue.js
 
Java script
Java scriptJava script
Java script
 
It's Javascript Time
It's Javascript TimeIt's Javascript Time
It's Javascript Time
 
Aula javascript
Aula  javascriptAula  javascript
Aula javascript
 
Aprender Javascript e jQuery (UFCD
Aprender Javascript e jQuery (UFCDAprender Javascript e jQuery (UFCD
Aprender Javascript e jQuery (UFCD
 
Javascript, Done Right
Javascript, Done RightJavascript, Done Right
Javascript, Done Right
 
DOMinando JavaScript
DOMinando JavaScriptDOMinando JavaScript
DOMinando JavaScript
 
Minicurso - Desenvolvendo aplicações web com JavaScript e AngularJS - Estácio...
Minicurso - Desenvolvendo aplicações web com JavaScript e AngularJS - Estácio...Minicurso - Desenvolvendo aplicações web com JavaScript e AngularJS - Estácio...
Minicurso - Desenvolvendo aplicações web com JavaScript e AngularJS - Estácio...
 
Introdução a JavaScript
Introdução a JavaScriptIntrodução a JavaScript
Introdução a JavaScript
 
Minicurso de JavaScript (Portuguese)
Minicurso de JavaScript (Portuguese)Minicurso de JavaScript (Portuguese)
Minicurso de JavaScript (Portuguese)
 
JavaScript
JavaScriptJavaScript
JavaScript
 

Semelhante a JavaScript: agora é sério

JavaScript agora é sério (FISL 2011)
JavaScript agora é sério (FISL 2011)JavaScript agora é sério (FISL 2011)
JavaScript agora é sério (FISL 2011)Luciano Ramalho
 
JAVA: Muito mais que uma linguagem
JAVA: Muito mais que uma linguagemJAVA: Muito mais que uma linguagem
JAVA: Muito mais que uma linguagemliverig
 
Poo slides01
Poo slides01Poo slides01
Poo slides01jmtofoli
 
Java - Learn Once Use Anywhere
Java - Learn Once Use AnywhereJava - Learn Once Use Anywhere
Java - Learn Once Use AnywhereSerge Rehem
 
Desenvolvimento Agil Com Doctrine Orm
Desenvolvimento Agil Com Doctrine OrmDesenvolvimento Agil Com Doctrine Orm
Desenvolvimento Agil Com Doctrine OrmGuilherme Blanco
 
Spring framework 2.5
Spring framework 2.5Spring framework 2.5
Spring framework 2.5Diego Pacheco
 
TypeScript - Campus party 2013
TypeScript - Campus party 2013TypeScript - Campus party 2013
TypeScript - Campus party 2013Giovanni Bassi
 
Produtividade em Java com Grails
Produtividade em Java com GrailsProdutividade em Java com Grails
Produtividade em Java com GrailsWanderson Oliveira
 
RubyConfBr 2015 - Rails & Javascript: faça isso direito
RubyConfBr 2015 - Rails & Javascript: faça isso direitoRubyConfBr 2015 - Rails & Javascript: faça isso direito
RubyConfBr 2015 - Rails & Javascript: faça isso direitoCezinha Anjos
 
Desenvolvimento Java
 Desenvolvimento Java Desenvolvimento Java
Desenvolvimento JavaSerge Rehem
 
JasperReports Tecnicas de geracao_de_relatorios1
JasperReports  Tecnicas de geracao_de_relatorios1JasperReports  Tecnicas de geracao_de_relatorios1
JasperReports Tecnicas de geracao_de_relatorios1Sliedesharessbarbosa
 
Apresentação sobre MVVMC
Apresentação sobre MVVMCApresentação sobre MVVMC
Apresentação sobre MVVMCAlisson Agiani
 
Os 10 maus habitos dos desenvolvedores jsf (JustJava e CCT)
Os 10 maus habitos dos desenvolvedores jsf (JustJava e CCT)Os 10 maus habitos dos desenvolvedores jsf (JustJava e CCT)
Os 10 maus habitos dos desenvolvedores jsf (JustJava e CCT)Rafael Ponte
 
Esta começando a programar para a web? Então começe com Rails
Esta começando a programar para a web? Então começe com RailsEsta começando a programar para a web? Então começe com Rails
Esta começando a programar para a web? Então começe com Railsismaelstahelin
 
Javascript no SAPO e libsapojs
Javascript no SAPO e libsapojsJavascript no SAPO e libsapojs
Javascript no SAPO e libsapojscodebits
 
Conceitos Básicos de OO e Java
Conceitos Básicos de OO e JavaConceitos Básicos de OO e Java
Conceitos Básicos de OO e JavaCharles Jungbeck
 

Semelhante a JavaScript: agora é sério (20)

Javascript
JavascriptJavascript
Javascript
 
JavaScript agora é sério (FISL 2011)
JavaScript agora é sério (FISL 2011)JavaScript agora é sério (FISL 2011)
JavaScript agora é sério (FISL 2011)
 
JAVA: Muito mais que uma linguagem
JAVA: Muito mais que uma linguagemJAVA: Muito mais que uma linguagem
JAVA: Muito mais que uma linguagem
 
Java e orientação a objetos
Java e orientação a objetosJava e orientação a objetos
Java e orientação a objetos
 
Minicurso groovy grails
Minicurso groovy grailsMinicurso groovy grails
Minicurso groovy grails
 
Poo slides01
Poo slides01Poo slides01
Poo slides01
 
Java - Learn Once Use Anywhere
Java - Learn Once Use AnywhereJava - Learn Once Use Anywhere
Java - Learn Once Use Anywhere
 
Desenvolvimento Agil Com Doctrine Orm
Desenvolvimento Agil Com Doctrine OrmDesenvolvimento Agil Com Doctrine Orm
Desenvolvimento Agil Com Doctrine Orm
 
Spring framework 2.5
Spring framework 2.5Spring framework 2.5
Spring framework 2.5
 
TypeScript - Campus party 2013
TypeScript - Campus party 2013TypeScript - Campus party 2013
TypeScript - Campus party 2013
 
Produtividade em Java com Grails
Produtividade em Java com GrailsProdutividade em Java com Grails
Produtividade em Java com Grails
 
RubyConfBr 2015 - Rails & Javascript: faça isso direito
RubyConfBr 2015 - Rails & Javascript: faça isso direitoRubyConfBr 2015 - Rails & Javascript: faça isso direito
RubyConfBr 2015 - Rails & Javascript: faça isso direito
 
Desenvolvimento Java
 Desenvolvimento Java Desenvolvimento Java
Desenvolvimento Java
 
JasperReports Tecnicas de geracao_de_relatorios1
JasperReports  Tecnicas de geracao_de_relatorios1JasperReports  Tecnicas de geracao_de_relatorios1
JasperReports Tecnicas de geracao_de_relatorios1
 
Apresentação sobre MVVMC
Apresentação sobre MVVMCApresentação sobre MVVMC
Apresentação sobre MVVMC
 
Os 10 maus habitos dos desenvolvedores jsf (JustJava e CCT)
Os 10 maus habitos dos desenvolvedores jsf (JustJava e CCT)Os 10 maus habitos dos desenvolvedores jsf (JustJava e CCT)
Os 10 maus habitos dos desenvolvedores jsf (JustJava e CCT)
 
Esta começando a programar para a web? Então começe com Rails
Esta começando a programar para a web? Então começe com RailsEsta começando a programar para a web? Então começe com Rails
Esta começando a programar para a web? Então começe com Rails
 
Javascript no SAPO e libsapojs
Javascript no SAPO e libsapojsJavascript no SAPO e libsapojs
Javascript no SAPO e libsapojs
 
Java script1
Java script1Java script1
Java script1
 
Conceitos Básicos de OO e Java
Conceitos Básicos de OO e JavaConceitos Básicos de OO e Java
Conceitos Básicos de OO e Java
 

Mais de Luciano Ramalho

Introdução a linguagem Python
Introdução a linguagem PythonIntrodução a linguagem Python
Introdução a linguagem PythonLuciano Ramalho
 
Iteráveis e geradores (versão RuPy)
Iteráveis e geradores (versão RuPy)Iteráveis e geradores (versão RuPy)
Iteráveis e geradores (versão RuPy)Luciano Ramalho
 
Orientação a objetos em Python (compacto)
Orientação a objetos em Python (compacto)Orientação a objetos em Python (compacto)
Orientação a objetos em Python (compacto)Luciano Ramalho
 
Encapsulamento com descritores
Encapsulamento com descritoresEncapsulamento com descritores
Encapsulamento com descritoresLuciano Ramalho
 
Arduino: hardware hacking & coding dojo
Arduino: hardware hacking & coding dojoArduino: hardware hacking & coding dojo
Arduino: hardware hacking & coding dojoLuciano Ramalho
 
Objetos Pythonicos - compacto
Objetos Pythonicos - compactoObjetos Pythonicos - compacto
Objetos Pythonicos - compactoLuciano Ramalho
 
Iteraveis e geradores em Python
Iteraveis e geradores em PythonIteraveis e geradores em Python
Iteraveis e geradores em PythonLuciano Ramalho
 
Encapsulamento com Descritores em Python
Encapsulamento com Descritores em PythonEncapsulamento com Descritores em Python
Encapsulamento com Descritores em PythonLuciano Ramalho
 
Python: Iteraveis, geradores etc
Python: Iteraveis, geradores etcPython: Iteraveis, geradores etc
Python: Iteraveis, geradores etcLuciano Ramalho
 
Jython no JavaOne Latin America 2011
Jython no JavaOne Latin America 2011Jython no JavaOne Latin America 2011
Jython no JavaOne Latin America 2011Luciano Ramalho
 
Python para quem sabe Python (aula 2)
Python para quem sabe Python (aula 2)Python para quem sabe Python (aula 2)
Python para quem sabe Python (aula 2)Luciano Ramalho
 
OO em Python sem sotaque
OO em Python sem sotaqueOO em Python sem sotaque
OO em Python sem sotaqueLuciano Ramalho
 
Python, a arma secreta do Google
Python, a arma secreta do GooglePython, a arma secreta do Google
Python, a arma secreta do GoogleLuciano Ramalho
 

Mais de Luciano Ramalho (20)

Wiki-wiki S/A
Wiki-wiki S/AWiki-wiki S/A
Wiki-wiki S/A
 
Mongodb: agregação
Mongodb: agregaçãoMongodb: agregação
Mongodb: agregação
 
Introdução a linguagem Python
Introdução a linguagem PythonIntrodução a linguagem Python
Introdução a linguagem Python
 
Iteráveis e geradores (versão RuPy)
Iteráveis e geradores (versão RuPy)Iteráveis e geradores (versão RuPy)
Iteráveis e geradores (versão RuPy)
 
Orientação a objetos em Python (compacto)
Orientação a objetos em Python (compacto)Orientação a objetos em Python (compacto)
Orientação a objetos em Python (compacto)
 
Encapsulamento com descritores
Encapsulamento com descritoresEncapsulamento com descritores
Encapsulamento com descritores
 
Iteraveis e geradores
Iteraveis e geradoresIteraveis e geradores
Iteraveis e geradores
 
Arduino: hardware hacking & coding dojo
Arduino: hardware hacking & coding dojoArduino: hardware hacking & coding dojo
Arduino: hardware hacking & coding dojo
 
Objetos Pythonicos - compacto
Objetos Pythonicos - compactoObjetos Pythonicos - compacto
Objetos Pythonicos - compacto
 
Iteraveis e geradores em Python
Iteraveis e geradores em PythonIteraveis e geradores em Python
Iteraveis e geradores em Python
 
Encapsulamento com Descritores em Python
Encapsulamento com Descritores em PythonEncapsulamento com Descritores em Python
Encapsulamento com Descritores em Python
 
Dojo com Processing
Dojo com ProcessingDojo com Processing
Dojo com Processing
 
Dojo com Arduino
Dojo com ArduinoDojo com Arduino
Dojo com Arduino
 
Python: Iteraveis, geradores etc
Python: Iteraveis, geradores etcPython: Iteraveis, geradores etc
Python: Iteraveis, geradores etc
 
Open Library no Mongodb
Open Library no MongodbOpen Library no Mongodb
Open Library no Mongodb
 
Jython no JavaOne Latin America 2011
Jython no JavaOne Latin America 2011Jython no JavaOne Latin America 2011
Jython no JavaOne Latin America 2011
 
Python para quem sabe Python (aula 2)
Python para quem sabe Python (aula 2)Python para quem sabe Python (aula 2)
Python para quem sabe Python (aula 2)
 
OO em Python sem sotaque
OO em Python sem sotaqueOO em Python sem sotaque
OO em Python sem sotaque
 
Modelos ricos
Modelos ricosModelos ricos
Modelos ricos
 
Python, a arma secreta do Google
Python, a arma secreta do GooglePython, a arma secreta do Google
Python, a arma secreta do Google
 

JavaScript: agora é sério

  • 1. JavaScript: agora é sério Luciano Ramalho luciano@ramgarlic.com Grupo de Discussão JSPRO http://groups.google.com/group/jspro
  • 2. Demo JavaScript fora do navegador, com Node.js Exemplo de script para checar links em um arquivo JSON produzido por uma view no CouchDB
  • 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 Clube groups.google.com/group/jspro
  • 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ça groups.google.com/group/jspro
  • 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ática groups.google.com/group/jspro
  • 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. 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 groups.google.com/group/jspro
  • 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 este groups.google.com/group/jspro problema
  • 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. 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
  • 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. ECMA-262 5.1 Edition jun/2011 256 pag. http://www.ecma-international.org/publications/files/ECMA-ST/Ecma-262.pdf
  • 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 costumes groups.google.com/group/jspro
  • 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.
  • 17.
  • 18.
  • 19.
  • 20.
  • 21.
  • 22.
  • 23.
  • 24.
  • 25.
  • 26.
  • 27. 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
  • 28. 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
  • 29. 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
  • 30. 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
  • 31. 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
  • 32. forEach // print process.argv process.argv.forEach( function (val, index, array) { console.log(index + ': ' + val); }); groups.google.com/group/jspro
  • 33. Usos modernos de uma expressão-função escopo local (function(){ })() groups.google.com/group/jspro
  • 34. Usos modernos de uma expressão-função jQuery.noConflict(); (function($){ $("div#jQuery").css( "font-weight","bold"); })(jQuery); groups.google.com/group/jspro
  • 35. 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 CouchApps groups.google.com/group/jspro
  • 36. 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 sintaxe groups.google.com/group/jspro
  • 37.
  • 38.
  • 41. 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