SlideShare uma empresa Scribd logo

Código limpo e eficiente com JavaScript

Palestra de 9/11/2011 do DotNetFloripa

1 de 58
Baixar para ler offline
Rodrigo Vieira
DotNetFloripa – 9/11/2011
                                 @rodbv
                                             1
Wednesday, November 09,
2011                      2
   Um pouco de história
   Tipos de dados
   Funções
   Escopo, closures
   Objetos
   Encapsulamento
   Dicas e erros comuns
Mocha!
           LiveScript!




Brendan Eich       Scheme




                            4
    Linguagem dinâmica, fracamente tipada, funcional
     e OO

    Objetos e arrays são dicionários “melhorados”

    Não precisa ser compilada, em geral roda dentro de
     um “host”

    Variáveis globais amarram diferentes componentes

    Herança por prototipação
Wednesday, November 09,
2011                                                      5
 Java + script

 DOM

 AJAX , XmlHttpRequest

 jQuery
Wednesday, November 09,
2011                      6

Recomendados

Curso java 04 - ap is e bibliotecas
Curso java   04 - ap is e bibliotecasCurso java   04 - ap is e bibliotecas
Curso java 04 - ap is e bibliotecasMaurício Linhares
 
Programação funcional tipada: uma introdução
Programação funcional tipada: uma introduçãoProgramação funcional tipada: uma introdução
Programação funcional tipada: uma introduçãoArthur Xavier
 
Programação funcional em JavaScript: como e por quê?
Programação funcional em JavaScript: como e por quê?Programação funcional em JavaScript: como e por quê?
Programação funcional em JavaScript: como e por quê?Arthur Xavier
 
9. Operação toString(); Classes, instâncias e objectos; Scanner – Fundamentos...
9. Operação toString(); Classes, instâncias e objectos; Scanner – Fundamentos...9. Operação toString(); Classes, instâncias e objectos; Scanner – Fundamentos...
9. Operação toString(); Classes, instâncias e objectos; Scanner – Fundamentos...Manuel Menezes de Sequeira
 
Refatoração de código com Capitão Nascimento versão completa
Refatoração de código com Capitão Nascimento versão completaRefatoração de código com Capitão Nascimento versão completa
Refatoração de código com Capitão Nascimento versão completaEduardo Bregaida
 

Mais conteúdo relacionado

Mais procurados

J1Brasil: Persistência de Dados além do JPA, ou Como usar noSQL em Java
J1Brasil: Persistência de Dados além do JPA, ou Como usar noSQL em JavaJ1Brasil: Persistência de Dados além do JPA, ou Como usar noSQL em Java
J1Brasil: Persistência de Dados além do JPA, ou Como usar noSQL em JavaAlexandre Porcelli
 
Orientação a Objetos em Python
Orientação a Objetos em PythonOrientação a Objetos em Python
Orientação a Objetos em PythonLuciano Ramalho
 
11. Enumerações; Instrução switch; Limitações dos inteiros – Fundamentos de P...
11. Enumerações; Instrução switch; Limitações dos inteiros – Fundamentos de P...11. Enumerações; Instrução switch; Limitações dos inteiros – Fundamentos de P...
11. Enumerações; Instrução switch; Limitações dos inteiros – Fundamentos de P...Manuel Menezes de Sequeira
 
Python: a primeira mordida
Python: a primeira mordidaPython: a primeira mordida
Python: a primeira mordidaLuciano 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
 
Curso java 06 - mais construtores, interfaces e polimorfismo
Curso java   06 - mais construtores, interfaces e polimorfismoCurso java   06 - mais construtores, interfaces e polimorfismo
Curso java 06 - mais construtores, interfaces e polimorfismoMaurício Linhares
 
Objetos Pythonicos - compacto
Objetos Pythonicos - compactoObjetos Pythonicos - compacto
Objetos Pythonicos - compactoLuciano Ramalho
 
Semana 9: toString, classes, instâncias e objectos, Scanner
Semana  9: toString, classes, instâncias e objectos, ScannerSemana  9: toString, classes, instâncias e objectos, Scanner
Semana 9: toString, classes, instâncias e objectos, ScannerManuel Menezes de Sequeira
 
Introdução Programação Funcional
Introdução Programação FuncionalIntrodução Programação Funcional
Introdução Programação FuncionalNatan Mai
 
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
 
Atualização Java 8 (2014)
Atualização Java 8 (2014)Atualização Java 8 (2014)
Atualização Java 8 (2014)Helder da Rocha
 
Cheat sheet - String Java (Referência rápida)
Cheat sheet - String Java (Referência rápida)Cheat sheet - String Java (Referência rápida)
Cheat sheet - String Java (Referência rápida)Rafael Liberato
 
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
 
Curso de Java: Introdução a lambda e Streams
Curso de Java: Introdução a lambda e StreamsCurso de Java: Introdução a lambda e Streams
Curso de Java: Introdução a lambda e StreamsHelder da Rocha
 
10. Encapsulação; Cópia de instâncias; Igualdade de instâncias – Fundamentos ...
10. Encapsulação; Cópia de instâncias; Igualdade de instâncias – Fundamentos ...10. Encapsulação; Cópia de instâncias; Igualdade de instâncias – Fundamentos ...
10. Encapsulação; Cópia de instâncias; Igualdade de instâncias – Fundamentos ...Manuel Menezes de Sequeira
 
Semana 4: Atribuições especiais, matrizes, ciclos, classes pacote
Semana  4: Atribuições especiais, matrizes, ciclos, classes pacoteSemana  4: Atribuições especiais, matrizes, ciclos, classes pacote
Semana 4: Atribuições especiais, matrizes, ciclos, classes pacoteManuel Menezes de Sequeira
 

Mais procurados (20)

J1Brasil: Persistência de Dados além do JPA, ou Como usar noSQL em Java
J1Brasil: Persistência de Dados além do JPA, ou Como usar noSQL em JavaJ1Brasil: Persistência de Dados além do JPA, ou Como usar noSQL em Java
J1Brasil: Persistência de Dados além do JPA, ou Como usar noSQL em Java
 
Orientação a Objetos em Python
Orientação a Objetos em PythonOrientação a Objetos em Python
Orientação a Objetos em Python
 
11. Enumerações; Instrução switch; Limitações dos inteiros – Fundamentos de P...
11. Enumerações; Instrução switch; Limitações dos inteiros – Fundamentos de P...11. Enumerações; Instrução switch; Limitações dos inteiros – Fundamentos de P...
11. Enumerações; Instrução switch; Limitações dos inteiros – Fundamentos de P...
 
Python: a primeira mordida
Python: a primeira mordidaPython: a primeira mordida
Python: a primeira mordida
 
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)
 
Curso java 06 - mais construtores, interfaces e polimorfismo
Curso java   06 - mais construtores, interfaces e polimorfismoCurso java   06 - mais construtores, interfaces e polimorfismo
Curso java 06 - mais construtores, interfaces e polimorfismo
 
Objetos Pythonicos - compacto
Objetos Pythonicos - compactoObjetos Pythonicos - compacto
Objetos Pythonicos - compacto
 
App scala
App scalaApp scala
App scala
 
Semana 9: toString, classes, instâncias e objectos, Scanner
Semana  9: toString, classes, instâncias e objectos, ScannerSemana  9: toString, classes, instâncias e objectos, Scanner
Semana 9: toString, classes, instâncias e objectos, Scanner
 
Java Script
Java ScriptJava Script
Java Script
 
Introdução Programação Funcional
Introdução Programação FuncionalIntrodução Programação Funcional
Introdução Programação Funcional
 
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)
 
Atualização Java 8 (2014)
Atualização Java 8 (2014)Atualização Java 8 (2014)
Atualização Java 8 (2014)
 
Cheat sheet - String Java (Referência rápida)
Cheat sheet - String Java (Referência rápida)Cheat sheet - String Java (Referência rápida)
Cheat sheet - String Java (Referência rápida)
 
Migrando pra Scala
Migrando pra ScalaMigrando pra Scala
Migrando pra Scala
 
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)
 
Curso de Java: Introdução a lambda e Streams
Curso de Java: Introdução a lambda e StreamsCurso de Java: Introdução a lambda e Streams
Curso de Java: Introdução a lambda e Streams
 
10. Encapsulação; Cópia de instâncias; Igualdade de instâncias – Fundamentos ...
10. Encapsulação; Cópia de instâncias; Igualdade de instâncias – Fundamentos ...10. Encapsulação; Cópia de instâncias; Igualdade de instâncias – Fundamentos ...
10. Encapsulação; Cópia de instâncias; Igualdade de instâncias – Fundamentos ...
 
Semana 4: Atribuições especiais, matrizes, ciclos, classes pacote
Semana  4: Atribuições especiais, matrizes, ciclos, classes pacoteSemana  4: Atribuições especiais, matrizes, ciclos, classes pacote
Semana 4: Atribuições especiais, matrizes, ciclos, classes pacote
 
Java para iniciantes
Java para iniciantesJava para iniciantes
Java para iniciantes
 

Semelhante a Código limpo e eficiente com JavaScript

Javascript não é Java+Script (TDC Floripa 2012)
Javascript não é Java+Script (TDC Floripa 2012)Javascript não é Java+Script (TDC Floripa 2012)
Javascript não é Java+Script (TDC Floripa 2012)Rodrigo Vieira
 
Functional programming for Old Object Oriented Developers
Functional programming for Old Object Oriented Developers Functional programming for Old Object Oriented Developers
Functional programming for Old Object Oriented Developers Alan Prando
 
Fugindo para as colinas com Python - Julio Biason - Tchelinux Bento Gonçalves...
Fugindo para as colinas com Python - Julio Biason - Tchelinux Bento Gonçalves...Fugindo para as colinas com Python - Julio Biason - Tchelinux Bento Gonçalves...
Fugindo para as colinas com Python - Julio Biason - Tchelinux Bento Gonçalves...Tchelinux
 
javascript_funcional.pdf
javascript_funcional.pdfjavascript_funcional.pdf
javascript_funcional.pdfronaldo ramos
 
Refatoração e Boas Práticas no Desenvolvimento de Software com a Linguagem Ja...
Refatoração e Boas Práticas no Desenvolvimento de Software com a Linguagem Ja...Refatoração e Boas Práticas no Desenvolvimento de Software com a Linguagem Ja...
Refatoração e Boas Práticas no Desenvolvimento de Software com a Linguagem Ja...Tchelinux
 

Semelhante a Código limpo e eficiente com JavaScript (9)

Javascript não é Java+Script (TDC Floripa 2012)
Javascript não é Java+Script (TDC Floripa 2012)Javascript não é Java+Script (TDC Floripa 2012)
Javascript não é Java+Script (TDC Floripa 2012)
 
JavaScript - A Linguagem
JavaScript - A LinguagemJavaScript - A Linguagem
JavaScript - A Linguagem
 
Javascript
Javascript Javascript
Javascript
 
Canivete shell
Canivete shellCanivete shell
Canivete shell
 
Functional programming for Old Object Oriented Developers
Functional programming for Old Object Oriented Developers Functional programming for Old Object Oriented Developers
Functional programming for Old Object Oriented Developers
 
Fugindo para as colinas com Python - Julio Biason - Tchelinux Bento Gonçalves...
Fugindo para as colinas com Python - Julio Biason - Tchelinux Bento Gonçalves...Fugindo para as colinas com Python - Julio Biason - Tchelinux Bento Gonçalves...
Fugindo para as colinas com Python - Julio Biason - Tchelinux Bento Gonçalves...
 
javascript_funcional.pdf
javascript_funcional.pdfjavascript_funcional.pdf
javascript_funcional.pdf
 
PHP 5.3 - What's new?
PHP 5.3 - What's new?PHP 5.3 - What's new?
PHP 5.3 - What's new?
 
Refatoração e Boas Práticas no Desenvolvimento de Software com a Linguagem Ja...
Refatoração e Boas Práticas no Desenvolvimento de Software com a Linguagem Ja...Refatoração e Boas Práticas no Desenvolvimento de Software com a Linguagem Ja...
Refatoração e Boas Práticas no Desenvolvimento de Software com a Linguagem Ja...
 

Mais de Rodrigo Vieira

When will it be done? (Lean Agile Forecasting)
When will it be done? (Lean Agile Forecasting)When will it be done? (Lean Agile Forecasting)
When will it be done? (Lean Agile Forecasting)Rodrigo Vieira
 
Kanban Method July 2018
Kanban Method July 2018Kanban Method July 2018
Kanban Method July 2018Rodrigo Vieira
 
Output > Input: MVP não precisa de tela de cadastro
Output > Input: MVP não precisa de tela de cadastroOutput > Input: MVP não precisa de tela de cadastro
Output > Input: MVP não precisa de tela de cadastroRodrigo Vieira
 
Menos reunião e mais post-it: Kanban na prática
Menos reunião e mais post-it: Kanban na práticaMenos reunião e mais post-it: Kanban na prática
Menos reunião e mais post-it: Kanban na práticaRodrigo Vieira
 
Curtir uma ideia não basta: aprenda por que o usuário não quer o seu produto
Curtir uma ideia não basta: aprenda por que o usuário não quer o seu produtoCurtir uma ideia não basta: aprenda por que o usuário não quer o seu produto
Curtir uma ideia não basta: aprenda por que o usuário não quer o seu produtoRodrigo Vieira
 
Tutorial Kanban - Python brasil 2016
Tutorial Kanban  - Python brasil 2016Tutorial Kanban  - Python brasil 2016
Tutorial Kanban - Python brasil 2016Rodrigo Vieira
 
Workshop Kanban - julho 2016
Workshop  Kanban - julho 2016Workshop  Kanban - julho 2016
Workshop Kanban - julho 2016Rodrigo Vieira
 
Palestra TDC 2016: 3 Lições que Aprendi em Data Science
Palestra TDC 2016: 3 Lições que Aprendi em Data SciencePalestra TDC 2016: 3 Lições que Aprendi em Data Science
Palestra TDC 2016: 3 Lições que Aprendi em Data ScienceRodrigo Vieira
 
1o Agile Floripa - Fishbowl: Interação UX e PO, quem dá as cartas?
1o Agile Floripa - Fishbowl: Interação UX e PO, quem dá as cartas?1o Agile Floripa - Fishbowl: Interação UX e PO, quem dá as cartas?
1o Agile Floripa - Fishbowl: Interação UX e PO, quem dá as cartas?Rodrigo Vieira
 
De dev para data scientist 3 coisas que aprendi
De dev para data scientist  3 coisas que aprendiDe dev para data scientist  3 coisas que aprendi
De dev para data scientist 3 coisas que aprendiRodrigo Vieira
 
Coding dojo 22_05_2013
Coding dojo 22_05_2013Coding dojo 22_05_2013
Coding dojo 22_05_2013Rodrigo Vieira
 

Mais de Rodrigo Vieira (12)

When will it be done? (Lean Agile Forecasting)
When will it be done? (Lean Agile Forecasting)When will it be done? (Lean Agile Forecasting)
When will it be done? (Lean Agile Forecasting)
 
Kanban Method July 2018
Kanban Method July 2018Kanban Method July 2018
Kanban Method July 2018
 
Output > Input: MVP não precisa de tela de cadastro
Output > Input: MVP não precisa de tela de cadastroOutput > Input: MVP não precisa de tela de cadastro
Output > Input: MVP não precisa de tela de cadastro
 
Menos reunião e mais post-it: Kanban na prática
Menos reunião e mais post-it: Kanban na práticaMenos reunião e mais post-it: Kanban na prática
Menos reunião e mais post-it: Kanban na prática
 
Curtir uma ideia não basta: aprenda por que o usuário não quer o seu produto
Curtir uma ideia não basta: aprenda por que o usuário não quer o seu produtoCurtir uma ideia não basta: aprenda por que o usuário não quer o seu produto
Curtir uma ideia não basta: aprenda por que o usuário não quer o seu produto
 
Tutorial Kanban - Python brasil 2016
Tutorial Kanban  - Python brasil 2016Tutorial Kanban  - Python brasil 2016
Tutorial Kanban - Python brasil 2016
 
Workshop Kanban - julho 2016
Workshop  Kanban - julho 2016Workshop  Kanban - julho 2016
Workshop Kanban - julho 2016
 
Palestra TDC 2016: 3 Lições que Aprendi em Data Science
Palestra TDC 2016: 3 Lições que Aprendi em Data SciencePalestra TDC 2016: 3 Lições que Aprendi em Data Science
Palestra TDC 2016: 3 Lições que Aprendi em Data Science
 
1o Agile Floripa - Fishbowl: Interação UX e PO, quem dá as cartas?
1o Agile Floripa - Fishbowl: Interação UX e PO, quem dá as cartas?1o Agile Floripa - Fishbowl: Interação UX e PO, quem dá as cartas?
1o Agile Floripa - Fishbowl: Interação UX e PO, quem dá as cartas?
 
De dev para data scientist 3 coisas que aprendi
De dev para data scientist  3 coisas que aprendiDe dev para data scientist  3 coisas que aprendi
De dev para data scientist 3 coisas que aprendi
 
Coding dojo 22_05_2013
Coding dojo 22_05_2013Coding dojo 22_05_2013
Coding dojo 22_05_2013
 
1º coding kata
1º coding kata1º coding kata
1º coding kata
 

Último

ATIVIDADE 1 - ADSIS - FUNDAMENTOS E ARQUITETURA DE COMPUTADORES - 512024.docx
ATIVIDADE 1 - ADSIS - FUNDAMENTOS E ARQUITETURA DE COMPUTADORES - 512024.docxATIVIDADE 1 - ADSIS - FUNDAMENTOS E ARQUITETURA DE COMPUTADORES - 512024.docx
ATIVIDADE 1 - ADSIS - FUNDAMENTOS E ARQUITETURA DE COMPUTADORES - 512024.docxjosecarlos413721
 
MAPA - ADSIS - FUNDAMENTOS E ARQUITETURA DE COMPUTADORES - 512024.docx
MAPA - ADSIS - FUNDAMENTOS E ARQUITETURA DE COMPUTADORES - 512024.docxMAPA - ADSIS - FUNDAMENTOS E ARQUITETURA DE COMPUTADORES - 512024.docx
MAPA - ADSIS - FUNDAMENTOS E ARQUITETURA DE COMPUTADORES - 512024.docxjosecarlos413721
 
ATIVIDADE 1 - CCONT - PERÍCIA, ARBITRAGEM E ATUÁRIA - 512024.docx
ATIVIDADE 1 - CCONT - PERÍCIA, ARBITRAGEM E ATUÁRIA - 512024.docxATIVIDADE 1 - CCONT - PERÍCIA, ARBITRAGEM E ATUÁRIA - 512024.docx
ATIVIDADE 1 - CCONT - PERÍCIA, ARBITRAGEM E ATUÁRIA - 512024.docx2m Assessoria
 
MAPA - INTRODUÇÃO À ENGENHARIA - 51-2024.docx
MAPA - INTRODUÇÃO À ENGENHARIA - 51-2024.docxMAPA - INTRODUÇÃO À ENGENHARIA - 51-2024.docx
MAPA - INTRODUÇÃO À ENGENHARIA - 51-2024.docxjosecarlos413721
 
ATIVIDADE 1 - CCONT - ADMINISTRAÇÃO FINANCEIRA E ORÇAMENTÁRIA - 512024.docx
ATIVIDADE 1 - CCONT - ADMINISTRAÇÃO FINANCEIRA E ORÇAMENTÁRIA - 512024.docxATIVIDADE 1 - CCONT - ADMINISTRAÇÃO FINANCEIRA E ORÇAMENTÁRIA - 512024.docx
ATIVIDADE 1 - CCONT - ADMINISTRAÇÃO FINANCEIRA E ORÇAMENTÁRIA - 512024.docx2m Assessoria
 
MAPA - DESENHO TÉCNICO - 51-2024.docx
MAPA   -   DESENHO TÉCNICO - 51-2024.docxMAPA   -   DESENHO TÉCNICO - 51-2024.docx
MAPA - DESENHO TÉCNICO - 51-2024.docx2m Assessoria
 
Aula 01 - Desenvolvimento web - A internet.pptx
Aula 01 - Desenvolvimento web - A internet.pptxAula 01 - Desenvolvimento web - A internet.pptx
Aula 01 - Desenvolvimento web - A internet.pptxHugoHoch2
 
Apresentação bichinhos da TI: o que é esse arquiteto de software
Apresentação bichinhos da TI: o que é esse arquiteto de softwareApresentação bichinhos da TI: o que é esse arquiteto de software
Apresentação bichinhos da TI: o que é esse arquiteto de softwareAleatório .
 
ATIVIDADE 1 - ADSIS - FUNDAMENTOS E ARQUITETURA DE COMPUTADORES - 512024.docx
ATIVIDADE 1 - ADSIS - FUNDAMENTOS E ARQUITETURA DE COMPUTADORES  - 512024.docxATIVIDADE 1 - ADSIS - FUNDAMENTOS E ARQUITETURA DE COMPUTADORES  - 512024.docx
ATIVIDADE 1 - ADSIS - FUNDAMENTOS E ARQUITETURA DE COMPUTADORES - 512024.docx2m Assessoria
 
Uniagil - LACP - Lean Agile Coach Professional 2024.pdf
Uniagil - LACP - Lean Agile Coach Professional 2024.pdfUniagil - LACP - Lean Agile Coach Professional 2024.pdf
Uniagil - LACP - Lean Agile Coach Professional 2024.pdfPatriciaAraujo658854
 
MAPA -INTRODUÇÃO À ENGENHARIA - 512024.docx
MAPA -INTRODUÇÃO À ENGENHARIA  - 512024.docxMAPA -INTRODUÇÃO À ENGENHARIA  - 512024.docx
MAPA -INTRODUÇÃO À ENGENHARIA - 512024.docx2m Assessoria
 
ATIVIDADE 1- TEORIAS DA ADMINISTRAÇÃO - 512024.docx
ATIVIDADE 1- TEORIAS DA ADMINISTRAÇÃO - 512024.docxATIVIDADE 1- TEORIAS DA ADMINISTRAÇÃO - 512024.docx
ATIVIDADE 1- TEORIAS DA ADMINISTRAÇÃO - 512024.docx2m Assessoria
 
ATIVIDADE 1 - RH - TEORIAS DA ADMINISTRAÇÃO - 51-2024.docx
ATIVIDADE 1 - RH - TEORIAS DA ADMINISTRAÇÃO - 51-2024.docxATIVIDADE 1 - RH - TEORIAS DA ADMINISTRAÇÃO - 51-2024.docx
ATIVIDADE 1 - RH - TEORIAS DA ADMINISTRAÇÃO - 51-2024.docxjosecarlos413721
 

Último (13)

ATIVIDADE 1 - ADSIS - FUNDAMENTOS E ARQUITETURA DE COMPUTADORES - 512024.docx
ATIVIDADE 1 - ADSIS - FUNDAMENTOS E ARQUITETURA DE COMPUTADORES - 512024.docxATIVIDADE 1 - ADSIS - FUNDAMENTOS E ARQUITETURA DE COMPUTADORES - 512024.docx
ATIVIDADE 1 - ADSIS - FUNDAMENTOS E ARQUITETURA DE COMPUTADORES - 512024.docx
 
MAPA - ADSIS - FUNDAMENTOS E ARQUITETURA DE COMPUTADORES - 512024.docx
MAPA - ADSIS - FUNDAMENTOS E ARQUITETURA DE COMPUTADORES - 512024.docxMAPA - ADSIS - FUNDAMENTOS E ARQUITETURA DE COMPUTADORES - 512024.docx
MAPA - ADSIS - FUNDAMENTOS E ARQUITETURA DE COMPUTADORES - 512024.docx
 
ATIVIDADE 1 - CCONT - PERÍCIA, ARBITRAGEM E ATUÁRIA - 512024.docx
ATIVIDADE 1 - CCONT - PERÍCIA, ARBITRAGEM E ATUÁRIA - 512024.docxATIVIDADE 1 - CCONT - PERÍCIA, ARBITRAGEM E ATUÁRIA - 512024.docx
ATIVIDADE 1 - CCONT - PERÍCIA, ARBITRAGEM E ATUÁRIA - 512024.docx
 
MAPA - INTRODUÇÃO À ENGENHARIA - 51-2024.docx
MAPA - INTRODUÇÃO À ENGENHARIA - 51-2024.docxMAPA - INTRODUÇÃO À ENGENHARIA - 51-2024.docx
MAPA - INTRODUÇÃO À ENGENHARIA - 51-2024.docx
 
ATIVIDADE 1 - CCONT - ADMINISTRAÇÃO FINANCEIRA E ORÇAMENTÁRIA - 512024.docx
ATIVIDADE 1 - CCONT - ADMINISTRAÇÃO FINANCEIRA E ORÇAMENTÁRIA - 512024.docxATIVIDADE 1 - CCONT - ADMINISTRAÇÃO FINANCEIRA E ORÇAMENTÁRIA - 512024.docx
ATIVIDADE 1 - CCONT - ADMINISTRAÇÃO FINANCEIRA E ORÇAMENTÁRIA - 512024.docx
 
MAPA - DESENHO TÉCNICO - 51-2024.docx
MAPA   -   DESENHO TÉCNICO - 51-2024.docxMAPA   -   DESENHO TÉCNICO - 51-2024.docx
MAPA - DESENHO TÉCNICO - 51-2024.docx
 
Aula 01 - Desenvolvimento web - A internet.pptx
Aula 01 - Desenvolvimento web - A internet.pptxAula 01 - Desenvolvimento web - A internet.pptx
Aula 01 - Desenvolvimento web - A internet.pptx
 
Apresentação bichinhos da TI: o que é esse arquiteto de software
Apresentação bichinhos da TI: o que é esse arquiteto de softwareApresentação bichinhos da TI: o que é esse arquiteto de software
Apresentação bichinhos da TI: o que é esse arquiteto de software
 
ATIVIDADE 1 - ADSIS - FUNDAMENTOS E ARQUITETURA DE COMPUTADORES - 512024.docx
ATIVIDADE 1 - ADSIS - FUNDAMENTOS E ARQUITETURA DE COMPUTADORES  - 512024.docxATIVIDADE 1 - ADSIS - FUNDAMENTOS E ARQUITETURA DE COMPUTADORES  - 512024.docx
ATIVIDADE 1 - ADSIS - FUNDAMENTOS E ARQUITETURA DE COMPUTADORES - 512024.docx
 
Uniagil - LACP - Lean Agile Coach Professional 2024.pdf
Uniagil - LACP - Lean Agile Coach Professional 2024.pdfUniagil - LACP - Lean Agile Coach Professional 2024.pdf
Uniagil - LACP - Lean Agile Coach Professional 2024.pdf
 
MAPA -INTRODUÇÃO À ENGENHARIA - 512024.docx
MAPA -INTRODUÇÃO À ENGENHARIA  - 512024.docxMAPA -INTRODUÇÃO À ENGENHARIA  - 512024.docx
MAPA -INTRODUÇÃO À ENGENHARIA - 512024.docx
 
ATIVIDADE 1- TEORIAS DA ADMINISTRAÇÃO - 512024.docx
ATIVIDADE 1- TEORIAS DA ADMINISTRAÇÃO - 512024.docxATIVIDADE 1- TEORIAS DA ADMINISTRAÇÃO - 512024.docx
ATIVIDADE 1- TEORIAS DA ADMINISTRAÇÃO - 512024.docx
 
ATIVIDADE 1 - RH - TEORIAS DA ADMINISTRAÇÃO - 51-2024.docx
ATIVIDADE 1 - RH - TEORIAS DA ADMINISTRAÇÃO - 51-2024.docxATIVIDADE 1 - RH - TEORIAS DA ADMINISTRAÇÃO - 51-2024.docx
ATIVIDADE 1 - RH - TEORIAS DA ADMINISTRAÇÃO - 51-2024.docx
 

Código limpo e eficiente com JavaScript

  • 1. Rodrigo Vieira DotNetFloripa – 9/11/2011 @rodbv 1
  • 3. Um pouco de história  Tipos de dados  Funções  Escopo, closures  Objetos  Encapsulamento  Dicas e erros comuns
  • 4. Mocha! LiveScript! Brendan Eich Scheme 4
  • 5. Linguagem dinâmica, fracamente tipada, funcional e OO  Objetos e arrays são dicionários “melhorados”  Não precisa ser compilada, em geral roda dentro de um “host”  Variáveis globais amarram diferentes componentes  Herança por prototipação Wednesday, November 09, 2011 5
  • 6.  Java + script  DOM  AJAX , XmlHttpRequest  jQuery Wednesday, November 09, 2011 6
  • 7. Valor  String, Number, Boolean, null, undefined  Referência  Objetos  Funções  Arrays  RegEx  Date  Math Wednesday, November 09, 2011 7
  • 8. Sequência de caracteres unicode  Strings com mesmo valor são consideradas idênticas  Não existe tipo char  Podemos usar aspas simples e duplas  Possui métodos Wednesday, November 09, 2011 8
  • 9. Ponto flutuante de 64 bits  Não existe tipo inteiro  NaN  Infinity  Hexa (0xa12)  Notação científica (1.23e-8)  Octal: primeiro dígito zero, cuidado!  parseInt(‚08‛) //0  parseInt(‚08‛, 10) //8 Wednesday, November 09, 2011 9
  • 10. null: objeto nulo, atribuído explicitamente  undefined: valor padrão para variáveis, parâmetros e atributos sem valor atribuído Wednesday, November 09, 2011 10
  • 11. true  false Wednesday, November 09, 2011 11
  • 12. Os seguintes valores são avaliados como false quando fazem partes de expressões booleanas (falsy):  0  ‚‛  null  undefined  NaN  Todo o resto é avaliado como true (truthy)  inclusive as strings ‛false‛ e ‛0‛! Wednesday, November 09, 2011 12
  • 13. d = new Date(); //data atual  d = new Date (88500); //ms desde 1.1.1970  d = new Date(2011, 10, 9); Wednesday, November 09, 2011 13
  • 14. Não são arrays de verdade, mas um dicionário com chaves numéricas  Não dá erro de limite  var a = new Array(); //oldskool  var a = [];  var a = [1, ‚a‛, obj]; //inline  a.push(‚floripa‛);  a.length; //4 Wednesday, November 09, 2011 14
  • 16. var r = new RegExp(‚w{1,3}d{2}‛, ‚gim‛);  var r = /w{1,3}d{2}/gim;  r.test(‚ab12‛); //true  ‚abc12xyz‛.replace(/w{1,3}/gim, ‚‛); //12xyz Wednesday, November 09, 2011 16
  • 17. O coração de programação decente em JS  Cidadãs de primeira classe  Uma função pode ser: ▪ Variável ▪ Parâmetro ▪ Propriedade de objeto ▪ Anônima ▪ Retorno de outra função ▪ Interna a outra função Wednesday, November 09, 2011 17
  • 18. Declaração comum function fala(texto) { alert(‚Fala,‛ + texto + ‚!‛); } fala(‚amigo‛); //Fala,amigo! Wednesday, November 09, 2011 18
  • 19. Variável com função anônima var fala = function(texto) { alert(‚Fala,‛ + texto + ‚!‛); }; fala(‚amigo‛); //Fala,amigo! Wednesday, November 09, 2011 19
  • 20. function geraSoma (x) { return function(num) { return x + num; } } var soma5 = geraSoma(5); soma5(3); //8 Wednesday, November 09, 2011 20
  • 21. function geraSoma (x) { return function(num) { return x + num; } } Closure var soma5 = geraSoma(5); soma5(3); //8 Wednesday, November 09, 2011 21
  • 22. function executa(func) { func(); } function dizOi() { alert(‚oi!‛); } executa(dizOi); //oi! Wednesday, November 09, 2011 22
  • 23. executa(function() { alert(‘oi’);}); //oi! Wednesday, November 09, 2011 23
  • 24. function soma(x,y) { return x + y; } soma(2,3); //5 soma(2,‛5‛) //‛25‛ Wednesday, November 09, 2011 24
  • 25. function soma(x,y) { return x + y; } soma(2,3,5,‛hello‛); //5 soma(2); //NaN Wednesday, November 09, 2011 25
  • 26. Coleção de argumentos passado para a função function soma() { var total=0; for (var i=0; i<arguments.length; i++) { total += arguments[i]; } return total; } soma(1,2,3,4,5); //15 Wednesday, November 09, 2011 26
  • 27. JavaScript possui apenas 2 blocos de escopo  Global  Função  Variável declarada dentro de função, com “var”, é local  Função declarada dentro de função é local  Variáveis declaradas dentro de blocos if, while, for etc não são locais ao bloco, e sim à função. Wednesday, November 09, 2011 27
  • 28. Esse código é feio, mas é válido function calculaMedia(x,y){ soma = fazSoma(); return soma/2; function fazSoma() { return x + y; } var soma; } Wednesday, November 09, 2011 28
  • 29. function calculaMedia(x,y){ soma = x + y; return soma/2; Variável global } calculaMedia(2,3); //5 alert(soma); //5 Wednesday, November 09, 2011 29
  • 30. Um dicionário enfeitado Wednesday, November 09, 2011 30
  • 31. Clássica var ator = new Object(); ator.nome = ‚Jim‛; ator.sobrenome = ‚Parsons‛;  Simplificada var ator = {}; ator.nome = ‚Jim‛; ator.sobrenome = ‚Parsons‛;  Inline var ator = { nome: ‚Jim‛, sobrenome: ‚Parsons‛ }; Wednesday, November 09, 2011 31
  • 32. var ator = { nome: ‚Jim‛, sobrenome: ‚Parsons‛, nomeCompleto: function() { return this.nome + ‚ ‛ + this.sobrenome; } }; ator.nomeCompleto(); //Jim Parsons Wednesday, November 09, 2011 32
  • 33. function Ator(nome, sobrenome){ this.nome = nome; this.sobrenome = sobrenome; this.nomeCompleto = function() { return this.nome + ‚ ‛ + this.sobrenome; }; } var jim = new Ator(‚Jim‛, ‚Parsons‛); jim.nomeCompleto(); //Jim Parsons  Convenciona-se usar inicial maiúscula Wednesday, November 09, 2011 33
  • 34. function Ator(nome, sobrenome){ var ator = {} ; ator.sobrenome = sobrenome; ator.nomeCompleto = function() { return ator.nome + ‚ ‛ + ator.sobrenome; }; return ator; } var jim = new Ator(‚Jim‛, ‚Parsons‛); jim.nomeCompleto(); //Jim Parsons Wednesday, November 09, 2011 34
  • 35. carro.marca = ‚Citroen‛; carro[‚placa‛] = ‚MHJ8832‛;  A segunda forma aceita palavras reservadas, símbolos etc carro[‚#‛] = ‚dummy‛; carro[‚for‛] = ‚yammy‛; Wednesday, November 09, 2011 35
  • 36. Permitem executar uma função especificando qual objeto será o “this” Wednesday, November 09, 2011 36
  • 37. function setStyle(color, border){ this.style.backgroundColor = color; this.style.borderColor = border; } var botao1 = document.getElementById(‚botao1‛); var botao2 = document.getElementById(‚botao2‛); setColors.call(botao1, ‚red‛, ‚blue‛); setColors.call(botao2, ‚blue‛, ‚green‛); “this” Wednesday, November 09, 2011 37
  • 38. function setStyle(color, border){ this.style.backgroundColor = color; this.style.borderColor = border; } var botao1 = document.getElementById(‚botao1‛); var botao2 = document.getElementById(‚botao2‛); setColors.apply(botao1, [‚red‛, ‚blue‛]); setColors.apply(botao2, arguments); “this” Wednesday, November 09, 2011 38
  • 39. Como funções são objetos, elas podem ter atributos – isso evita variáveis globais Wednesday, November 09, 2011 39
  • 40. function executaUmaVez() { if (executaUmaVez.jaExecutou) { return; } //executa a funcao alert(‘oeeee’); executaUmaVez.jaExecutou = true; } executaUmaVez(); //oeeee executaUmaVez(); //Não executa Wednesday, November 09, 2011 40
  • 41. function ehPrimo(x) { if (!ehPrimo.cache) { ehPrimo.cache = {}; } if (!ehPrimo.cache[x]) { ehPrimo.cache[x] = … //calcula a parada } return ehPrimo.cache[x]; } Wednesday, November 09, 2011 41
  • 42. function ehPrimo(x) { if (!ehPrimo.cache) { ehPrimo.cache = {}; } if (!ehPrimo.cache[x]) { ehPrimo.cache[x] = … //calcula a parada } return ehPrimo.cache[x]; }  Quiz: por que eu usei um objeto e não um array no memo? Wednesday, November 09, 2011 42
  • 43. Usando método construtor function MeuModulo(p1,p2) { //privado var x = p1, y = p2; function funcaoPrivada() { //… } //público this.valor1 = x + y; this.funcaoPublica = function() { return funcaoPrivada(x,y); }; } var m = new MeuModulo(1,2); alert(m.valor1); //3 Wednesday, November 09, 2011 43
  • 44. Usando função function meuModulo(p1,p2) { //privado var x = p1, y = p2; function fazAlgumaCoisa() { //… } //público return { valor1: x + y, funcaoPublica: function() { return fazAlgumaCoisa(x,y); } }; } var m = meuModulo(1,2); alert(m.valor1); //3 Wednesday, November 09, 2011 44
  • 45. Declare todas variáveis e funções no topo da função (já que o escopo é esse mesmo…) function minhaFuncao() { var x = 1, z = ‚a‛; function() { … } //resto do código } Wednesday, November 09, 2011 45
  • 46. function soma(x,y) { return x + y; } soma(2,3); //undefined Wednesday, November 09, 2011 46
  • 47. Ponto-e-vírgula é opcional, mas o js coloca pra você na hora de rodar function soma(x,y) { return; x + y; } soma(2,3); //undefined Wednesday, November 09, 2011 47
  • 48. Pra quebrar linha, use “pontuação” function soma(x,y) { return x + y; } soma(2,3); //5 Wednesday, November 09, 2011 48
  • 49. Caso você queira usar uma variável global, use MAIÚSCULAS (assim todos sabem que foi por querer)  E, melhor ainda, crie “namespaces” para suas variáveis e funções globais var DOTNETFLORIPA = {}; DOTNETFLORIPA.usuario = ‚rodbv‛; DOTNETFLORIPA.quebraTudo = function() {…}; Wednesday, November 09, 2011 49
  • 50. Executando código descartável (function() { /* todas variáveis e funções declaradas aqui têm acesso ao escopo global, mas sairão de escopo quando a função terminar de ser executada */ })(); Wednesday, November 09, 2011 50
  • 51. Use === e !== 1 == ‚1‛ //true 1 === ‚1‛ //false 0 == false //true 0 === false //false ‚‛ == 0 //true ‚‛ === 0 //false 1 != true //false 1!== true //true Wednesday, November 09, 2011 51
  • 52. Lembre-se do “var” no for loop function minhaFuncao() { for (i = 0; i < 10; i++){ //… } } alert(i) //10; Wednesday, November 09, 2011 52
  • 53. Cuidado com o seguinte padrão function minhaFuncao() { var a = b = 10; } minhaFuncao(); alert(a); //undefined, beleza alert(b); //10 ?!? Wednesday, November 09, 2011 53
  • 54. Cuidado com o seguinte padrão function minhaFuncao() { var a = b = 10; } minhaFuncao(); alert(a); //undefined, beleza alert(b); //10 ?!? Wednesday, November 09, 2011 54
  • 55. Evite eval setTimeout(‚alert(‘ola’);‛, 10); setTimeout(function() { alert(‘ola’);}, 10); var p = eval(‚ator.‛ + propr); var p = ator[propr]; Wednesday, November 09, 2011 55
  • 56. Coloque o seu javascript sempre no fundo da página  Minifique e combine os arquivos  <script type="text/javascript" src="http://yui.yahooapis.com/combo?2.9.0/build/utilities/util ities.js&2.9.0/build/datasource/datasource- min.js&2.9.0/build/autocomplete/autocomplete-min.js&2.9.0/build/calendar/calendar- min.js&2.9.0/build/tabview/tabview-min.js"></script> Wednesday, November 09, 2011 56
  • 57. Douglas Crockford é o cara http://javascript.crockford.com/ Wednesday, November 09, 2011 57