tdc 2011 goiânia: evolução da linguagem de programação javascript

Post on 26-Jan-2015

1.456 Views

Category:

Documents

5 Downloads

Preview:

Click to see full reader

DESCRIPTION

 

TRANSCRIPT

Rogério Moraes de Carvalho VITA Informática @rogeriomc rogeriomc.wordpress.com

Agenda Presente e futuro da linguagem JavaScript

A linguagem JavaScript

A linguagem ECMAScript

Usos mais comuns da JavaScript

Conceitos iniciais da JavaScript

Orientação a objetos em JavaScript

Novidades da ECMAScript 5

Browsers mais usados

Suporte à ECMAScript 5

Considerações finais

Agenda Presente e futuro da linguagem JavaScript

A linguagem JavaScript

A linguagem ECMAScript

Usos mais comuns da JavaScript

Conceitos iniciais da JavaScript

Orientação a objetos em JavaScript

Novidades da ECMAScript 5

Browsers mais usados

Suporte à ECMAScript 5

Considerações finais

O que é JavaScript? A linguagem

Linguagem de scripting Baseada em protótipos

Dinâmica

Com tipagem fraca

Funções como primeira classe

Linguagem de múltiplos paradigmas Orientada a objetos

Imperativa

Funcional

Não confundir com Java

Influências da JavaScript Inspiração na criação

Base dos princípios chaves da arquitetura Linguagem Self

Linguagem Scheme

Base da sintaxe Linguagem C

Nomes e convenções de nomenclatura Linguagem Java

História da JavaScript Criação e evolução inicial da linguagem

LiveScript (Set 1995)

JavaScript (Dez 1995)

JScript (Aug 1996)

Por Brendan Eich da Netscape

Netscape Navigator 2.0 Beta

Renomeada para JavaScript

Netscape Navigator 2.0B3 (final)

Implementação da Microsoft

Internet Explorer 3.0

Padronização (Nov 1996)

A Netscape submeteu a JavaScript

para a Ecma International (padrão)

ECMAScript (Jun 1997)

1a edição do padrão ECMA-262

da linguagem ECMAScript

Agenda Presente e futuro da linguagem JavaScript

A linguagem JavaScript

A linguagem ECMAScript

Usos mais comuns da JavaScript

Conceitos iniciais da JavaScript

Orientação a objetos em JavaScript

Novidades da ECMAScript 5

Browsers mais usados

Suporte à ECMAScript 5

Considerações finais

História da ECMAScript Evolução da especificação ECMA-232

Edição 1 (Jun 1997)

Edição 2 (Jun 1998)

Edição 3 (Dez 1999)

Liberação da 1a edição

Alinhamento com o padrão

ISO/IEC 16262

Expressões regulares, novas instruções

de controle, try/catch, ...

Edição 4 (Abandonada)

Abandonada devido à complexidade

Base da 5a edição e do Harmony

Edição 5 (Dez 2009)

Strict mode, getters e setters,

suporte a JSON, ...

Edição 5.1 (Jun 2011)

Alinhamento com o padrão

ISO/IEC 16262:2011

Harmony Trabalho em andamento

Agenda Presente e futuro da linguagem JavaScript

A linguagem JavaScript

A linguagem ECMAScript

Usos mais comuns da JavaScript

Conceitos iniciais da JavaScript

Orientação a objetos em JavaScript

Novidades da ECMAScript 5

Browsers mais usados

Suporte à ECMAScript 5

Considerações finais

Usos da JavaScript Alguns casos de uso da linguagem

Scripts do lado do cliente Implementada em Web Browsers

Permite acesso programático a objetos no browser

jQuery – Biblioteca JavaScript

CoffeeScript compila em JavaScript

Node.js – Orientado a eventos E/S JavaScript do lado do servidor

Windows 8 Metro Style HTML5/CSS3/JavaScript

Agenda Presente e futuro da linguagem JavaScript

A linguagem JavaScript

A linguagem ECMAScript

Usos mais comuns da JavaScript

Conceitos iniciais da JavaScript

Orientação a objetos em JavaScript

Novidades da ECMAScript 5

Browsers mais usados

Suporte à ECMAScript 5

Considerações finais

Objetos e propriedades No contexto da linguagem ECMAScript

JavaScript é baseada em objetos

Objetos Coleções de propriedades

Do tipo pré-definido: Object

Propriedades São contêineres para outros objetos,

valores primitivos ou funções

Valores primitivos e funções No contexto da linguagem ECMAScript

Valores primitivos Um dos seguintes tipos pré-definidos:

Undefined Null Boolean Number String

Função Objeto que pode ser chamado Método

Função associada com um objeto via uma propriedade

Objetos pré-definidos No contexto da linguagem ECMAScript

Coleção de objetos pré-definidos

Objeto global Object

Function

Array

String

Boolean

Number

Math

Date

RegExp

JSON

Objetos de erro Error

EvalError

RangeError

ReferenceError

SyntaxError

TypeError

URIError

Operadores No contexto da linguagem ECMAScript

Operadores pré-definidos

Unários ++ –– + – ~ ! delete void typeof

Multiplicativos * / %

Aditivos + –

Bitwise << >> >>> & ^ |

Condicional ? :

Atribuição = *= /= %= += –= <<= >>= >>>= &= ^= |=

Igualdade < > <= >= instanceof in

Relacionais == != === !==

Lógicos && ||

Vírgula ,

Instruções condicionais No contexto da linguagem ECMAScript

Instrução if if (expressão) instrução else instrução

if (expressão) instrução

Instrução switch switch (expressão) {

[case expressão : Instruçõesopcionais] [case expressão : Instruçõesopcionais] ... [default : Instruçõesopcionais] }

Instruções de iteração No contexto da linguagem ECMAScript

Instrução for for (expressãoopcional; expressãoopcional;

expressãoopcional) instrução

for (var listaDeclaraçãoVariável; expressãoopcional; expressãoopcional) instrução

Instrução for...in for (expressãoLadoEsquerdo in

expressão) instrução

for (var declaraçãoVariável in expressão) instrução

Instruções de iteração No contexto da linguagem ECMAScript

Instrução do...while do instrução while (expressão)

Instrução while while (expressão) instrução

Instrução continue continue;

continue identificador;

Instrução break break;

break identificador;

Tratamento de erro No contexto da linguagem ECMAScript

Instrução try try { instruções }

catch (identificador) { instruçõesopcionais }

try { instruções } finally { instruçõesopcionais }

try { instruções } catch (identificador) { instruçõesopcionais } finally { instruçõesopcionais }

Instrução throw throw expressão;

Outras instruções No contexto da linguagem ECMAScript

Instrução with with (expressão) instrução

Uma instrução with no modo estrito (ES5) é tratado como SyntaxError

Instrução return return;

return expressão;

Instrução rotulada Identificador : instrução

Instrução debugger debugger;

Funções No contexto da linguagem ECMAScript

Funções em JavaScript São construções de primeira classe na

linguagem JavaScript

São objetos que podem ser chamados Podem ter propriedades associadas

Sintaxe Função com identificador

function identificador (ListaParamsopcional) { CorpoDaFunção }

Função anônima function (ListaParamopcional)

{ CorpoDaFunção }

Retorno e herança nas funções No contexto da linguagem ECMAScript

Algumas características das funções Podem retornar valores

Sem a instrução return ou com return sem expressão retornam undefined

Herança baseada em protótipos Funções herdam de Function.prototype

Que por sua vez herdam de Object.prototype

Chamada de funções No contexto da linguagem ECMAScript

Modos de chamar uma função Diretamente por meio de parênteses

Indiretamente pelos seguintes métodos herdados de Function.prototype call(argThis[, arg1[, arg2, ...]])

apply(argThis, argArray)

Na chamada não há checagem do número de argumentos Não há sobrecarga em JavaScript

Parâmetros não fornecidos terão valor undefined

Funções

Agenda Presente e futuro da linguagem JavaScript

A linguagem JavaScript

A linguagem ECMAScript

Usos mais comuns da JavaScript

Conceitos iniciais da JavaScript

Orientação a objetos em JavaScript

Novidades da ECMAScript 5

Browsers mais usados

Suporte à ECMAScript 5

Considerações finais

Objetos No contexto da linguagem ECMAScript

JavaScript não usa classes Diferente de C++, C#, Java e Smalltalk

Objetos podem ser criados via: Notação literal

Construtor

Objetos são passados por referência Eles nunca são copiados

Literais de objetos Conceito em JavaScript

var objetoVazio = {}; var contato = { nome: "Maria", "e-mail": "maria@xyz.com.br" }; var voo = { companhia: "TAM", codigo: "JJ3702", partida: { dataHorario: "2011-09-29 09:17", cidade: "Brasília", uf: "DF" }, chegada: { dataHorario: "2011-09-29 10:47", cidade: "São Paulo", uf: "SP" } };

Objeto vazio

Objeto simples

Objeto aninhado

Propriedades No contexto da linguagem ECMAScript

Leitura de propriedades objeto.propriedade

objeto[“propriedade”]

Atualização de propriedades Via atribuição

Se já existir, então será atualizada

Se não existir, então será adicionada

Exclusão de propriedades delete objeto.propriedade

Enumeração for...in

Objetos e propriedades

Herança baseada em protótipo No contexto da linguagem ECMAScript

Em uma linguagem POO baseada em classes Estado é transportado por instâncias

Métodos são transportados por classes

Herança é de estrutura e comportamento

Em JavaScript Estado e métodos são transportados por

objetos (instâncias)

Herança é de estrutura, comportamento e estado

Herança baseada em protótipo No contexto da linguagem ECMAScript

JavaScript não usa classes Diferente de C++, C#, Java e Smalltalk

Objetos podem ser criados via: Notação literal

Construtor

Cada construtor é uma função Que contém uma propriedade nomeada

prototype Usada para implementar herança

baseada em protótipo e propriedades compartilhadas

Herança baseada em protótipo No contexto da linguagem ECMAScript

Cada objeto é vinculado um objeto protótipo Do qual ele pode herdar propriedades

Método hasOwnProperty(str) Verifica se um objeto possui uma

propriedade particular

O método não verifica na cadeia de protótipos

Reflexão Operador typeof

Objeto global No contexto da linguagem ECMAScript

O único objeto global é criado antes do controle entrar em qualquer contexto de execução

Em browsers Em HTML, o Document Object Model define

o objeto global como sendo o objeto window

Herança baseada em protótipo

Agenda Presente e futuro da linguagem JavaScript

A linguagem JavaScript

A linguagem ECMAScript

Usos mais comuns da JavaScript

Conceitos iniciais da JavaScript

Orientação a objetos em JavaScript

Novidades da ECMAScript 5

Browsers mais usados

Suporte à ECMAScript 5

Considerações finais

ECMAScript 5 Novidades

Melhor controle sobre propriedades Controle do acesso a propriedades

Getter (controle sobre a leitura)

Setter (controle sobre a escrita)

Controle de atributos de propriedades Descritores de propriedades

Programação mais robusta Objetos a prova de adulteração

Modo estrito (“strict mode”)

ECMAScript 5 Novidades

Novas APIs Novos métodos para Arrays

JSON (JavaScript Object Notation)

Function.prototype.bind

Prevenindo a extensibilidade Novidades da ECMAScript 5

Object.preventExtensions(obj) Previne futuros acréscimos de propriedades

num objeto

Object.isExtensible(obj) Determina a extensibilidade atual de um

objeto

Novo tipo de propriedade Novidades da ECMAScript 5

Novo tipo de propriedade Propriedade de acesso nomeada

Associa um nome com duas funções de acesso (get/set) e um conjunto de atributos booleanos

Mantidos os tipos da ECMAScript 3 Propriedade de dados nomeada

Associa um nome com um valor e um conjunto de atributos booleanos

Propriedade interna Não tem nome e não é diretamente

acessível pelos operadores da linguagem ECMAScript

Descritores de propriedade Novidades da ECMAScript 5

Descritores value

Valor da propriedade

writable (booleana) Se permite a modificação do valor da

propriedade

configurable (booleana) Se permite a exclusão da propriedade ou a

modificação de seus descritores

enumerable (booleana) Se permite que a propriedade apareça numa

enumeração de propriedades

Definição de uma propriedade Novidades da ECMAScript 5

Object.defineProperty(obj, prop, desc) Este método permite a definição de uma

nova propriedade num objeto

obj Objeto

prop Propriedade do objeto a ser criada

desc Descritores da nova propriedade

get/set em propriedades Novidades da ECMAScript 5

Object.defineProperty( obj, prop, { get: function(){ … }, set: function(valor) { … } }); Este método permite a definição de uma

nova propriedade com get/set

obj Objeto

prop Propriedade do objeto a ser criada

Criação de objetos Novidades da ECMAScript 5

Object.create ( objPrototipo [, desc]) Este método permite a definição de uma

nova propriedade com get/set

objPrototipo Objeto protótipo

desc Descritores da nova propriedade

Modo estrito Permite escrever código JavaScript mais restritivo

(function () {

"use strict";

// Função em modo estrito

var idade;

Idade = 5; // Erro!

arguments.caller; // Erro!

arguments.callee; // Erro!

var obj = { x: 5 };

Object.freeze(obj);

obj.x = 7; // Lança um erro

}());

Novidades da ECMAScript 5

Agenda Presente e futuro da linguagem JavaScript

A linguagem JavaScript

A linguagem ECMAScript

Usos mais comuns da JavaScript

Conceitos iniciais da JavaScript

Orientação a objetos em JavaScript

Novidades da ECMAScript 5

Browsers mais usados

Suporte à ECMAScript 5

Considerações finais

5 browsers mais usados Estatística da StatCounter – Mundo

41.89%

27.49%

23.16%

5.19%

1.67%

5 browsers mais usados Estatística da StatCounter – Brasil

43.05%

24.26%

31.35%

0.78%

0.40%

Agenda Presente e futuro da linguagem JavaScript

A linguagem JavaScript

A linguagem ECMAScript

Usos mais comuns da JavaScript

Conceitos iniciais da JavaScript

Orientação a objetos em JavaScript

Novidades da ECMAScript 5

Browsers mais usados

Suporte à ECMAScript 5

Considerações finais

Suporte à ECMAScript 5 Existência de suporte no Internet Explorer

Novidade da ECMAScript 5 IE 8 IE 9 IE 10 PP2

Object.create Não Sim Sim

Object.defineProperty Sim [1] Sim Sim

Object.defineProperties Não Sim Sim

Object.getPropertyOf Não Sim Sim

Object.keys Não Sim Sim

Object.seal Não Sim Sim

Object.freeze Não Sim Sim

Object.preventExtensions Não Sim Sim

Object.isSealed Não Sim Sim

Object.isFrozen Não Sim Sim

Object.isExtensible Não Sim Sim

Object.getOwnPropertyDescriptor Sim Sim Sim

Object.getOwnPropertyNames Não Sim Sim

Date.prototype.toISOString Não Sim Sim

Date.now Não Sim Sim

Array.isArray Não Sim Sim

JSON Sim Sim Sim

Suporte à ECMAScript 5 Existência de suporte no Internet Explorer

Novidade da ECMAScript 5 IE 8 IE 9 IE 10 PP2

Function.prototype.bind Não Sim Sim

String.prototype.trim Não Sim Sim

Array.prototype.indexOf Não Sim Sim

Array.prototype.lastIndexOf Não Sim Sim

Array.prototype.every Não Sim Sim

Array.prototype.some Não Sim Sim

Array.prototype.forEach Não Sim Sim

Array.prototype.map Não Sim Sim

Array.prototype.filter Não Sim Sim

Array.prototype.reduce Não Sim Sim

Array.prototype.reduceRight Não Sim Sim

Getter na inicialização de propriedade Não Sim Sim

Setter na inicialização de propriedade Não Sim Sim

Acesso a propriedades em Strings [1] Sim Sim Sim

Palavras reservadas em nomes de

propriedades [2] Não Sim Sim

Modo estrito (Strict mode) [3] Não Não Sim [4]

Suporte à ECMAScript 5 Existência de suporte no Mozilla Firefox

Recurso da ECMAScript 5 FF 3.5, 3.6 FF 4-6

Object.create Não Sim

Object.defineProperty Não Sim

Object.defineProperties Não Sim

Object.getPropertyOf Sim Sim

Object.keys Não Sim

Object.seal Não Sim

Object.freeze Não Sim

Object.preventExtensions Não Sim

Object.isSealed Não Sim

Object.isFrozen Não Sim

Object.isExtensible Não Sim

Object.getOwnPropertyDescriptor Não Sim

Object.getOwnPropertyNames Não Sim

Date.prototype.toISOString Sim Sim

Date.now Sim Sim

Array.isArray Não Sim

JSON Sim Sim

Suporte à ECMAScript 5 Existência de suporte no Mozilla Firefox

Recurso da ECMAScript 5 FF 3.5, 3.6 FF 4-6

Function.prototype.bind Não Sim

String.prototype.trim Sim Sim

Array.prototype.indexOf Sim Sim

Array.prototype.lastIndexOf Sim Sim

Array.prototype.every Sim Sim

Array.prototype.some Sim Sim

Array.prototype.forEach Sim Sim

Array.prototype.map Sim Sim

Array.prototype.filter Sim Sim

Array.prototype.reduce Sim Sim

Array.prototype.reduceRight Sim Sim

Getter na inicialização de propriedade Sim Sim

Setter na inicialização de propriedade Sim Sim

Acesso a propriedades em Strings [1] Sim Sim

Palavras reservadas em nomes de

propriedades [2] Sim Sim

Modo estrito (Strict mode) [3] Não Sim

Suporte à ECMAScript 5 Existência de suporte no Google Chrome

Recurso da ECMAScript 5 CH 7-12 CH 13, 14

Object.create Sim Sim

Object.defineProperty Sim Sim

Object.defineProperties Sim Sim

Object.getPropertyOf Sim Sim

Object.keys Sim Sim

Object.seal Sim Sim

Object.freeze Sim Sim

Object.preventExtensions Sim Sim

Object.isSealed Sim Sim

Object.isFrozen Sim Sim

Object.isExtensible Sim Sim

Object.getOwnPropertyDescriptor Sim Sim

Object.getOwnPropertyNames Sim Sim

Date.prototype.toISOString Sim Sim

Date.now Sim Sim

Array.isArray Sim Sim

JSON Sim Sim

Suporte à ECMAScript 5 Existência de suporte no Google Chrome

Recurso da ECMAScript 5 CH 7-12 CH 13, 14

Function.prototype.bind Sim Sim

String.prototype.trim Sim Sim

Array.prototype.indexOf Sim Sim

Array.prototype.lastIndexOf Sim Sim

Array.prototype.every Sim Sim

Array.prototype.some Sim Sim

Array.prototype.forEach Sim Sim

Array.prototype.map Sim Sim

Array.prototype.filter Sim Sim

Array.prototype.reduce Sim Sim

Array.prototype.reduceRight Sim Sim

Getter na inicialização de propriedade Sim Sim

Setter na inicialização de propriedade Sim Sim

Acesso a propriedades em Strings [1] Sim Sim

Palavras reservadas em nomes de

propriedades [2] Sim Sim

Modo estrito (Strict mode) [3] Não Sim

Suporte à ECMAScript 5 Existência de suporte no Apple Safari

Novidade da ECMAScript 5 SF 4 SF 5 SF 5.1

Object.create Não Sim Sim

Object.defineProperty Não Sim Sim

Object.defineProperties Não Sim Sim

Object.getPropertyOf Não Sim Sim

Object.keys Não Sim Sim

Object.seal Não Não Sim

Object.freeze Não Não Sim

Object.preventExtensions Não Não Sim

Object.isSealed Não Não Sim

Object.isFrozen Não Não Sim

Object.isExtensible Não Não Sim

Object.getOwnPropertyDescriptor Não Sim Sim

Object.getOwnPropertyNames Não Sim Sim

Date.prototype.toISOString Sim Sim Sim

Date.now Sim Sim Sim

Array.isArray Não Sim Sim

JSON Sim Sim Sim

Suporte à ECMAScript 5 Existência de suporte no Apple Safari

Novidade da ECMAScript 5 SF 4 SF 5 SF 5.1

Function.prototype.bind Não Não Não

String.prototype.trim Não Sim Sim

Array.prototype.indexOf Sim Sim Sim

Array.prototype.lastIndexOf Sim Sim Sim

Array.prototype.every Sim Sim Sim

Array.prototype.some Sim Sim Sim

Array.prototype.forEach Sim Sim Sim

Array.prototype.map Sim Sim Sim

Array.prototype.filter Sim Sim Sim

Array.prototype.reduce Sim Sim Sim

Array.prototype.reduceRight Sim Sim Sim

Getter na inicialização de propriedade Sim Sim Sim

Setter na inicialização de propriedade Sim Sim Sim

Acesso a propriedades em Strings [1] Sim Sim Sim

Palavras reservadas em nomes de

propriedades [2] Não Sim Sim

Modo estrito (Strict mode) [3] Não Sim Sim

Suporte à ECMAScript 5 Existência de suporte no WebKit

Recurso da ECMAScript 5 WebKit

Function.prototype.bind Não

String.prototype.trim Sim

Array.prototype.indexOf Sim

Array.prototype.lastIndexOf Sim

Array.prototype.every Sim

Array.prototype.some Sim

Array.prototype.forEach Sim

Array.prototype.map Sim

Array.prototype.filter Sim

Array.prototype.reduce Sim

Array.prototype.reduceRight Sim

Getter na inicialização de propriedade Sim

Setter na inicialização de propriedade Sim

Acesso a propriedades em Strings [1] Sim

Palavras reservadas em nomes de

propriedades [2] Sim

Modo estrito (Strict mode) [3] Sim

Suporte à ECMAScript 5 Existência de suporte no WebKit

Recurso da ECMAScript 5 WebKit

Object.create Sim

Object.defineProperty Sim

Object.defineProperties Sim

Object.getPropertyOf Sim

Object.keys Sim

Object.seal Sim

Object.freeze Sim

Object.preventExtensions Sim

Object.isSealed Sim

Object.isFrozen Sim

Object.isExtensible Sim

Object.getOwnPropertyDescriptor Sim

Object.getOwnPropertyNames Sim

Date.prototype.toISOString Sim

Date.now Sim

Array.isArray Sim

JSON Sim

Suporte à ECMAScript 5 Existência de suporte no Opera

Recurso da ECMAScript 5 OP 10.50 – 11.50 OP 12 Beta

Object.create Não Sim

Object.defineProperty Não Sim

Object.defineProperties Não Sim

Object.getPropertyOf Não Sim

Object.keys Não Sim

Object.seal Não Sim

Object.freeze Não Sim

Object.preventExtensions Não Sim

Object.isSealed Não Sim

Object.isFrozen Não Sim

Object.isExtensible Não Sim

Object.getOwnPropertyDescriptor Não Sim

Object.getOwnPropertyNames Não Sim

Date.prototype.toISOString Sim Sim

Date.now Sim Sim

Array.isArray Sim Sim

JSON Sim Sim

Suporte à ECMAScript 5 Existência de suporte no Opera

Recurso da ECMAScript 5 OP 10.50-11.50 OP 12

Function.prototype.bind Não Sim

String.prototype.trim Sim Sim

Array.prototype.indexOf Sim Sim

Array.prototype.lastIndexOf Sim Sim

Array.prototype.every Sim Sim

Array.prototype.some Sim Sim

Array.prototype.forEach Sim Sim

Array.prototype.map Sim Sim

Array.prototype.filter Sim Sim

Array.prototype.reduce Sim Sim

Array.prototype.reduceRight Sim Sim

Getter na inicialização de propriedade Sim Sim

Setter na inicialização de propriedade Sim Sim

Acesso a propriedades em Strings [1] Sim Sim

Palavras reservadas em nomes de

propriedades [2] Não Sim

Modo estrito (Strict mode) [3] Não Sim

Agenda Presente e futuro da linguagem JavaScript

A linguagem JavaScript

A linguagem ECMAScript

Usos mais comuns da JavaScript

Conceitos iniciais da JavaScript

Orientação a objetos em JavaScript

Novidades da ECMAScript 5

Browsers mais usados

Suporte à ECMAScript 5

Considerações finais

Considerações finais Dicas

JavaScript é uma linguagem de programação simples, poderosa e flexível

Pesquise códigos de bibliotecas Analise os códigos de implementação das suas

bibliotecas JavaScript favoritas

Teste seus códigos JavaScript nos principais browsers Microsoft Internet Explorer, Mozilla Firefox, Google

Chrome, Apple Safari, Opera, ...

Aprenda sobre as novidades da ECMAScript 5 Considere optar pelo modo estrito

top related