Javascript: A linguagem do futuro Ramon Felipe de Oliveira Analista de Sistema Softplan SCJA  -  SCJP  -  SCWCD
Agenda História Linguagens Scripting X Não Scripting Javascript Patterns Testes ECMAScript 5
No começo...  assembly   Baixo Nível 1 linha código = 1 instrução de máquina Detalhes de máquina
Depois...  Linguagens de maior nível Abstraem detalhes de máquina Forte tipagem  Fortan, Algol e depois C, C++, java
Depois...  Um pouco menos eficientes 1 linha código = 5 instrução de máquina 1000 X 5000
Um pouco depois...  Scripting Fraca tipagem Interpretada 1 linha código = 20 instrução de máquina
Forte tipagem é bom?  Tipos ajudam a gerenciar complexidade Permite otimização pela dimuição de verificação runtime Importante com estruturas e algoritmos complexos
Scripting  Maior flexibilidade Maior velocidade de desenvolvimento Um pouco mais lentas
Cada macaco no seu ganho SPL Criacão de componentes Scripting  União de componentes
Scriptings em ascensão? Aumento da importância de GUI Aumento da aplicabilidade Internet Linguagens scripting melhores
Caixa de Skinner Skinner “ O problema com falsos padrões”
Comparativo desenvolvimento
 
Origens Javascript surgiu em 1995 e  quando lançado se chamava LiveScript Brendan Eich Brendan Eich
Características Pequena Interpretada (compilada) Sofisticada Linguagem cliente Baixa tipagem Objetos são “containers” Herança por protótipos
Objeto em JS
Sintaxe Literal var obj = {  nome: “Fusca",  detalhes: {    cor: “vermelho",   ano: 1988 } }
Functions
Functions
Função add function add(x, y) {  var total = x + y;  return total;  }
Função add var add = function(x, y) {  var total = x + y;  return total;  }
 
function add() {    var soma = 0;    for (var i = 0, j = arguments.length; i < j; i++) {   soma += arguments[i];  }  return soma;  }
Herança por Protótipo
Herança por Protótipo
Problema
function criarPessoa(nome, sobrenome) { return { nome: nome, sobrenome: sobrenome } } function nomeCompleto(pessoa) {  return pessoa.nome + ‘ ‘ + pessoa.sobrenome;  }  function nomeCompletoInvertido(pessoa) {  return pessoa.sobrenome + ', ' + pessoa.nome;  }  Solução 1
> p = criarPessoa(“João&quot;, “Silva&quot;);  > nomeCompleto(p)  João Silva > nomeCompletoInvertido(p)  Silva, João Apesar de funcionar, não é uma  solução interessante . Provavelmente, logo existirá dezenas de funções no global namespace.
function criarPessoa(nome, sobrenome) { return { nome: nome,   sobrenome : sobrenome, nomeCompleto: function() {     return this.nome + ‘ ‘ + this.sobrenome; }, nomeCompletoInvertido: function() { return this.sobrenome + ', ' + this.nome; } } } Solução 2
> s = criarPessoa(“João&quot;, “Silva&quot;) > s. nomeCompleto()  João Silva   > s. nomeCompletoInvertido()  Silva, João
Solução 3 function Pessoa(nome, sobrenome) { this.nome = nome; this.sobrenome = sobrenome; } Pessoa.prototype.nomeCompleto = function() { return this.nome+ ' ' + this.sobrenome; } Pessoa.prototype.nomeCompletoInverso = function() { return this.sobrenome + ', ' + this.nome; }
Prototype
Closures function realizaSoma(a) {    return function(b) {  return a + b;    } } x =  realizaSoma(5 );  y =  realizaSoma(20 );  x(6) ? y(7) ?
Patterns Old school Revealing Pattern Custom Objects Module Pattern Lazy Function Definition
Revealing Pattern Ver Exemplo
TDD e javascript JsUnit, um framework para teste de unidade  JsUnit é um open source framework, inspirado no jUnit e escrito inteiramente em javascript JsMock, um Mock Object Library para JavaScript JSMock é um Mock Object library para JavaScript que fornece ferramentas necessárias para efetivos testes interativos.
ECMAScript 5 Strict Mode Extensibilidade de objetos configuráveis Suporte JSON Principais browsers vão dar suporte integral
Perguntas?
`  Obrigado!
Referências http://docs.jquery.com http://www.json.org/ http://developer.yahoo.com/yui/theater/ https :// developer .mozilla.org/ en / javascript   http://javascript.crockford.com/ High Performance Web Sites :: Browser Performance  Wishlist Best Practices for Speeding Up Your Web Site http://blog.dynatrace.com/2009/11/09/101-on-jquery-selector-performance/ http://www.artzstudio.com/2009/04/jquery-performance-rules/ http://www.tcl.tk/doc/scripting.html

Tdc2010 web

  • 1.
    Javascript: A linguagemdo futuro Ramon Felipe de Oliveira Analista de Sistema Softplan SCJA - SCJP - SCWCD
  • 2.
    Agenda História LinguagensScripting X Não Scripting Javascript Patterns Testes ECMAScript 5
  • 3.
    No começo... assembly Baixo Nível 1 linha código = 1 instrução de máquina Detalhes de máquina
  • 4.
    Depois... Linguagensde maior nível Abstraem detalhes de máquina Forte tipagem Fortan, Algol e depois C, C++, java
  • 5.
    Depois... Umpouco menos eficientes 1 linha código = 5 instrução de máquina 1000 X 5000
  • 6.
    Um pouco depois... Scripting Fraca tipagem Interpretada 1 linha código = 20 instrução de máquina
  • 7.
    Forte tipagem ébom? Tipos ajudam a gerenciar complexidade Permite otimização pela dimuição de verificação runtime Importante com estruturas e algoritmos complexos
  • 8.
    Scripting Maiorflexibilidade Maior velocidade de desenvolvimento Um pouco mais lentas
  • 9.
    Cada macaco noseu ganho SPL Criacão de componentes Scripting União de componentes
  • 10.
    Scriptings em ascensão?Aumento da importância de GUI Aumento da aplicabilidade Internet Linguagens scripting melhores
  • 11.
    Caixa de SkinnerSkinner “ O problema com falsos padrões”
  • 12.
  • 13.
  • 14.
    Origens Javascript surgiuem 1995 e quando lançado se chamava LiveScript Brendan Eich Brendan Eich
  • 15.
    Características Pequena Interpretada(compilada) Sofisticada Linguagem cliente Baixa tipagem Objetos são “containers” Herança por protótipos
  • 16.
  • 17.
    Sintaxe Literal varobj = { nome: “Fusca&quot;, detalhes: { cor: “vermelho&quot;, ano: 1988 } }
  • 18.
  • 19.
  • 20.
    Função add functionadd(x, y) { var total = x + y; return total; }
  • 21.
    Função add varadd = function(x, y) { var total = x + y; return total; }
  • 22.
  • 23.
    function add() { var soma = 0; for (var i = 0, j = arguments.length; i < j; i++) { soma += arguments[i]; } return soma; }
  • 24.
  • 25.
  • 26.
  • 27.
    function criarPessoa(nome, sobrenome){ return { nome: nome, sobrenome: sobrenome } } function nomeCompleto(pessoa) { return pessoa.nome + ‘ ‘ + pessoa.sobrenome; } function nomeCompletoInvertido(pessoa) { return pessoa.sobrenome + ', ' + pessoa.nome; } Solução 1
  • 28.
    > p =criarPessoa(“João&quot;, “Silva&quot;); > nomeCompleto(p) João Silva > nomeCompletoInvertido(p) Silva, João Apesar de funcionar, não é uma solução interessante . Provavelmente, logo existirá dezenas de funções no global namespace.
  • 29.
    function criarPessoa(nome, sobrenome){ return { nome: nome, sobrenome : sobrenome, nomeCompleto: function() { return this.nome + ‘ ‘ + this.sobrenome; }, nomeCompletoInvertido: function() { return this.sobrenome + ', ' + this.nome; } } } Solução 2
  • 30.
    > s =criarPessoa(“João&quot;, “Silva&quot;) > s. nomeCompleto() João Silva > s. nomeCompletoInvertido() Silva, João
  • 31.
    Solução 3 functionPessoa(nome, sobrenome) { this.nome = nome; this.sobrenome = sobrenome; } Pessoa.prototype.nomeCompleto = function() { return this.nome+ ' ' + this.sobrenome; } Pessoa.prototype.nomeCompletoInverso = function() { return this.sobrenome + ', ' + this.nome; }
  • 32.
  • 33.
    Closures function realizaSoma(a){ return function(b) { return a + b; } } x = realizaSoma(5 ); y = realizaSoma(20 ); x(6) ? y(7) ?
  • 34.
    Patterns Old schoolRevealing Pattern Custom Objects Module Pattern Lazy Function Definition
  • 35.
  • 36.
    TDD e javascriptJsUnit, um framework para teste de unidade JsUnit é um open source framework, inspirado no jUnit e escrito inteiramente em javascript JsMock, um Mock Object Library para JavaScript JSMock é um Mock Object library para JavaScript que fornece ferramentas necessárias para efetivos testes interativos.
  • 37.
    ECMAScript 5 StrictMode Extensibilidade de objetos configuráveis Suporte JSON Principais browsers vão dar suporte integral
  • 38.
  • 39.
  • 40.
    Referências http://docs.jquery.com http://www.json.org/http://developer.yahoo.com/yui/theater/ https :// developer .mozilla.org/ en / javascript http://javascript.crockford.com/ High Performance Web Sites :: Browser Performance Wishlist Best Practices for Speeding Up Your Web Site http://blog.dynatrace.com/2009/11/09/101-on-jquery-selector-performance/ http://www.artzstudio.com/2009/04/jquery-performance-rules/ http://www.tcl.tk/doc/scripting.html

Notas do Editor

  • #4 Assembler é uma línguagem de baixo nível, aonde o programador é obrigado a lidar com detalhes de máquina. Cada linha programada geralmente corresponde a uma linha de máquina register allocation and procedure calling sequences
  • #5 Lidar com detalhes de máquina deixava a programação mais complexa e lenta. Sugiram linguagens que abstraiam este problema do programador. Estas linguagens geralmente tinham forte tipagem, e delas derivaram linguagens tais como C, C++ e java
  • #6 Estas linguagens são um pouco mais lenta quando comparada a linguagem Assembler, mas ofereciam um velocidade de desenvolvimento melhor. Cada linha de çódigo fonte geralmente geravam cinco linhas de máquinas. Geralmente cada programador programa uma mesma quantidade de linhas de código, independente da linguagem. Então para cada linha de máquina programada em Assembler, uma linguagem de alto nível geraria 5 linhas.
  • #7 Um pouco depois do surgimento de linguagem para programar sistemas, surge a linguagens scripting. Eles geralmente tinha fraca tipagem, eram interpretadas
  • #8 Tipos ajudam a gerenciar complexidade, possuem um melhor desempenho pela ausência de necessidade de verificação runtime e lidam melhor com estruturas e algoritimos complexos.
  • #9 Linguagem de scripting possuem maior flexibilidade, menor complexidade e maior velocidade de desenvolvimento. São perfeitas para unir dois componentes. Porém, são um pouco mais lentas…
  • #11 faster machines, better scripting languages, the increasing importance of graphical user interfaces and component architectures, and the growth of the Internet, have greatly increased the applicability of scripting languages GUIs now account for half or more of the total effort in many programming projects. GUIs are fundamentally gluing applications: the goal is not to create new functionality, but to make connections between a collection of graphical controls and the internal functions of the application. I am not aware of any rapid-development environments for GUIs based on a system programming language.
  • #15 Para o usuário, javascript já ajudava muito ao evitar chamadas desnecessários ao servidor, numa época de conexões discadas