SlideShare uma empresa Scribd logo
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

Mais conteúdo relacionado

Mais procurados

Python para Programadores
Python para ProgramadoresPython para Programadores
Python para Programadores
Osvaldo Santana Neto
 
Desenvolvendo aplicações web com python e web2py
Desenvolvendo aplicações web com python e web2pyDesenvolvendo aplicações web com python e web2py
Desenvolvendo aplicações web com python e web2py
Gilson Filho
 
Python 3k
Python 3kPython 3k
Django - Desenvolvimento web ágil com Python
Django - Desenvolvimento web ágil com PythonDjango - Desenvolvimento web ágil com Python
Django - Desenvolvimento web ágil com Python
Igor Sobreira
 
Erlang e Elixir por uma web mais feliz
Erlang e Elixir por uma web mais felizErlang e Elixir por uma web mais feliz
Erlang e Elixir por uma web mais feliz
Bruno Henrique - Garu
 
Minicurso de Django - Desenvolvimento ágil web com Django e Python
Minicurso de Django - Desenvolvimento ágil web com Django e PythonMinicurso de Django - Desenvolvimento ágil web com Django e Python
Minicurso de Django - Desenvolvimento ágil web com Django e Python
Guilherme Garcia
 
Python para iniciantes
Python para iniciantesPython para iniciantes
Python para iniciantes
richardsonlima
 
Python Training #1 ed.6
Python Training #1 ed.6 Python Training #1 ed.6
Python Training #1 ed.6
Fabio Spanhol
 
Programando em Elixir
Programando em ElixirProgramando em Elixir
Programando em Elixir
Adolfo Neto
 
Python e django na prática
Python e django na práticaPython e django na prática
Python e django na prática
Rafael Cassau
 
Introdução a linguagem Python
Introdução a linguagem PythonIntrodução a linguagem Python
Introdução a linguagem Python
Luciano Ramalho
 
Curso de Java (Parte 1)
Curso de Java (Parte 1)Curso de Java (Parte 1)
Curso de Java (Parte 1)
Mario Sergio
 
Palestra Apresentando Python e Suas Aplicações
Palestra Apresentando Python e Suas AplicaçõesPalestra Apresentando Python e Suas Aplicações
Palestra Apresentando Python e Suas Aplicações
Marcos Thomaz
 
Python: programação divertida novamente
Python: programação divertida novamentePython: programação divertida novamente
Python: programação divertida novamente
Rodrigo Amaral
 
Introdução à Metaprogramação com Java Reflection API
Introdução à Metaprogramação com Java Reflection APIIntrodução à Metaprogramação com Java Reflection API
Introdução à Metaprogramação com Java Reflection API
Guilherme de Cleva Farto
 
Linguagem Go
Linguagem GoLinguagem Go
Linguagem Go
Natã Melo
 
Introdução a Linguagem de Programação Python
Introdução a Linguagem de Programação PythonIntrodução a Linguagem de Programação Python
Introdução a Linguagem de Programação Python
Flávio Ribeiro
 

Mais procurados (17)

Python para Programadores
Python para ProgramadoresPython para Programadores
Python para Programadores
 
Desenvolvendo aplicações web com python e web2py
Desenvolvendo aplicações web com python e web2pyDesenvolvendo aplicações web com python e web2py
Desenvolvendo aplicações web com python e web2py
 
Python 3k
Python 3kPython 3k
Python 3k
 
Django - Desenvolvimento web ágil com Python
Django - Desenvolvimento web ágil com PythonDjango - Desenvolvimento web ágil com Python
Django - Desenvolvimento web ágil com Python
 
Erlang e Elixir por uma web mais feliz
Erlang e Elixir por uma web mais felizErlang e Elixir por uma web mais feliz
Erlang e Elixir por uma web mais feliz
 
Minicurso de Django - Desenvolvimento ágil web com Django e Python
Minicurso de Django - Desenvolvimento ágil web com Django e PythonMinicurso de Django - Desenvolvimento ágil web com Django e Python
Minicurso de Django - Desenvolvimento ágil web com Django e Python
 
Python para iniciantes
Python para iniciantesPython para iniciantes
Python para iniciantes
 
Python Training #1 ed.6
Python Training #1 ed.6 Python Training #1 ed.6
Python Training #1 ed.6
 
Programando em Elixir
Programando em ElixirProgramando em Elixir
Programando em Elixir
 
Python e django na prática
Python e django na práticaPython e django na prática
Python e django na prática
 
Introdução a linguagem Python
Introdução a linguagem PythonIntrodução a linguagem Python
Introdução a linguagem Python
 
Curso de Java (Parte 1)
Curso de Java (Parte 1)Curso de Java (Parte 1)
Curso de Java (Parte 1)
 
Palestra Apresentando Python e Suas Aplicações
Palestra Apresentando Python e Suas AplicaçõesPalestra Apresentando Python e Suas Aplicações
Palestra Apresentando Python e Suas Aplicações
 
Python: programação divertida novamente
Python: programação divertida novamentePython: programação divertida novamente
Python: programação divertida novamente
 
Introdução à Metaprogramação com Java Reflection API
Introdução à Metaprogramação com Java Reflection APIIntrodução à Metaprogramação com Java Reflection API
Introdução à Metaprogramação com Java Reflection API
 
Linguagem Go
Linguagem GoLinguagem Go
Linguagem Go
 
Introdução a Linguagem de Programação Python
Introdução a Linguagem de Programação PythonIntrodução a Linguagem de Programação Python
Introdução a Linguagem de Programação Python
 

Semelhante a JavaScript agora é sério (FISL 2011)

JavaScript agora é sério (TDC 2011)
JavaScript agora é sério (TDC 2011)JavaScript agora é sério (TDC 2011)
JavaScript agora é sério (TDC 2011)
Luciano Ramalho
 
Javascript
JavascriptJavascript
JavaScript: agora é sério
JavaScript: agora é sérioJavaScript: agora é sério
JavaScript: agora é sério
Luciano Ramalho
 
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
Charles Jungbeck
 
JAVA: Muito mais que uma linguagem
JAVA: Muito mais que uma linguagemJAVA: Muito mais que uma linguagem
JAVA: Muito mais que uma linguagem
liverig
 
Javascript levado a serio
Javascript levado a serioJavascript levado a serio
Javascript levado a serio
Jaydson Gomes
 
Linguagens Dinamicas na JVM
Linguagens Dinamicas na JVMLinguagens Dinamicas na JVM
Linguagens Dinamicas na JVM
William Gouvea
 
Introducao java
Introducao javaIntroducao java
Introducao java
Mauricio Wieler
 
Imergindo na JVM
Imergindo na JVMImergindo na JVM
Imergindo na JVM
Otávio Santana
 
Introdução ao desenvolvimento de apps para Android - Dia 1/2
Introdução ao desenvolvimento de apps para Android - Dia 1/2Introdução ao desenvolvimento de apps para Android - Dia 1/2
Introdução ao desenvolvimento de apps para Android - Dia 1/2
Matheus Calegaro
 
Apresentação curso de Extensão em Java (UERJ-IME) v1
Apresentação curso de Extensão em Java (UERJ-IME) v1Apresentação curso de Extensão em Java (UERJ-IME) v1
Apresentação curso de Extensão em Java (UERJ-IME) v1
Marcelo Zeferino
 
Java Fundamentos
Java FundamentosJava Fundamentos
Java Fundamentos
Wilson Lima
 
Django: Uso de frameworks ágeis para desenvolvimento web
Django: Uso de frameworks ágeis para desenvolvimento webDjango: Uso de frameworks ágeis para desenvolvimento web
Django: Uso de frameworks ágeis para desenvolvimento web
Miguel Galves
 
Conhecendo a JSR 223: Scripting for the Java Platform
Conhecendo a JSR 223: Scripting for the Java PlatformConhecendo a JSR 223: Scripting for the Java Platform
Conhecendo a JSR 223: Scripting for the Java Platform
Milfont Consulting
 
Linguagem de programação Java 6, 7 e 8
Linguagem de programação Java 6, 7 e 8Linguagem de programação Java 6, 7 e 8
Linguagem de programação Java 6, 7 e 8
Rogério Moraes de Carvalho
 
Python Zope Plone - Fiocruz
Python Zope Plone - FiocruzPython Zope Plone - Fiocruz
Python Zope Plone - Fiocruz
Luciano Camargo Cruz
 
Java 8 - A Evolução da Linguagem
Java 8 - A Evolução da LinguagemJava 8 - A Evolução da Linguagem
Java 8 - A Evolução da Linguagem
Petronio Candido
 
Tutorial java script orientado à objeto e jquery
Tutorial java script orientado à objeto e jqueryTutorial java script orientado à objeto e jquery
Tutorial java script orientado à objeto e jquery
Luan Campos
 
Jugday - Java Básico
Jugday - Java BásicoJugday - Java Básico
Jugday - Java Básico
Paloma Costa
 
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
Vinicius Reis
 

Semelhante a JavaScript agora é sério (FISL 2011) (20)

JavaScript agora é sério (TDC 2011)
JavaScript agora é sério (TDC 2011)JavaScript agora é sério (TDC 2011)
JavaScript agora é sério (TDC 2011)
 
Javascript
JavascriptJavascript
Javascript
 
JavaScript: agora é sério
JavaScript: agora é sérioJavaScript: agora é sério
JavaScript: agora é sério
 
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
 
JAVA: Muito mais que uma linguagem
JAVA: Muito mais que uma linguagemJAVA: Muito mais que uma linguagem
JAVA: Muito mais que uma linguagem
 
Javascript levado a serio
Javascript levado a serioJavascript levado a serio
Javascript levado a serio
 
Linguagens Dinamicas na JVM
Linguagens Dinamicas na JVMLinguagens Dinamicas na JVM
Linguagens Dinamicas na JVM
 
Introducao java
Introducao javaIntroducao java
Introducao java
 
Imergindo na JVM
Imergindo na JVMImergindo na JVM
Imergindo na JVM
 
Introdução ao desenvolvimento de apps para Android - Dia 1/2
Introdução ao desenvolvimento de apps para Android - Dia 1/2Introdução ao desenvolvimento de apps para Android - Dia 1/2
Introdução ao desenvolvimento de apps para Android - Dia 1/2
 
Apresentação curso de Extensão em Java (UERJ-IME) v1
Apresentação curso de Extensão em Java (UERJ-IME) v1Apresentação curso de Extensão em Java (UERJ-IME) v1
Apresentação curso de Extensão em Java (UERJ-IME) v1
 
Java Fundamentos
Java FundamentosJava Fundamentos
Java Fundamentos
 
Django: Uso de frameworks ágeis para desenvolvimento web
Django: Uso de frameworks ágeis para desenvolvimento webDjango: Uso de frameworks ágeis para desenvolvimento web
Django: Uso de frameworks ágeis para desenvolvimento web
 
Conhecendo a JSR 223: Scripting for the Java Platform
Conhecendo a JSR 223: Scripting for the Java PlatformConhecendo a JSR 223: Scripting for the Java Platform
Conhecendo a JSR 223: Scripting for the Java Platform
 
Linguagem de programação Java 6, 7 e 8
Linguagem de programação Java 6, 7 e 8Linguagem de programação Java 6, 7 e 8
Linguagem de programação Java 6, 7 e 8
 
Python Zope Plone - Fiocruz
Python Zope Plone - FiocruzPython Zope Plone - Fiocruz
Python Zope Plone - Fiocruz
 
Java 8 - A Evolução da Linguagem
Java 8 - A Evolução da LinguagemJava 8 - A Evolução da Linguagem
Java 8 - A Evolução da Linguagem
 
Tutorial java script orientado à objeto e jquery
Tutorial java script orientado à objeto e jqueryTutorial java script orientado à objeto e jquery
Tutorial java script orientado à objeto e jquery
 
Jugday - Java Básico
Jugday - Java BásicoJugday - Java Básico
Jugday - Java Básico
 
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
 

Mais de Luciano Ramalho

Wiki-wiki S/A
Wiki-wiki S/AWiki-wiki S/A
Wiki-wiki S/A
Luciano Ramalho
 
Mongodb: agregação
Mongodb: agregaçãoMongodb: agregação
Mongodb: agregação
Luciano 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 descritores
Luciano Ramalho
 
Iteraveis e geradores
Iteraveis e geradoresIteraveis e geradores
Iteraveis e geradores
Luciano Ramalho
 
Arduino: hardware hacking & coding dojo
Arduino: hardware hacking & coding dojoArduino: hardware hacking & coding dojo
Arduino: hardware hacking & coding dojo
Luciano Ramalho
 
Objetos Pythonicos - compacto
Objetos Pythonicos - compactoObjetos Pythonicos - compacto
Objetos Pythonicos - compacto
Luciano Ramalho
 
Iteraveis e geradores em Python
Iteraveis e geradores em PythonIteraveis e geradores em Python
Iteraveis e geradores em Python
Luciano Ramalho
 
Encapsulamento com Descritores em Python
Encapsulamento com Descritores em PythonEncapsulamento com Descritores em Python
Encapsulamento com Descritores em Python
Luciano Ramalho
 
Dojo com Processing
Dojo com ProcessingDojo com Processing
Dojo com Processing
Luciano Ramalho
 
Dojo com Arduino
Dojo com ArduinoDojo com Arduino
Dojo com Arduino
Luciano Ramalho
 
Python: Iteraveis, geradores etc
Python: Iteraveis, geradores etcPython: Iteraveis, geradores etc
Python: Iteraveis, geradores etc
Luciano Ramalho
 
Open Library no Mongodb
Open Library no MongodbOpen Library no Mongodb
Open Library no Mongodb
Luciano Ramalho
 
Jython no JavaOne Latin America 2011
Jython no JavaOne Latin America 2011Jython no JavaOne Latin America 2011
Jython no JavaOne Latin America 2011
Luciano 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 sotaque
Luciano Ramalho
 
Modelos ricos
Modelos ricosModelos ricos
Modelos ricos
Luciano Ramalho
 
Python, a arma secreta do Google
Python, a arma secreta do GooglePython, a arma secreta do Google
Python, a arma secreta do Google
Luciano Ramalho
 
Ensinando OO com Python
Ensinando OO com PythonEnsinando OO com Python
Ensinando OO com Python
Luciano 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
 
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
 
Ensinando OO com Python
Ensinando OO com PythonEnsinando OO com Python
Ensinando OO com Python
 

Último

ExpoGestão 2024 - Desvendando um mundo em ebulição
ExpoGestão 2024 - Desvendando um mundo em ebuliçãoExpoGestão 2024 - Desvendando um mundo em ebulição
ExpoGestão 2024 - Desvendando um mundo em ebulição
ExpoGestão
 
se38_layout_erro_xxxxxxxxxxxxxxxxxx.docx
se38_layout_erro_xxxxxxxxxxxxxxxxxx.docxse38_layout_erro_xxxxxxxxxxxxxxxxxx.docx
se38_layout_erro_xxxxxxxxxxxxxxxxxx.docx
ronaldos10
 
INTELIGÊNCIA ARTIFICIAL + COMPUTAÇÃO QUÂNTICA = MAIOR REVOLUÇÃO TECNOLÓGICA D...
INTELIGÊNCIA ARTIFICIAL + COMPUTAÇÃO QUÂNTICA = MAIOR REVOLUÇÃO TECNOLÓGICA D...INTELIGÊNCIA ARTIFICIAL + COMPUTAÇÃO QUÂNTICA = MAIOR REVOLUÇÃO TECNOLÓGICA D...
INTELIGÊNCIA ARTIFICIAL + COMPUTAÇÃO QUÂNTICA = MAIOR REVOLUÇÃO TECNOLÓGICA D...
Faga1939
 
Ferramentas que irão te ajudar a entrar no mundo de DevOps/CLoud
Ferramentas que irão te ajudar a entrar no mundo de   DevOps/CLoudFerramentas que irão te ajudar a entrar no mundo de   DevOps/CLoud
Ferramentas que irão te ajudar a entrar no mundo de DevOps/CLoud
Ismael Ash
 
Subindo uma aplicação WordPress em docker na AWS
Subindo uma aplicação WordPress em docker na AWSSubindo uma aplicação WordPress em docker na AWS
Subindo uma aplicação WordPress em docker na AWS
Ismael Ash
 
ExpoGestão 2024 - Inteligência Artificial – A revolução no mundo dos negócios
ExpoGestão 2024 - Inteligência Artificial – A revolução no mundo dos negóciosExpoGestão 2024 - Inteligência Artificial – A revolução no mundo dos negócios
ExpoGestão 2024 - Inteligência Artificial – A revolução no mundo dos negócios
ExpoGestão
 

Último (6)

ExpoGestão 2024 - Desvendando um mundo em ebulição
ExpoGestão 2024 - Desvendando um mundo em ebuliçãoExpoGestão 2024 - Desvendando um mundo em ebulição
ExpoGestão 2024 - Desvendando um mundo em ebulição
 
se38_layout_erro_xxxxxxxxxxxxxxxxxx.docx
se38_layout_erro_xxxxxxxxxxxxxxxxxx.docxse38_layout_erro_xxxxxxxxxxxxxxxxxx.docx
se38_layout_erro_xxxxxxxxxxxxxxxxxx.docx
 
INTELIGÊNCIA ARTIFICIAL + COMPUTAÇÃO QUÂNTICA = MAIOR REVOLUÇÃO TECNOLÓGICA D...
INTELIGÊNCIA ARTIFICIAL + COMPUTAÇÃO QUÂNTICA = MAIOR REVOLUÇÃO TECNOLÓGICA D...INTELIGÊNCIA ARTIFICIAL + COMPUTAÇÃO QUÂNTICA = MAIOR REVOLUÇÃO TECNOLÓGICA D...
INTELIGÊNCIA ARTIFICIAL + COMPUTAÇÃO QUÂNTICA = MAIOR REVOLUÇÃO TECNOLÓGICA D...
 
Ferramentas que irão te ajudar a entrar no mundo de DevOps/CLoud
Ferramentas que irão te ajudar a entrar no mundo de   DevOps/CLoudFerramentas que irão te ajudar a entrar no mundo de   DevOps/CLoud
Ferramentas que irão te ajudar a entrar no mundo de DevOps/CLoud
 
Subindo uma aplicação WordPress em docker na AWS
Subindo uma aplicação WordPress em docker na AWSSubindo uma aplicação WordPress em docker na AWS
Subindo uma aplicação WordPress em docker na AWS
 
ExpoGestão 2024 - Inteligência Artificial – A revolução no mundo dos negócios
ExpoGestão 2024 - Inteligência Artificial – A revolução no mundo dos negóciosExpoGestão 2024 - Inteligência Artificial – A revolução no mundo dos negócios
ExpoGestão 2024 - Inteligência Artificial – A revolução no mundo dos negócios
 

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 é 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
  • 9. Tipagem dinâmica e fraca ? groups.google.com/group/jspro Friday, July 1, 2011
  • 10. Tipagem dinâmica e fraca Exemplos do D. Crockford (O Melhor do JavaScript) groups.google.com/group/jspro Friday, July 1, 2011
  • 11. 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
  • 12. 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
  • 13. 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
  • 14. 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
  • 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 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
  • 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 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