SlideShare uma empresa Scribd logo
1 de 17
Baixar para ler offline
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

Curso Básico de Java - Aula 2
Curso Básico de Java - Aula 2Curso Básico de Java - Aula 2
Curso Básico de Java - Aula 2PeslPinguim
 
Como Construir um Compilador cap-1
Como Construir um Compilador cap-1Como Construir um Compilador cap-1
Como Construir um Compilador cap-1Maellson Marques
 
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
 
M5-Desenvolvimento-Paginas-Web
M5-Desenvolvimento-Paginas-WebM5-Desenvolvimento-Paginas-Web
M5-Desenvolvimento-Paginas-Webdiogoa21
 
Manual-de-php
Manual-de-phpManual-de-php
Manual-de-phpdiogoa21
 
Princípios de projeto e boas práticas de programação em Java - Márcio Torres
Princípios de projeto e boas práticas de programação em Java - Márcio TorresPrincípios de projeto e boas práticas de programação em Java - Márcio Torres
Princípios de projeto e boas práticas de programação em Java - Márcio TorresTchelinux
 
10+ Coisas Que Odeio Em Php
10+ Coisas Que Odeio Em Php10+ Coisas Que Odeio Em Php
10+ Coisas Que Odeio Em PhpAlmir Mendes
 
Introdução a linguagem C# (CSharp)
Introdução a linguagem C# (CSharp)Introdução a linguagem C# (CSharp)
Introdução a linguagem C# (CSharp)Marcos Castro
 
Como Construir um compilador-cap 2
Como Construir um compilador-cap 2Como Construir um compilador-cap 2
Como Construir um compilador-cap 2Maellson Marques
 
Apostila de Introdução ao C#.net
Apostila de Introdução ao C#.netApostila de Introdução ao C#.net
Apostila de Introdução ao C#.netAndre Nascimento
 
Javascript - boas práticas
Javascript - boas práticasJavascript - boas práticas
Javascript - boas práticasFrancke Peixoto
 
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
 
Trabalho de Paradigmas Da Linguagem De Programação - Python
Trabalho de Paradigmas Da Linguagem De Programação - PythonTrabalho de Paradigmas Da Linguagem De Programação - Python
Trabalho de Paradigmas Da Linguagem De Programação - PythonJanderson Campêlo
 
14. Interfaces; Listas e cadeias ligadas; Iteradores – Fundamentos de Program...
14. Interfaces; Listas e cadeias ligadas; Iteradores – Fundamentos de Program...14. Interfaces; Listas e cadeias ligadas; Iteradores – Fundamentos de Program...
14. Interfaces; Listas e cadeias ligadas; Iteradores – Fundamentos de Program...Manuel Menezes de Sequeira
 
Javascript para CSharpers 1 - Comparando
Javascript para CSharpers   1 - ComparandoJavascript para CSharpers   1 - Comparando
Javascript para CSharpers 1 - ComparandoWesley Lemos
 
Trabalho sobre a linguagem Python
Trabalho sobre a linguagem PythonTrabalho sobre a linguagem Python
Trabalho sobre a linguagem PythonRicardo Zalla
 

Mais procurados (20)

Curso Básico de Java - Aula 2
Curso Básico de Java - Aula 2Curso Básico de Java - Aula 2
Curso Básico de Java - Aula 2
 
Como Construir um Compilador cap-1
Como Construir um Compilador cap-1Como Construir um Compilador cap-1
Como Construir um Compilador cap-1
 
Introdução ao JavaScript
Introdução ao JavaScriptIntrodução ao JavaScript
Introdução ao JavaScript
 
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#
 
M5-Desenvolvimento-Paginas-Web
M5-Desenvolvimento-Paginas-WebM5-Desenvolvimento-Paginas-Web
M5-Desenvolvimento-Paginas-Web
 
Manual-de-php
Manual-de-phpManual-de-php
Manual-de-php
 
Princípios de projeto e boas práticas de programação em Java - Márcio Torres
Princípios de projeto e boas práticas de programação em Java - Márcio TorresPrincípios de projeto e boas práticas de programação em Java - Márcio Torres
Princípios de projeto e boas práticas de programação em Java - Márcio Torres
 
1.introducao java
1.introducao java1.introducao java
1.introducao java
 
Csharp
CsharpCsharp
Csharp
 
10+ Coisas Que Odeio Em Php
10+ Coisas Que Odeio Em Php10+ Coisas Que Odeio Em Php
10+ Coisas Que Odeio Em Php
 
Introdução a linguagem C# (CSharp)
Introdução a linguagem C# (CSharp)Introdução a linguagem C# (CSharp)
Introdução a linguagem C# (CSharp)
 
SFD - C# para a comunidade
SFD - C# para a comunidadeSFD - C# para a comunidade
SFD - C# para a comunidade
 
Como Construir um compilador-cap 2
Como Construir um compilador-cap 2Como Construir um compilador-cap 2
Como Construir um compilador-cap 2
 
Apostila de Introdução ao C#.net
Apostila de Introdução ao C#.netApostila de Introdução ao C#.net
Apostila de Introdução ao C#.net
 
Javascript - boas práticas
Javascript - boas práticasJavascript - boas práticas
Javascript - boas práticas
 
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...
 
Trabalho de Paradigmas Da Linguagem De Programação - Python
Trabalho de Paradigmas Da Linguagem De Programação - PythonTrabalho de Paradigmas Da Linguagem De Programação - Python
Trabalho de Paradigmas Da Linguagem De Programação - Python
 
14. Interfaces; Listas e cadeias ligadas; Iteradores – Fundamentos de Program...
14. Interfaces; Listas e cadeias ligadas; Iteradores – Fundamentos de Program...14. Interfaces; Listas e cadeias ligadas; Iteradores – Fundamentos de Program...
14. Interfaces; Listas e cadeias ligadas; Iteradores – Fundamentos de Program...
 
Javascript para CSharpers 1 - Comparando
Javascript para CSharpers   1 - ComparandoJavascript para CSharpers   1 - Comparando
Javascript para CSharpers 1 - Comparando
 
Trabalho sobre a linguagem Python
Trabalho sobre a linguagem PythonTrabalho sobre a linguagem Python
Trabalho sobre a linguagem Python
 

Destaque (8)

ApresentaçãO Final Campus Party
ApresentaçãO Final   Campus PartyApresentaçãO Final   Campus Party
ApresentaçãO Final Campus Party
 
Transparência pública ou os dados brutos também amam
Transparência pública ou os dados brutos também amamTransparência pública ou os dados brutos também amam
Transparência pública ou os dados brutos também amam
 
Expresso nuvem-campus-party
Expresso nuvem-campus-partyExpresso nuvem-campus-party
Expresso nuvem-campus-party
 
Campus party apresentação
Campus party   apresentaçãoCampus party   apresentação
Campus party apresentação
 
Campusparty2011dl
Campusparty2011dlCampusparty2011dl
Campusparty2011dl
 
Mc1 JAVA
Mc1 JAVAMc1 JAVA
Mc1 JAVA
 
Ubuntu Desktop
Ubuntu DesktopUbuntu Desktop
Ubuntu Desktop
 
Wordpress
WordpressWordpress
Wordpress
 

Semelhante a Javascript

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 2013Giovanni Bassi
 
Linguagens Dinamicas na JVM
Linguagens Dinamicas na JVMLinguagens Dinamicas na JVM
Linguagens Dinamicas na JVMWilliam 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 2019Cassio Santos
 
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
 
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 PlatformMilfont Consulting
 
JAVA: Muito mais que uma linguagem
JAVA: Muito mais que uma linguagemJAVA: Muito mais que uma linguagem
JAVA: Muito mais que uma linguagemliverig
 
Comandos gerais do PHP
Comandos gerais do PHPComandos gerais do PHP
Comandos gerais do PHPPaulo 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 UVAThiago 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 ErlangElaine Naomi
 
Phpjedi 090307090434-phpapp01 2
Phpjedi 090307090434-phpapp01 2Phpjedi 090307090434-phpapp01 2
Phpjedi 090307090434-phpapp01 2PrinceGuru MS
 
Desenvolvimento Agil Com Doctrine Orm
Desenvolvimento Agil Com Doctrine OrmDesenvolvimento Agil Com Doctrine Orm
Desenvolvimento Agil Com Doctrine OrmGuilherme Blanco
 
Minicurso de Rails - WTISC 2014
Minicurso de Rails - WTISC 2014Minicurso de Rails - WTISC 2014
Minicurso de Rails - WTISC 2014Zarathon 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 jqueryLuan Campos
 
Java Fundamentos
Java FundamentosJava Fundamentos
Java FundamentosWilson Lima
 

Semelhante a Javascript (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
 
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
 
Ruby & Rails
Ruby & RailsRuby & Rails
Ruby & Rails
 
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 Campus Party Brasil

Desenvolvimento de aplicações para o Google App Engine
Desenvolvimento de aplicações para o Google App EngineDesenvolvimento de aplicações para o Google App Engine
Desenvolvimento de aplicações para o Google App EngineCampus Party Brasil
 
Técnicas forenses para a recuperação de arquivos
Técnicas forenses para a recuperação de arquivosTécnicas forenses para a recuperação de arquivos
Técnicas forenses para a recuperação de arquivosCampus Party Brasil
 
Como ganhar dinheiro no mundo mobile?
Como ganhar dinheiro no mundo mobile?Como ganhar dinheiro no mundo mobile?
Como ganhar dinheiro no mundo mobile?Campus Party Brasil
 
Tempestades solares: mitos e verdades
Tempestades solares: mitos e verdadesTempestades solares: mitos e verdades
Tempestades solares: mitos e verdadesCampus Party Brasil
 
A busca por planetas além do sistema solar
A busca por planetas além do sistema solarA busca por planetas além do sistema solar
A busca por planetas além do sistema solarCampus Party Brasil
 
Construção de uma luneta a baixo custo
Construção de uma luneta a baixo custoConstrução de uma luneta a baixo custo
Construção de uma luneta a baixo custoCampus Party Brasil
 
Hardware livre Arduino: eletrônica e robótica com hardware e software livres
Hardware livre Arduino: eletrônica e robótica com hardware e software livresHardware livre Arduino: eletrônica e robótica com hardware e software livres
Hardware livre Arduino: eletrônica e robótica com hardware e software livresCampus Party Brasil
 
Robótica e educação inclusiva
Robótica e educação inclusivaRobótica e educação inclusiva
Robótica e educação inclusivaCampus Party Brasil
 
Fazendo do jeito certo: criando jogos sofisticados com DirectX
Fazendo do jeito certo: criando jogos sofisticados com DirectXFazendo do jeito certo: criando jogos sofisticados com DirectX
Fazendo do jeito certo: criando jogos sofisticados com DirectXCampus Party Brasil
 
Robótica e educação inclusiva
	Robótica e educação inclusiva	Robótica e educação inclusiva
Robótica e educação inclusivaCampus Party Brasil
 
Gestão e monitoramento de redes e dispositivos com Software Livre
Gestão e monitoramento de redes e dispositivos com Software LivreGestão e monitoramento de redes e dispositivos com Software Livre
Gestão e monitoramento de redes e dispositivos com Software LivreCampus Party Brasil
 
Confecção de Circuito Impresso
Confecção de Circuito ImpressoConfecção de Circuito Impresso
Confecção de Circuito ImpressoCampus Party Brasil
 
Virtualização, cloud computig e suas tendencias
Virtualização, cloud computig e suas tendenciasVirtualização, cloud computig e suas tendencias
Virtualização, cloud computig e suas tendenciasCampus Party Brasil
 

Mais de Campus Party Brasil (20)

Buracos negros
Buracos negrosBuracos negros
Buracos negros
 
Programação para Atari 2600
Programação para Atari 2600Programação para Atari 2600
Programação para Atari 2600
 
Desenvolvimento de aplicações para o Google App Engine
Desenvolvimento de aplicações para o Google App EngineDesenvolvimento de aplicações para o Google App Engine
Desenvolvimento de aplicações para o Google App Engine
 
Técnicas forenses para a recuperação de arquivos
Técnicas forenses para a recuperação de arquivosTécnicas forenses para a recuperação de arquivos
Técnicas forenses para a recuperação de arquivos
 
Como ganhar dinheiro no mundo mobile?
Como ganhar dinheiro no mundo mobile?Como ganhar dinheiro no mundo mobile?
Como ganhar dinheiro no mundo mobile?
 
Tempestades solares: mitos e verdades
Tempestades solares: mitos e verdadesTempestades solares: mitos e verdades
Tempestades solares: mitos e verdades
 
A busca por planetas além do sistema solar
A busca por planetas além do sistema solarA busca por planetas além do sistema solar
A busca por planetas além do sistema solar
 
Passeio virtual pelo LHC
Passeio virtual pelo LHCPasseio virtual pelo LHC
Passeio virtual pelo LHC
 
Construção de uma luneta a baixo custo
Construção de uma luneta a baixo custoConstrução de uma luneta a baixo custo
Construção de uma luneta a baixo custo
 
Hardware livre Arduino: eletrônica e robótica com hardware e software livres
Hardware livre Arduino: eletrônica e robótica com hardware e software livresHardware livre Arduino: eletrônica e robótica com hardware e software livres
Hardware livre Arduino: eletrônica e robótica com hardware e software livres
 
Robótica e educação inclusiva
Robótica e educação inclusivaRobótica e educação inclusiva
Robótica e educação inclusiva
 
Fazendo do jeito certo: criando jogos sofisticados com DirectX
Fazendo do jeito certo: criando jogos sofisticados com DirectXFazendo do jeito certo: criando jogos sofisticados com DirectX
Fazendo do jeito certo: criando jogos sofisticados com DirectX
 
Blue Via
Blue ViaBlue Via
Blue Via
 
Linux para iniciantes
Linux para iniciantesLinux para iniciantes
Linux para iniciantes
 
Robótica e educação inclusiva
	Robótica e educação inclusiva	Robótica e educação inclusiva
Robótica e educação inclusiva
 
Gestão e monitoramento de redes e dispositivos com Software Livre
Gestão e monitoramento de redes e dispositivos com Software LivreGestão e monitoramento de redes e dispositivos com Software Livre
Gestão e monitoramento de redes e dispositivos com Software Livre
 
Confecção de Circuito Impresso
Confecção de Circuito ImpressoConfecção de Circuito Impresso
Confecção de Circuito Impresso
 
Vida de Programador
Vida de Programador Vida de Programador
Vida de Programador
 
Virtualização, cloud computig e suas tendencias
Virtualização, cloud computig e suas tendenciasVirtualização, cloud computig e suas tendencias
Virtualização, cloud computig e suas tendencias
 
Desafio Robótica Livre
Desafio Robótica LivreDesafio Robótica Livre
Desafio Robótica Livre
 

Javascript

  • 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