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

Mais conteúdo relacionado

Mais procurados

TDC 2011 Goiânia: Evolução da linguagem de programação JavaScript
TDC 2011 Goiânia: Evolução da linguagem de programação JavaScriptTDC 2011 Goiânia: Evolução da linguagem de programação JavaScript
TDC 2011 Goiânia: Evolução da linguagem de programação JavaScript
Rogério Moraes de Carvalho
 
Introdução a Linguagem de Programação Ruby
Introdução a Linguagem de Programação RubyIntrodução a Linguagem de Programação Ruby
Introdução a Linguagem de Programação Ruby
Diego Rubin
 
Aprender Javascript e jQuery (UFCD
Aprender Javascript e jQuery (UFCDAprender Javascript e jQuery (UFCD
Aprender Javascript e jQuery (UFCD
Afonso Gomes
 
Palestra Ruby
Palestra RubyPalestra Ruby
Palestra Ruby
Cássio Marques
 
Introdução à programação em Ruby
Introdução à programação em RubyIntrodução à programação em Ruby
Introdução à programação em Ruby
Daniel Andrade
 
1.introducao java
1.introducao java1.introducao java
1.introducao java
Kievnny Mendonca
 
Curso de OO com C# - Parte 02 - Introdução ao C#
Curso de OO com C# - Parte 02 - Introdução ao C#Curso de OO com C# - Parte 02 - Introdução ao C#
Curso de OO com C# - Parte 02 - Introdução ao C#
Leonardo Melo Santos
 
Ruby & Rails
Ruby & RailsRuby & Rails
Ruby & Rails
Sergio Henrique
 
Introducao ao C#
Introducao ao C#Introducao ao C#
Introducao ao C#
Andre Teixeira Lopes
 
Curso Ruby
Curso RubyCurso Ruby
Curso Ruby
Regis Magalhães
 
Como Construir um Compilador cap-1
Como Construir um Compilador cap-1Como Construir um Compilador cap-1
Como Construir um Compilador cap-1
Maellson Marques
 
Criando sua própria linguagem de programação
Criando sua própria linguagem de programaçãoCriando sua própria linguagem de programação
Criando sua própria linguagem de programação
ronaldoferraz
 
POO - Aula 003
POO - Aula 003POO - Aula 003
Javafx Introdução
Javafx IntroduçãoJavafx Introdução
Javafx Introdução
Fábio Nogueira de Lucena
 
Javascript para CSharpers 1 - Comparando
Javascript para CSharpers   1 - ComparandoJavascript para CSharpers   1 - Comparando
Javascript para CSharpers 1 - Comparando
Wesley Lemos
 
Paradigmas do Ruby
Paradigmas do RubyParadigmas do Ruby
Paradigmas do Ruby
Heverson Damasceno
 
Swift em 45 minutos - TDC Sao Paulo 2014
Swift em 45 minutos - TDC Sao Paulo 2014Swift em 45 minutos - TDC Sao Paulo 2014
Swift em 45 minutos - TDC Sao Paulo 2014
Helder da Rocha
 
JavaScript "for dummies"
JavaScript "for dummies"JavaScript "for dummies"
JavaScript "for dummies"
Murilo Beltrame
 
Python - Programando em alto nível
Python - Programando em alto nívelPython - Programando em alto nível
Python - Programando em alto nível
Igor Sobreira
 
Curso de OO com C# - Parte 05 - Coleções genéricas e não-genéricas
Curso de OO com C# - Parte 05 - Coleções genéricas e não-genéricasCurso de OO com C# - Parte 05 - Coleções genéricas e não-genéricas
Curso de OO com C# - Parte 05 - Coleções genéricas e não-genéricas
Leonardo Melo Santos
 

Mais procurados (20)

TDC 2011 Goiânia: Evolução da linguagem de programação JavaScript
TDC 2011 Goiânia: Evolução da linguagem de programação JavaScriptTDC 2011 Goiânia: Evolução da linguagem de programação JavaScript
TDC 2011 Goiânia: Evolução da linguagem de programação JavaScript
 
Introdução a Linguagem de Programação Ruby
Introdução a Linguagem de Programação RubyIntrodução a Linguagem de Programação Ruby
Introdução a Linguagem de Programação Ruby
 
Aprender Javascript e jQuery (UFCD
Aprender Javascript e jQuery (UFCDAprender Javascript e jQuery (UFCD
Aprender Javascript e jQuery (UFCD
 
Palestra Ruby
Palestra RubyPalestra Ruby
Palestra Ruby
 
Introdução à programação em Ruby
Introdução à programação em RubyIntrodução à programação em Ruby
Introdução à programação em Ruby
 
1.introducao java
1.introducao java1.introducao java
1.introducao java
 
Curso de OO com C# - Parte 02 - Introdução ao C#
Curso de OO com C# - Parte 02 - Introdução ao C#Curso de OO com C# - Parte 02 - Introdução ao C#
Curso de OO com C# - Parte 02 - Introdução ao C#
 
Ruby & Rails
Ruby & RailsRuby & Rails
Ruby & Rails
 
Introducao ao C#
Introducao ao C#Introducao ao C#
Introducao ao C#
 
Curso Ruby
Curso RubyCurso Ruby
Curso Ruby
 
Como Construir um Compilador cap-1
Como Construir um Compilador cap-1Como Construir um Compilador cap-1
Como Construir um Compilador cap-1
 
Criando sua própria linguagem de programação
Criando sua própria linguagem de programaçãoCriando sua própria linguagem de programação
Criando sua própria linguagem de programação
 
POO - Aula 003
POO - Aula 003POO - Aula 003
POO - Aula 003
 
Javafx Introdução
Javafx IntroduçãoJavafx Introdução
Javafx Introdução
 
Javascript para CSharpers 1 - Comparando
Javascript para CSharpers   1 - ComparandoJavascript para CSharpers   1 - Comparando
Javascript para CSharpers 1 - Comparando
 
Paradigmas do Ruby
Paradigmas do RubyParadigmas do Ruby
Paradigmas do Ruby
 
Swift em 45 minutos - TDC Sao Paulo 2014
Swift em 45 minutos - TDC Sao Paulo 2014Swift em 45 minutos - TDC Sao Paulo 2014
Swift em 45 minutos - TDC Sao Paulo 2014
 
JavaScript "for dummies"
JavaScript "for dummies"JavaScript "for dummies"
JavaScript "for dummies"
 
Python - Programando em alto nível
Python - Programando em alto nívelPython - Programando em alto nível
Python - Programando em alto nível
 
Curso de OO com C# - Parte 05 - Coleções genéricas e não-genéricas
Curso de OO com C# - Parte 05 - Coleções genéricas e não-genéricasCurso de OO com C# - Parte 05 - Coleções genéricas e não-genéricas
Curso de OO com C# - Parte 05 - Coleções genéricas e não-genéricas
 

Destaque

Que-Fala!
Que-Fala!Que-Fala!
Que-Fala!
Daniel Barbosa
 
GDD Brazil 2010 - What's new in Google App Engine and Google App Engine For B...
GDD Brazil 2010 - What's new in Google App Engine and Google App Engine For B...GDD Brazil 2010 - What's new in Google App Engine and Google App Engine For B...
GDD Brazil 2010 - What's new in Google App Engine and Google App Engine For B...
Patrick Chanezon
 
Contruindo Aplicações móveis com o Cordova e o Visual Studio
Contruindo Aplicações móveis com o Cordova e o Visual StudioContruindo Aplicações móveis com o Cordova e o Visual Studio
Contruindo Aplicações móveis com o Cordova e o Visual Studio
Wennder Santos
 
Curso: Desenvolvimento de aplicativos híbridos (dia 2)
Curso: Desenvolvimento de aplicativos híbridos (dia 2)Curso: Desenvolvimento de aplicativos híbridos (dia 2)
Curso: Desenvolvimento de aplicativos híbridos (dia 2)
Wennder Santos
 
Mobile Dev - Aplicativos
Mobile Dev - AplicativosMobile Dev - Aplicativos
Mobile Dev - Aplicativos
Alex Espirito Santo
 
HockeyApp: A plataforma para seus apps
HockeyApp: A plataforma para seus appsHockeyApp: A plataforma para seus apps
HockeyApp: A plataforma para seus apps
Wennder Santos
 
GDD Brazil 2010 - Google Storage, Bigquery and Prediction APIs
GDD Brazil 2010 - Google Storage, Bigquery and Prediction APIsGDD Brazil 2010 - Google Storage, Bigquery and Prediction APIs
GDD Brazil 2010 - Google Storage, Bigquery and Prediction APIs
Patrick Chanezon
 
Curso: Desenvolvimento de aplicativos híbridos (dia 1)
Curso: Desenvolvimento de aplicativos híbridos (dia 1)Curso: Desenvolvimento de aplicativos híbridos (dia 1)
Curso: Desenvolvimento de aplicativos híbridos (dia 1)
Wennder Santos
 
Curso de Desenvolvimento de Aplicativos Híbridos com PhoneGap/Cordova, e Ionic
Curso de Desenvolvimento de Aplicativos Híbridos com PhoneGap/Cordova, e IonicCurso de Desenvolvimento de Aplicativos Híbridos com PhoneGap/Cordova, e Ionic
Curso de Desenvolvimento de Aplicativos Híbridos com PhoneGap/Cordova, e Ionic
Felipe Blini
 

Destaque (9)

Que-Fala!
Que-Fala!Que-Fala!
Que-Fala!
 
GDD Brazil 2010 - What's new in Google App Engine and Google App Engine For B...
GDD Brazil 2010 - What's new in Google App Engine and Google App Engine For B...GDD Brazil 2010 - What's new in Google App Engine and Google App Engine For B...
GDD Brazil 2010 - What's new in Google App Engine and Google App Engine For B...
 
Contruindo Aplicações móveis com o Cordova e o Visual Studio
Contruindo Aplicações móveis com o Cordova e o Visual StudioContruindo Aplicações móveis com o Cordova e o Visual Studio
Contruindo Aplicações móveis com o Cordova e o Visual Studio
 
Curso: Desenvolvimento de aplicativos híbridos (dia 2)
Curso: Desenvolvimento de aplicativos híbridos (dia 2)Curso: Desenvolvimento de aplicativos híbridos (dia 2)
Curso: Desenvolvimento de aplicativos híbridos (dia 2)
 
Mobile Dev - Aplicativos
Mobile Dev - AplicativosMobile Dev - Aplicativos
Mobile Dev - Aplicativos
 
HockeyApp: A plataforma para seus apps
HockeyApp: A plataforma para seus appsHockeyApp: A plataforma para seus apps
HockeyApp: A plataforma para seus apps
 
GDD Brazil 2010 - Google Storage, Bigquery and Prediction APIs
GDD Brazil 2010 - Google Storage, Bigquery and Prediction APIsGDD Brazil 2010 - Google Storage, Bigquery and Prediction APIs
GDD Brazil 2010 - Google Storage, Bigquery and Prediction APIs
 
Curso: Desenvolvimento de aplicativos híbridos (dia 1)
Curso: Desenvolvimento de aplicativos híbridos (dia 1)Curso: Desenvolvimento de aplicativos híbridos (dia 1)
Curso: Desenvolvimento de aplicativos híbridos (dia 1)
 
Curso de Desenvolvimento de Aplicativos Híbridos com PhoneGap/Cordova, e Ionic
Curso de Desenvolvimento de Aplicativos Híbridos com PhoneGap/Cordova, e IonicCurso de Desenvolvimento de Aplicativos Híbridos com PhoneGap/Cordova, e Ionic
Curso de Desenvolvimento de Aplicativos Híbridos com PhoneGap/Cordova, e Ionic
 

Semelhante a JavaScript: agora é sério

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
 
TypeScript - Campus party 2013
TypeScript - Campus party 2013TypeScript - Campus party 2013
TypeScript - Campus party 2013
Giovanni Bassi
 
Linguagens Dinamicas na JVM
Linguagens Dinamicas na JVMLinguagens Dinamicas na JVM
Linguagens Dinamicas na JVM
William Gouvea
 
O futuro do elephante: as promessas do php para 2019
O futuro do elephante: as promessas do php para 2019O futuro do elephante: as promessas do php para 2019
O futuro do elephante: as promessas do php para 2019
Cassio Santos
 
TechEd Brasil 2011: WEB 302 - Presente e futuro da linguagem de programação J...
TechEd Brasil 2011: WEB 302 - Presente e futuro da linguagem de programação J...TechEd Brasil 2011: WEB 302 - Presente e futuro da linguagem de programação J...
TechEd Brasil 2011: WEB 302 - Presente e futuro da linguagem de programação J...
Rogério Moraes de Carvalho
 
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
ismaelstahelin
 
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
 
JAVA: Muito mais que uma linguagem
JAVA: Muito mais que uma linguagemJAVA: Muito mais que uma linguagem
JAVA: Muito mais que uma linguagem
liverig
 
Introdução ao Java 5
Introdução ao Java 5Introdução ao Java 5
Introdução ao Java 5
Maurício Linhares
 
Comandos gerais do PHP
Comandos gerais do PHPComandos gerais do PHP
Comandos gerais do PHP
Paulo Dayvson
 
Palestra Desenvolvimento Ágil para Web com ROR UVA
Palestra Desenvolvimento Ágil para Web com ROR UVAPalestra Desenvolvimento Ágil para Web com ROR UVA
Palestra Desenvolvimento Ágil para Web com ROR UVA
Thiago Cifani
 
Além da programação funcional com Elixir e Erlang
Além da programação funcional com Elixir e ErlangAlém da programação funcional com Elixir e Erlang
Além da programação funcional com Elixir e Erlang
Elaine Naomi
 
Introducao logica2
Introducao logica2Introducao logica2
Introducao logica2
Denilton Darold
 
ptt
pttptt
Phpjedi 090307090434-phpapp01 2
Phpjedi 090307090434-phpapp01 2Phpjedi 090307090434-phpapp01 2
Phpjedi 090307090434-phpapp01 2
PrinceGuru MS
 
Desenvolvimento Agil Com Doctrine Orm
Desenvolvimento Agil Com Doctrine OrmDesenvolvimento Agil Com Doctrine Orm
Desenvolvimento Agil Com Doctrine Orm
Guilherme Blanco
 
Minicurso de Rails - WTISC 2014
Minicurso de Rails - WTISC 2014Minicurso de Rails - WTISC 2014
Minicurso de Rails - WTISC 2014
Zarathon Maia
 
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
 
Java Fundamentos
Java FundamentosJava Fundamentos
Java Fundamentos
Wilson Lima
 
Apresentação faef
Apresentação faefApresentação faef
Apresentação faef
Lucas Simões Maistro
 

Semelhante a JavaScript: agora é sério (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)
 
TypeScript - Campus party 2013
TypeScript - Campus party 2013TypeScript - Campus party 2013
TypeScript - Campus party 2013
 
Linguagens Dinamicas na JVM
Linguagens Dinamicas na JVMLinguagens Dinamicas na JVM
Linguagens Dinamicas na JVM
 
O futuro do elephante: as promessas do php para 2019
O futuro do elephante: as promessas do php para 2019O futuro do elephante: as promessas do php para 2019
O futuro do elephante: as promessas do php para 2019
 
TechEd Brasil 2011: WEB 302 - Presente e futuro da linguagem de programação J...
TechEd Brasil 2011: WEB 302 - Presente e futuro da linguagem de programação J...TechEd Brasil 2011: WEB 302 - Presente e futuro da linguagem de programação J...
TechEd Brasil 2011: WEB 302 - Presente e futuro da linguagem de programação J...
 
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
 
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
 
JAVA: Muito mais que uma linguagem
JAVA: Muito mais que uma linguagemJAVA: Muito mais que uma linguagem
JAVA: Muito mais que uma linguagem
 
Introdução ao Java 5
Introdução ao Java 5Introdução ao Java 5
Introdução ao Java 5
 
Comandos gerais do PHP
Comandos gerais do PHPComandos gerais do PHP
Comandos gerais do PHP
 
Palestra Desenvolvimento Ágil para Web com ROR UVA
Palestra Desenvolvimento Ágil para Web com ROR UVAPalestra Desenvolvimento Ágil para Web com ROR UVA
Palestra Desenvolvimento Ágil para Web com ROR UVA
 
Além da programação funcional com Elixir e Erlang
Além da programação funcional com Elixir e ErlangAlém da programação funcional com Elixir e Erlang
Além da programação funcional com Elixir e Erlang
 
Introducao logica2
Introducao logica2Introducao logica2
Introducao logica2
 
ptt
pttptt
ptt
 
Phpjedi 090307090434-phpapp01 2
Phpjedi 090307090434-phpapp01 2Phpjedi 090307090434-phpapp01 2
Phpjedi 090307090434-phpapp01 2
 
Desenvolvimento Agil Com Doctrine Orm
Desenvolvimento Agil Com Doctrine OrmDesenvolvimento Agil Com Doctrine Orm
Desenvolvimento Agil Com Doctrine Orm
 
Minicurso de Rails - WTISC 2014
Minicurso de Rails - WTISC 2014Minicurso de Rails - WTISC 2014
Minicurso de Rails - WTISC 2014
 
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
 
Java Fundamentos
Java FundamentosJava Fundamentos
Java Fundamentos
 
Apresentação faef
Apresentação faefApresentação faef
Apresentação faef
 

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
 
Introdução a linguagem Python
Introdução a linguagem PythonIntrodução a linguagem Python
Introdução a linguagem Python
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
 

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  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 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
  • 4. 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
  • 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 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)
  • 9. 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
  • 10. 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
  • 11. 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
  • 12.
  • 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 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