SlideShare una empresa de Scribd logo
1 de 117
Descargar para leer sin conexión
JavaScript:
A Linguagem
Prof. Sérgio Souza Costa
Sobre mim
Sérgio Souza Costa
Professor - UFMA
Doutor em Computação Aplicada (INPE)
prof.sergio.costa@gmail.com
https://sites.google.com/site/profsergiocosta/home
https://twitter.com/profsergiocosta
http://gplus.to/sergiosouzacosta
http://www.slideshare.net/skosta/presentations?order=popular
Interfaces de usuário
Estrutura: HTML
Apresentação: CSS
Comportamento: JavaScript
Interfaces de usuário
Estrutura: HTML
Apresentação: CSS
Comportamento: JavaScript
$(document).ready(function(){
$("#p1").mouseenter(function(){
$.ajax({
url: "endereco_web",
success: function(html){
$("#a1").html(html);
}})
})
})
Um exemplo de código em
JavaScript
Observem este
código,
voltaremos nele
mais a frente
"Combining a functional style with prototypal inheritance JavaScript
is arguably the most widely deployed language of either type.
Considering that virtually every computer user has an interpreter
capable of running it, JavaScript serves to be one of the best
languages to learn."
John Resig
"Considered a “toy” language by serious web developers for
most of its lifetime, Java-Script has regained its prestige in
the past few years as a result of the renewed interest in Rich
Internet Applications and Ajax technologies".
John Resig - jQuery in Action
O que preciso saber ?
1. Saber programar
2. Conhecer a linguagem
3. Conhecer suas APIs
O que preciso saber ?
1. Saber programar
2. Conhecer a linguagem
3. Conhecer suas APIs
Como começar ?
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8" />
<title></title>
</head>
<body>
<a href="javascript:alert('BOO Bad way')"> Click</a>
</body>
</html>
Opção 1: Inline Javascript – Bad
Opção 2: Embedded Javascript – Good
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8" />
<title></title>
<script type="text/javascript" >
function faca_algo(){
alert ("OK")
}
</script>
</head>
<body>
<a href="#" onclick ="faca_algo()" > Click</a>
</body>
</html>
Opção 3: External Javascript – Best
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8" />
<title></title>
<script type="text/javascript" src="fool.js" ></script>
</head>
<body>
<a href="#" onclick ="faca_algo()" > Click</a>
</body>
</html>
function faca_algo(){
alert ("OK")
}
JavaScript é uma linguagem de programação
JavaScript é uma linguagem de programação
JavaScript ≠ Java
JavaScript
● Inicialmente com o nome de Cmm (C menos menos) e depois
ScriptEase.
● Netscape usa o projeto em seu Browser, nomeando como LiveScript
e depois JavaScript.
● Não é derivada do Java, o nome pode ter sido usado como estratégia
de marketing.
● Microsoft incorpora no teu browser com outro nome - JScript.
Ranking das Linguagens do lado do
cliente
Linguagem
Imperativa
Linguagem
Imperativa
Variáveis
Linguagem
Imperativa
Variáveis Valores
Linguagem
Imperativa
Variáveis Valores
Atribuição
Linguagem
Imperativa
Variáveis Valores
Atribuição
Estado
Sintaxe
Inspirada em C, como Java e C++
for (var i = 0; i < 10; i++) {
if (algumaCoisa) {
break;
}
}
●Variáveis
Principais Elementos
●Nome
●Tipo
●Valor
VariáveisVariáveis
●Nome
●Tipo
●Valor
Variáveis
●Nome
●Tipo
●Valor
Variáveis
Tipo
●Dinamicamente tipada
Tipo
Dinamicamente tipada - Vantagens
Dinamicamente tipada - Vantagens
Códigos
menores
+ Funções aplicadas a
diferentes valores
Dinamicamente tipada - Vantagens
Códigos
menores
+ Funções aplicadas a
diferentes valores
= +Produtivade
Dinamicamente tipada - Vantagens
Códigos
menores
+ Funções aplicadas a
diferentes valores
= +Produtivade
=+Manutenabilidade
=+Legibilidade
Dinamicamente tipada - Desvantagens
Dinamicamente tipada - Desvantagens
Códigos poucos
seguros
Dinamicamente tipada - Desvantagens
Códigos poucos
seguros
Baixa
eficiência
Dinamicamente tipada - Desvantagens
Códigos poucos
seguros
Baixa
eficiência
Mais disciplina nos testes
var a = 12;
var b = {animal:”cat”,age:10};
var c = true;
...
Nome Valor
Variáveis
var a = 12;
var b = {animal:”cat”,age:10};
var c = true;
...
Nome Valor
Variáveis
Tipo de uma
váriavel é tipo
de seu valor
corrente
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8" />
<script type="text/javascript" >
function teste (){
a = 20
b = 10
}
teste()
console.log (a, b)
</script>
<title></title>
</head>
<body>
</body>
</html>
Exemplo
Tipos - JavaScript
Primitivo X Referência
Exemplo
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8" />
<script type="text/javascript" >
var a = 40
var b = a
b = 30
var p1 = {x:10, y: 20};
var p2 = p1;
p2.x = 50;
p2.y = 80;
console.log (p1, p2, a, b)
</script>
<title></title>
</head>
<body>
</body>
</html>
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8" />
<script type="text/javascript" >
var a = 40
var b = a
b = 30
var p1 = {x:10, y: 20};
var p2 = p1;
p2.x = 50;
p2.y = 80;
console.log (p1, p2, a, b)
</script>
<title></title>
</head>
<body>
</body>
</html>
Exemplo
Tipos primitivos
é sempre
atribuído como
cópia.
Referência
Referência
Similar a diversas
outras linguagens
como Java, Lua,
Ruby ...
As vezes é necessário saber qual o tipo de uma determinada variável, para
decidir qual o comportamento ou evitar erros de execução.
typeof
Tipos primitivos
●Numéricos → inteiro ou real
○10, 10.5, 12.1, 0
●Booleanos
○False, True
●null and undefined
Conversão explícita
●parseFloat()
●parseInt()
●Object.toString()
Corrijam este código.
Exercício – “Somadora”
var myPi = “3.1415”;
var result = myPi - 1.1;
var myPi = “3.1415”;
var result = myPi + 1.1;
Regras de coerção
var result1 = 1 + true;
var result2 = 1 + false;
var result3 = “true” + true;
var result4 = null + true;
var result5 = undefined + 0;
var result6 = undefined + “0“ ;
Regras de coerção
São tipos primitivos, imutáveis
Métodos e propriedades como objeto
● length, substring, toLowerCase, charAt, concat
s = "sergio"
s[0] = "S"
console.log(s)
String
Funções
function nome(args) {
comandos;
}
function dobro(x) {
return 2*x;
}
nome = function (args) {
comandos;
}
dobro = function (x) {
return 2*x;
}
Forma 1 Forma 2
function twice (f, a) {
return f (f (a))}
function dobra (a) {
return 2* a}
console.log (twice (dobra, 4))
Função como parâmetro
function twice (f, a) { return f (f (a))}
console.log (twice(function (x) {return 2*x;}, 4 ))
Funções anônimas
function add (x) {
return function (y) {
return y+x
}
}
add1 = add (1)
console.log (add1(10))
Retornando função (closure)
function f () {
for (i in arguments ) {
console.log (i)
}
}
f (1,2)
Funções – Número de argumentos
indefinido
Sobrecarga é um tipo de polimorfismo muito útil e
existente em diversas linguagens, mas não existe
nativamente em JavaScript, mas pode ser simulada:
● A partir do número de argumentos passados, dos valores dos
argumentos passados.
Sobrecarga de funções
function f (arg) {
if (arg)
console.log (arg)
else
console.log (“ola mundo“)
}
f("oi")
f()
function f (arg) {
if (arguments.length != 0)
console.log (arg)
else
console.log ("ola mundo")
}
f("oi")
f()
Exemplos
function f(par) {
par = par || 1
console.log(par)
}
Parâmetros padrão
●Array
var a = [1,2,3]
●Object
var o = {nome: “joao“, idade:25}
Tipos referência
var a = [1,2,3,4]
for (v in a)
{ console.lo
g (v)
}
Array
var o = {chave1 : valor1, chave2 : valor2 }
Valores podem ser de qualquer
dos valores existentes em
JavaScript: numéricos, string,
funções, arrays ou objetos
Object
var person = new Object();
person.name = “Nicholas”;
person.age = 29;
person.job = “Software Engineer”;
person.sayName = function(){
Console.log(this.name);
};
person.sayName()
Object - Simulando POO
var person = new Object();
person.name = “Nicholas”;
person.age = 29;
person.job = “Software Engineer”;
person.sayName = function(){
Console.log(this.name);
};
person.sayName()
Object - Simulando POO
Sempre que criar
um novo „person“,
terei que escrever a
função sayName ?
var person = new Object();
person.name = “Nicholas”;
person.age = 29;
person.job = “Software Engineer”;
person.sayName = function(){
Console.log(this.name);
};
person.sayName()
Object - Simulando POO
Sempre que criar
um novo „person“,
terei que escrever a
função sayName ?Criem uma função
para fazer isso
function createPerson(name, age, job){
var o = new Object();
o.name = name;
o.age = age;
o.job = job;
o.sayName = function(){
alert(this.name);
};
return o;
}
var person1 = createPerson(“Nicholas”, 29, “Software
Engineer”);
var person2 = createPerson(“Greg”, 27, “Doctor”);
Object - Simulando POO
function createPerson(name, age, job){
var o = new Object();
o.name = name;
o.age = age;
o.job = job;
o.sayName = function(){
alert(this.name);
};
return o;
}
var person1 = createPerson(“Nicholas”, 29, “Software
Engineer”);
var person2 = createPerson(“Greg”, 27, “Doctor”);
Object - Simulando POO
Linguagens
orientadas a
objetos tem uma
solução melhor:
construtoras.
function Person(name, age, job){
this.name = name;
this.age = age;
this.job = job;
this.sayName = function(){
alert(this.name);
};
}
var person1 = new Person(“Nicholas”, 29, “Software
Engineer”);
var person2 = new Person(“Greg”, 27, “Doctor”);
Object - Simulando POO
function Person(name, age, job){
this.name = name;
this.age = age;
this.job = job;
this.sayName = function(){
alert(this.name);
};
}
var person1 = new Person(“Nicholas”, 29, “Software
Engineer”);
var person2 = new Person(“Greg”, 27, “Doctor”);
Object - Simulando POO
Um problema:
sayName é
replicada em todos
os objetos
function Person(name, age, job){
this.name = name;
this.age = age;
this.job = job;
}
Person.prototype.sayName = function(){
alert(this.name);
};
var person1 = new Person("Nicholas", 29,"Software
Engineer");
var person2 = new Person("Greg", 27, "Doctor");
Console.log (person1.sayName == person2.sayName )
Object - Prototype
function Person(name, age, job){
this.name = name;
this.age = age;
this.job = job;
}
Person.prototype.sayName = function(){
alert(this.name);
};
var person1 = new Person("Nicholas", 29,"Software
Engineer");
var person2 = new Person("Greg", 27, "Doctor");
Console.log (person1.sayName == person2.sayName )
Object - Prototype
Prototype permite
extender as
funcionalidades de
um objeto, ex:
plugins do Jquery
Person.prototype = {
constructor: Person,
sayName: function(){
alert(this.name);
}
}
Object - Prototype
Objetos como String e Array, utilizam
prototypes para definir seus “métodos”.
alert(typeof Array.prototype.sort);
alert(typeof String.prototype.substring);
Object - Prototype
String.prototype.iniciaCom =
function (text) {
return this.indexOf(text) == 0;
};
var msg = "Hello world!";
console.log(msg.iniciaCom("Hello")
);
Objetos como String e Array, utilizam
prototypes para definir seus “métodos”.
Object - Prototype
function Pessoa (name) { this._name = name; }
Pessoa.prototype = {
constructor: Pessoa,
getName : function(){ return (this._name); },
setName : function(name){this._name = name; }
}
var p = new Pessoa ("sergio")
console.log (p.getName())
p.setName ("joao")
console.log (p.getName())
Getters e Setters
function Pessoa (name) { this._name = name; }
Pessoa.prototype = {
constructor: Pessoa,
getName : function(){ return (this._name); },
setName : function(name){this._name = name; }
}
var p = new Pessoa ("sergio")
console.log (p.getName())
p.setName ("joao")
console.log (p.getName())
Getters e Setters
Compo possso
usar “sobrecarga”
aqui ?
function Pessoa (name) { this._name = name; }
Pessoa.prototype = {
constructor: Pessoa,
getName : function(){ return (this._name); },
setName : function(name){this._name = name; }
name : function () {
if (arguments[0] &&
typeof (arguments[0]) == "string")
return this.setName (arguments[0])
else
return this.getName ()
}
}
var p = new Pessoa ("sergio")
console.log (p.name())
p.name ("joao")
console.log (p.name())
Getters e Setters
function Person(name ){
this._name = name;
}
Person.prototype = {
constructor: Person,
get name () {
return this._name;
},
set name (name) {
this._name = name
}
}
a = new Person ("jose")
console.log (a.name);
a.name = "joao"
console.log (a.name);
Getters e Setters
A partir do
JavaScript 1.5
(2000), o java
script permitiu
escrever getter e
setters
Exemplo em jQuery
O método $.fn.html usado como setter
$('h1').html('olá mundo');
O método html usado como getter
$('h1').html();
Getters e Setters
Avalia uma expressão JavaScript. Exemplos:
console.log (eval("12*15"))
console.log (eval("[12,13]")[0])
console.log (eval("({x:12.5,y:14.3})").x)
Eval
JSON
JSON é um objeto JavaScript no formato de String
eval ('( {"skillz": {
"web":[
{"name": "html",
"years": "5"
},
{"name": "css",
"years": "3"
}],
"database":[
{"name": "sql",
"years": "7"
}]
}} )')
JSON
JSON é um objeto JavaScript no formato de String
eval ('( {"skillz": {
"web":[
{"name": "html",
"years": "5"
},
{"name": "css",
"years": "3"
}],
"database":[
{"name": "sql",
"years": "7"
}]
}} )')
Problem at line 13
character 19: eval is evil.
http://www.jslint.com/
Eval is Evil
eval ('
(
{"evilcode":
function(){
window.location="http://dsfsd342d.com";
}()
}
)
')
Json
Criando e parseando JSON
p = new Object ({
"nome" : "sergio",
"idade" : 30
})
console.log (JSON.stringify (p))
console.log (JSON.parse (JSON.stringify (p)))
http://www.json.org/json2.js.
Browser mais antigos não
inclue esse objeto JSON
JSON - Parse
Tratando erro
var jsonString = "{nao eh um json}”"
try {
var jsonObj = JSON.parse(jsonString);
} catch(e) {
console.log("json invalido:", e)
JSON - Parse
var jsontext = '{"nome":"sergio", "nascimento":"05 Janeiro
1981"}';
var pessoa = JSON.parse(jsontext);
var pessoa = JSON.parse(jsontext, function (key, value) {
var bDate;
if (key == "nascimento") {
bDate = new Date(value);
return bDate;
}
return value;
});
JSON - Stringfy
Formatando a saída
console.log (JSON.stringify (pessoa, function (key, value) {
var bDate;
if (key == "nascimento") {
bDate = new Date (value)
return ( bDate.getDate() +"/"+
bDate.getMonth()+1 +"/"+ bDate.getFullYear() )
}
return value;
}));
Date
●getDate() Retorna um número inteiro entre 1 e 31, que
representa o dia do mês do objeto Date.
●getDay() Retorna um número inteiro do dia da semana.
Domingo 0, segunda 1, terça 2, etc.
●getFullYear() Retorna o ano do objeto Date em números
absolutos, por exemplo 1998.
●getMonth() Retorna o mês do objeto Date, um inteiro entre 0 e
11 (0 janeiro, 1 fevereiro, etc).
XML e JSON
<animals>
<dog>
<name>Rufus</name>
<breed>labrador</breed>
</dog>
<dog>
<name>Marty</name>
<breed>whippet</breed>
</dog>
<cat name="Matilda"/>
</animals>
Passem este
XML para o
formato de
Object -
JSON
Compatibilidade
●JavaScript, Jscript, ECMAScript, ActionScript
●ECMAScript é uma linguagem de programação baseada
em scripts, padronizada pela Ecma International na
especificação ECMA-262.
○http://www.ecma-international.org/publications/files/ECMA-ST
/ECMA-262.pdf
●JavaScript, Jscript e ActionScript são dialetos do
ECMAScript
○Usando apenas elementos do ECMAScript, você garante
compatibilidade.
http://www.jslint.com
Todos estes conceitos são amplamente
utilizados em bibliotecas e frameworks,
como o JQuery
Closures
Funções de primeira Ordem
“Sobrecarga”
Funções anônimas
Objetos
$(document).ready(function(){
$("#p1").mouseenter(function(){
$.ajax({
url: "endereco_web",
success: function(html){
$("#a1").html(html);
}})
})
})
Um exemplo de código em
JavaScript
Agora
identifiquem
alguns
elementos
discutidos nessa
apresentação.
Boas práticas
Boas práticas
Códigos legíveis (nome de
variáveis...)
Boas práticas
Códigos legíveis (nome de
variáveis...)
Variáveis
globais
Variáveis Globais
„ JavaScript's biggest problem is its dependence on global
variables, particularly implied global variables. If a variable
is not explicitly declared (usually with the var statement),
then JavaScript assumes that the variable was global. This
can mask misspelled names and other problems.“
●JSLint
Variáveis Globais
„ JavaScript's biggest problem is its dependence on global
variables, particularly implied global variables. If a variable
is not explicitly declared (usually with the var statement),
then JavaScript assumes that the variable was global. This
can mask misspelled names and other problems.“
●JSLint
Use sempre o var e declare antes
de usar
Boas práticas
Códigos legíveis (nome de
variáveis...)
Variáveis
globais
Opte por notações
curtas
Notações curtas
if(v){
var x = v;
} else {
var x = 10;
}
È equivalente a:
var x = v || 10;
Boas práticas
Códigos legíveis (nome de
variáveis...)
Variáveis
globais
Opte por notações
curtas
Modularize
Modularize
●Modularizar sempre é uma boa prática. Dividir
para conquistar.
○Bom exemplo: JQuery
Boas práticas
Códigos legíveis (nome de
variáveis...)
Variáveis
globais
Opte por notações
curtas
Modularize
Boas práticas
Códigos legíveis (nome de
variáveis...)
Variáveis
globais
Opte por notações
curtas
Modularize
Valide
http://www.jslint.com/
Validar
●Códigos válidos são códigos que atendem a um
consenso.
Boas práticas
Códigos legíveis (nome de
variáveis...)
Variáveis
globais
Opte por notações
curtas
Modularize
Valide http://www.jslint.com/
Boas práticas
Códigos legíveis (nome de
variáveis...)
Variáveis
globais
Opte por notações
curtas
Modularize
Valide http://www.jslint.com/
Use ponto e vírgula
Boas práticas
Códigos legíveis (nome de
variáveis...)
Variáveis
globais
Opte por notações
curtas
Modularize
Valide http://www.jslint.com/
Use ponto e
virgula
Escopo
Escopo
Não existe escopo por bloco, apenas por funções.
function f(p) {
if (p) {
var a = 15
}
console.log (a)
}
f(1)
Boas práticas
Códigos legíveis (nome de
variáveis...)
Variáveis
globais
Opte por notações
curtas
Modularize
Valide
http://www.jslint.com/ Use ponto e
virgula
Escopo
Use
blocos
Blocos {}
Uso de blocos evita erros, use sempre mesmo
onde não é obrigatório.
if (condicao) {
..
}
else {
}
Boas práticas
Códigos legíveis (nome de
variáveis...)
Variáveis
globais
Opte por notações
curtas
Modularize
Valide
http://www.jslint.com/ Use ponto e
virgula
Escopo
Use
blocos
Boas práticas
Códigos legíveis (nome de
variáveis...)
Variáveis
globais
Opte por notações
curtas
Modularize
Valide
http://www.jslint.com/ Use ponto e
virgula
Escopo
Use
blocos
Comprima
Boas práticas
Códigos legíveis (nome de
variáveis...)
Variáveis
globais
Opte por notações
curtas
ModularizeValide
http://www.jslint.co
m/ Use ponto e
virgula
Escop
o
Use
blocos
Comprima
Eval is Evil
Boas práticas
Códigos legíveis (nome de
variáveis...)
Variáveis
globais
Opte por notações
curtas
ModularizeValide
http://www.jslint.co
m/ Use ponto e
virgula
Escop
o
Use
blocos
Comprima
Eval is Evil
Consultem o
jslint

Más contenido relacionado

La actualidad más candente

Técnicas de Refactorización (EN ESPANOL)
Técnicas de Refactorización (EN ESPANOL)Técnicas de Refactorización (EN ESPANOL)
Técnicas de Refactorización (EN ESPANOL)
Rodrigo Branas
 
Criando uma arquitetura de front-end do zero
Criando uma arquitetura de front-end do zeroCriando uma arquitetura de front-end do zero
Criando uma arquitetura de front-end do zero
Eduardo Shiota Yasuda
 

La actualidad más candente (20)

Java script aula 09 - JQuery
Java script   aula 09 - JQueryJava script   aula 09 - JQuery
Java script aula 09 - JQuery
 
Desenvolvimento Front end (AngularJS e Bootstrap)
Desenvolvimento Front end (AngularJS e Bootstrap)Desenvolvimento Front end (AngularJS e Bootstrap)
Desenvolvimento Front end (AngularJS e Bootstrap)
 
Java script aula 02 - operadores
Java script   aula 02 - operadoresJava script   aula 02 - operadores
Java script aula 02 - operadores
 
Hello vue
Hello vueHello vue
Hello vue
 
Aula javascript
Aula  javascriptAula  javascript
Aula javascript
 
Node.js - #7 - Core Modules - http - Parte 1 - Rodrigo Branas
Node.js - #7 - Core Modules - http - Parte 1 - Rodrigo BranasNode.js - #7 - Core Modules - http - Parte 1 - Rodrigo Branas
Node.js - #7 - Core Modules - http - Parte 1 - Rodrigo Branas
 
Técnicas de Refactorización (EN ESPANOL)
Técnicas de Refactorización (EN ESPANOL)Técnicas de Refactorización (EN ESPANOL)
Técnicas de Refactorización (EN ESPANOL)
 
Aula 07 acessibilidade
Aula 07  acessibilidadeAula 07  acessibilidade
Aula 07 acessibilidade
 
Criando uma arquitetura de front-end do zero
Criando uma arquitetura de front-end do zeroCriando uma arquitetura de front-end do zero
Criando uma arquitetura de front-end do zero
 
Construindo Sistemas Com Django
Construindo Sistemas Com DjangoConstruindo Sistemas Com Django
Construindo Sistemas Com Django
 
Tutorial sobre Bootstrap
Tutorial sobre BootstrapTutorial sobre Bootstrap
Tutorial sobre Bootstrap
 
Tutorial sobre Jquery
Tutorial sobre JqueryTutorial sobre Jquery
Tutorial sobre Jquery
 
Javascript aula 01 - visão geral
Javascript   aula 01 - visão geralJavascript   aula 01 - visão geral
Javascript aula 01 - visão geral
 
Android Libs - AndroidDevConf
Android Libs - AndroidDevConfAndroid Libs - AndroidDevConf
Android Libs - AndroidDevConf
 
HTTP, JSON, REST e AJAX com AngularJS
HTTP, JSON, REST e AJAX com AngularJSHTTP, JSON, REST e AJAX com AngularJS
HTTP, JSON, REST e AJAX com AngularJS
 
Android na Prática
Android na PráticaAndroid na Prática
Android na Prática
 
Construindo Diretivas com AngularJS
Construindo Diretivas com AngularJSConstruindo Diretivas com AngularJS
Construindo Diretivas com AngularJS
 
Mean Stack
Mean StackMean Stack
Mean Stack
 
Treinamento Básico de Django
Treinamento Básico de DjangoTreinamento Básico de Django
Treinamento Básico de Django
 
Automação de Testes com AngularJS
Automação de Testes com AngularJSAutomação de Testes com AngularJS
Automação de Testes com AngularJS
 

Similar a JavaScript - A Linguagem

(A11) LabMM3 - JavaScript - Subalgoritmos e scope
(A11) LabMM3 - JavaScript - Subalgoritmos e scope(A11) LabMM3 - JavaScript - Subalgoritmos e scope
(A11) LabMM3 - JavaScript - Subalgoritmos e scope
Carlos Santos
 
LabMM3 - Aula teórica 09
LabMM3 - Aula teórica 09LabMM3 - Aula teórica 09
LabMM3 - Aula teórica 09
Carlos Santos
 
O que é que o Java não tem?
O que é que o Java não tem?O que é que o Java não tem?
O que é que o Java não tem?
Denis Costa
 
T11_LM3: Subalgoritmose colisões (2013-2014)
T11_LM3: Subalgoritmose colisões (2013-2014)T11_LM3: Subalgoritmose colisões (2013-2014)
T11_LM3: Subalgoritmose colisões (2013-2014)
Carlos Santos
 
Grails parte 1 - introdução
Grails   parte 1 - introduçãoGrails   parte 1 - introdução
Grails parte 1 - introdução
Josino Rodrigues
 

Similar a JavaScript - A Linguagem (20)

Tdc2010 web
Tdc2010 webTdc2010 web
Tdc2010 web
 
JQuery
JQuery JQuery
JQuery
 
Javascript
JavascriptJavascript
Javascript
 
Javascript
Javascript Javascript
Javascript
 
Evolução e futuro do uso de paradigmas no JavaScript
Evolução e futuro do uso de paradigmas no JavaScriptEvolução e futuro do uso de paradigmas no JavaScript
Evolução e futuro do uso de paradigmas no JavaScript
 
Algoritmos e Estrutura de Dados - Aula 03
Algoritmos e Estrutura de Dados - Aula 03Algoritmos e Estrutura de Dados - Aula 03
Algoritmos e Estrutura de Dados - Aula 03
 
(A11) LabMM3 - JavaScript - Subalgoritmos e scope
(A11) LabMM3 - JavaScript - Subalgoritmos e scope(A11) LabMM3 - JavaScript - Subalgoritmos e scope
(A11) LabMM3 - JavaScript - Subalgoritmos e scope
 
Qcon SP 2012, 5 (ou mais) coisas que você gostaria de saber sobre o iOS e o O...
Qcon SP 2012, 5 (ou mais) coisas que você gostaria de saber sobre o iOS e o O...Qcon SP 2012, 5 (ou mais) coisas que você gostaria de saber sobre o iOS e o O...
Qcon SP 2012, 5 (ou mais) coisas que você gostaria de saber sobre o iOS e o O...
 
javascript_funcional.pdf
javascript_funcional.pdfjavascript_funcional.pdf
javascript_funcional.pdf
 
LabMM3 - Aula teórica 09
LabMM3 - Aula teórica 09LabMM3 - Aula teórica 09
LabMM3 - Aula teórica 09
 
Introdução a JavaScript
Introdução a JavaScriptIntrodução a JavaScript
Introdução a JavaScript
 
O que é que o Java não tem?
O que é que o Java não tem?O que é que o Java não tem?
O que é que o Java não tem?
 
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ê?
 
Floggy-IIBoot-2008-09-25
Floggy-IIBoot-2008-09-25Floggy-IIBoot-2008-09-25
Floggy-IIBoot-2008-09-25
 
Floggy-GUJavaSC-2008-09-20
Floggy-GUJavaSC-2008-09-20Floggy-GUJavaSC-2008-09-20
Floggy-GUJavaSC-2008-09-20
 
Evento Front End SP - Organizando o Javascript
 Evento Front End SP - Organizando o Javascript Evento Front End SP - Organizando o Javascript
Evento Front End SP - Organizando o Javascript
 
T11_LM3: Subalgoritmose colisões (2013-2014)
T11_LM3: Subalgoritmose colisões (2013-2014)T11_LM3: Subalgoritmose colisões (2013-2014)
T11_LM3: Subalgoritmose colisões (2013-2014)
 
Python e MongoDB - Ensol
Python e MongoDB - EnsolPython e MongoDB - Ensol
Python e MongoDB - Ensol
 
Grails parte 1 - introdução
Grails   parte 1 - introduçãoGrails   parte 1 - introdução
Grails parte 1 - introdução
 
Groovy para javeiros - Migração Painless
Groovy para javeiros - Migração PainlessGroovy para javeiros - Migração Painless
Groovy para javeiros - Migração Painless
 

Más de Sérgio Souza Costa

Más de Sérgio Souza Costa (20)

Expressões aritméticas, relacionais e lógicas
Expressões aritméticas, relacionais e lógicasExpressões aritméticas, relacionais e lógicas
Expressões aritméticas, relacionais e lógicas
 
De algoritmos à programas de computador
De algoritmos à programas de computadorDe algoritmos à programas de computador
De algoritmos à programas de computador
 
Introdução ao pensamento computacional e aos algoritmos
Introdução ao pensamento computacional e aos algoritmosIntrodução ao pensamento computacional e aos algoritmos
Introdução ao pensamento computacional e aos algoritmos
 
Minicurso de introdução a banco de dados geográficos
Minicurso de introdução a banco de dados geográficosMinicurso de introdução a banco de dados geográficos
Minicurso de introdução a banco de dados geográficos
 
Modelagem de dados geográficos
Modelagem de dados geográficosModelagem de dados geográficos
Modelagem de dados geográficos
 
Banco de dados geográfico - Aula de Encerramento
Banco de dados geográfico - Aula de EncerramentoBanco de dados geográfico - Aula de Encerramento
Banco de dados geográfico - Aula de Encerramento
 
Banco de dados geográficos – Arquiteturas, banco de dados e modelagem
Banco de dados geográficos – Arquiteturas, banco de dados e modelagemBanco de dados geográficos – Arquiteturas, banco de dados e modelagem
Banco de dados geográficos – Arquiteturas, banco de dados e modelagem
 
Banco de dados geográficos - Aula de abertura
Banco de dados geográficos - Aula de aberturaBanco de dados geográficos - Aula de abertura
Banco de dados geográficos - Aula de abertura
 
Linguagem SQL e Extensões Espacias - Introdução
Linguagem SQL e Extensões Espacias - IntroduçãoLinguagem SQL e Extensões Espacias - Introdução
Linguagem SQL e Extensões Espacias - Introdução
 
Gödel’s incompleteness theorems
Gödel’s incompleteness theoremsGödel’s incompleteness theorems
Gödel’s incompleteness theorems
 
Turing e o problema da decisão
Turing e o problema da decisãoTuring e o problema da decisão
Turing e o problema da decisão
 
DBCells - an open and global multi-scale linked cells
DBCells - an open and global multi-scale linked cellsDBCells - an open and global multi-scale linked cells
DBCells - an open and global multi-scale linked cells
 
Conceitos básicos de orientação a objetos
Conceitos básicos de orientação a objetosConceitos básicos de orientação a objetos
Conceitos básicos de orientação a objetos
 
Polymorphism (Ad-hoc and Universal)
Polymorphism (Ad-hoc and Universal)Polymorphism (Ad-hoc and Universal)
Polymorphism (Ad-hoc and Universal)
 
Herança e Encapsulamento
Herança e EncapsulamentoHerança e Encapsulamento
Herança e Encapsulamento
 
Relações (composição e agregação)
Relações (composição e agregação)Relações (composição e agregação)
Relações (composição e agregação)
 
Abstract classes and interfaces
Abstract classes and interfacesAbstract classes and interfaces
Abstract classes and interfaces
 
Introdução ao Prolog
Introdução ao PrologIntrodução ao Prolog
Introdução ao Prolog
 
Heap - Python
Heap - PythonHeap - Python
Heap - Python
 
Paradigma lógico
Paradigma lógicoParadigma lógico
Paradigma lógico
 

Último

Slide - EBD ADEB 2024 Licao 02 2Trim.pptx
Slide - EBD ADEB 2024 Licao 02 2Trim.pptxSlide - EBD ADEB 2024 Licao 02 2Trim.pptx
Slide - EBD ADEB 2024 Licao 02 2Trim.pptx
edelon1
 
5 bloco 7 ano - Ensino Relogioso- Lideres Religiosos _ Passei Direto.pdf
5 bloco 7 ano - Ensino Relogioso- Lideres Religiosos _ Passei Direto.pdf5 bloco 7 ano - Ensino Relogioso- Lideres Religiosos _ Passei Direto.pdf
5 bloco 7 ano - Ensino Relogioso- Lideres Religiosos _ Passei Direto.pdf
LeloIurk1
 
matematica aula didatica prática e tecni
matematica aula didatica prática e tecnimatematica aula didatica prática e tecni
matematica aula didatica prática e tecni
CleidianeCarvalhoPer
 
Os editoriais, reportagens e entrevistas.pptx
Os editoriais, reportagens e entrevistas.pptxOs editoriais, reportagens e entrevistas.pptx
Os editoriais, reportagens e entrevistas.pptx
TailsonSantos1
 
Considere a seguinte situação fictícia: Durante uma reunião de equipe em uma...
Considere a seguinte situação fictícia:  Durante uma reunião de equipe em uma...Considere a seguinte situação fictícia:  Durante uma reunião de equipe em uma...
Considere a seguinte situação fictícia: Durante uma reunião de equipe em uma...
azulassessoria9
 
421243121-Apostila-Ensino-Religioso-Do-1-ao-5-ano.pdf
421243121-Apostila-Ensino-Religioso-Do-1-ao-5-ano.pdf421243121-Apostila-Ensino-Religioso-Do-1-ao-5-ano.pdf
421243121-Apostila-Ensino-Religioso-Do-1-ao-5-ano.pdf
LeloIurk1
 
PROJETO DE EXTENSÃO I - TECNOLOGIA DA INFORMAÇÃO Relatório Final de Atividade...
PROJETO DE EXTENSÃO I - TECNOLOGIA DA INFORMAÇÃO Relatório Final de Atividade...PROJETO DE EXTENSÃO I - TECNOLOGIA DA INFORMAÇÃO Relatório Final de Atividade...
PROJETO DE EXTENSÃO I - TECNOLOGIA DA INFORMAÇÃO Relatório Final de Atividade...
HELENO FAVACHO
 
ENSINO RELIGIOSO 7º ANO INOVE NA ESCOLA.pdf
ENSINO RELIGIOSO 7º ANO INOVE NA ESCOLA.pdfENSINO RELIGIOSO 7º ANO INOVE NA ESCOLA.pdf
ENSINO RELIGIOSO 7º ANO INOVE NA ESCOLA.pdf
LeloIurk1
 
Teoria heterotrófica e autotrófica dos primeiros seres vivos..pptx
Teoria heterotrófica e autotrófica dos primeiros seres vivos..pptxTeoria heterotrófica e autotrófica dos primeiros seres vivos..pptx
Teoria heterotrófica e autotrófica dos primeiros seres vivos..pptx
TailsonSantos1
 

Último (20)

Slide - EBD ADEB 2024 Licao 02 2Trim.pptx
Slide - EBD ADEB 2024 Licao 02 2Trim.pptxSlide - EBD ADEB 2024 Licao 02 2Trim.pptx
Slide - EBD ADEB 2024 Licao 02 2Trim.pptx
 
PROJETO DE EXTENSÃO I - AGRONOMIA.pdf AGRONOMIAAGRONOMIA
PROJETO DE EXTENSÃO I - AGRONOMIA.pdf AGRONOMIAAGRONOMIAPROJETO DE EXTENSÃO I - AGRONOMIA.pdf AGRONOMIAAGRONOMIA
PROJETO DE EXTENSÃO I - AGRONOMIA.pdf AGRONOMIAAGRONOMIA
 
5 bloco 7 ano - Ensino Relogioso- Lideres Religiosos _ Passei Direto.pdf
5 bloco 7 ano - Ensino Relogioso- Lideres Religiosos _ Passei Direto.pdf5 bloco 7 ano - Ensino Relogioso- Lideres Religiosos _ Passei Direto.pdf
5 bloco 7 ano - Ensino Relogioso- Lideres Religiosos _ Passei Direto.pdf
 
Construção (C)erta - Nós Propomos! Sertã
Construção (C)erta - Nós Propomos! SertãConstrução (C)erta - Nós Propomos! Sertã
Construção (C)erta - Nós Propomos! Sertã
 
Slides Lição 6, CPAD, As Nossas Armas Espirituais, 2Tr24.pptx
Slides Lição 6, CPAD, As Nossas Armas Espirituais, 2Tr24.pptxSlides Lição 6, CPAD, As Nossas Armas Espirituais, 2Tr24.pptx
Slides Lição 6, CPAD, As Nossas Armas Espirituais, 2Tr24.pptx
 
matematica aula didatica prática e tecni
matematica aula didatica prática e tecnimatematica aula didatica prática e tecni
matematica aula didatica prática e tecni
 
PROJETO DE EXTENÇÃO - GESTÃO DE RECURSOS HUMANOS.pdf
PROJETO DE EXTENÇÃO - GESTÃO DE RECURSOS HUMANOS.pdfPROJETO DE EXTENÇÃO - GESTÃO DE RECURSOS HUMANOS.pdf
PROJETO DE EXTENÇÃO - GESTÃO DE RECURSOS HUMANOS.pdf
 
Os editoriais, reportagens e entrevistas.pptx
Os editoriais, reportagens e entrevistas.pptxOs editoriais, reportagens e entrevistas.pptx
Os editoriais, reportagens e entrevistas.pptx
 
Considere a seguinte situação fictícia: Durante uma reunião de equipe em uma...
Considere a seguinte situação fictícia:  Durante uma reunião de equipe em uma...Considere a seguinte situação fictícia:  Durante uma reunião de equipe em uma...
Considere a seguinte situação fictícia: Durante uma reunião de equipe em uma...
 
aula de bioquímica bioquímica dos carboidratos.ppt
aula de bioquímica bioquímica dos carboidratos.pptaula de bioquímica bioquímica dos carboidratos.ppt
aula de bioquímica bioquímica dos carboidratos.ppt
 
421243121-Apostila-Ensino-Religioso-Do-1-ao-5-ano.pdf
421243121-Apostila-Ensino-Religioso-Do-1-ao-5-ano.pdf421243121-Apostila-Ensino-Religioso-Do-1-ao-5-ano.pdf
421243121-Apostila-Ensino-Religioso-Do-1-ao-5-ano.pdf
 
atividades_reforço_4°ano_231206_132728.pdf
atividades_reforço_4°ano_231206_132728.pdfatividades_reforço_4°ano_231206_132728.pdf
atividades_reforço_4°ano_231206_132728.pdf
 
Slides Lição 05, Central Gospel, A Grande Tribulação, 1Tr24.pptx
Slides Lição 05, Central Gospel, A Grande Tribulação, 1Tr24.pptxSlides Lição 05, Central Gospel, A Grande Tribulação, 1Tr24.pptx
Slides Lição 05, Central Gospel, A Grande Tribulação, 1Tr24.pptx
 
PROJETO DE EXTENSÃO - EDUCAÇÃO FÍSICA BACHARELADO.pdf
PROJETO DE EXTENSÃO - EDUCAÇÃO FÍSICA BACHARELADO.pdfPROJETO DE EXTENSÃO - EDUCAÇÃO FÍSICA BACHARELADO.pdf
PROJETO DE EXTENSÃO - EDUCAÇÃO FÍSICA BACHARELADO.pdf
 
Jogo de Rimas - Para impressão em pdf a ser usado para crianças
Jogo de Rimas - Para impressão em pdf a ser usado para criançasJogo de Rimas - Para impressão em pdf a ser usado para crianças
Jogo de Rimas - Para impressão em pdf a ser usado para crianças
 
PROJETO DE EXTENSÃO I - TECNOLOGIA DA INFORMAÇÃO Relatório Final de Atividade...
PROJETO DE EXTENSÃO I - TECNOLOGIA DA INFORMAÇÃO Relatório Final de Atividade...PROJETO DE EXTENSÃO I - TECNOLOGIA DA INFORMAÇÃO Relatório Final de Atividade...
PROJETO DE EXTENSÃO I - TECNOLOGIA DA INFORMAÇÃO Relatório Final de Atividade...
 
Projeto_de_Extensão_Agronomia_adquira_ja_(91)_98764-0830.pdf
Projeto_de_Extensão_Agronomia_adquira_ja_(91)_98764-0830.pdfProjeto_de_Extensão_Agronomia_adquira_ja_(91)_98764-0830.pdf
Projeto_de_Extensão_Agronomia_adquira_ja_(91)_98764-0830.pdf
 
ENSINO RELIGIOSO 7º ANO INOVE NA ESCOLA.pdf
ENSINO RELIGIOSO 7º ANO INOVE NA ESCOLA.pdfENSINO RELIGIOSO 7º ANO INOVE NA ESCOLA.pdf
ENSINO RELIGIOSO 7º ANO INOVE NA ESCOLA.pdf
 
"É melhor praticar para a nota" - Como avaliar comportamentos em contextos de...
"É melhor praticar para a nota" - Como avaliar comportamentos em contextos de..."É melhor praticar para a nota" - Como avaliar comportamentos em contextos de...
"É melhor praticar para a nota" - Como avaliar comportamentos em contextos de...
 
Teoria heterotrófica e autotrófica dos primeiros seres vivos..pptx
Teoria heterotrófica e autotrófica dos primeiros seres vivos..pptxTeoria heterotrófica e autotrófica dos primeiros seres vivos..pptx
Teoria heterotrófica e autotrófica dos primeiros seres vivos..pptx
 

JavaScript - A Linguagem

  • 2. Sobre mim Sérgio Souza Costa Professor - UFMA Doutor em Computação Aplicada (INPE) prof.sergio.costa@gmail.com https://sites.google.com/site/profsergiocosta/home https://twitter.com/profsergiocosta http://gplus.to/sergiosouzacosta http://www.slideshare.net/skosta/presentations?order=popular
  • 3. Interfaces de usuário Estrutura: HTML Apresentação: CSS Comportamento: JavaScript
  • 4. Interfaces de usuário Estrutura: HTML Apresentação: CSS Comportamento: JavaScript
  • 5.
  • 7. "Combining a functional style with prototypal inheritance JavaScript is arguably the most widely deployed language of either type. Considering that virtually every computer user has an interpreter capable of running it, JavaScript serves to be one of the best languages to learn." John Resig "Considered a “toy” language by serious web developers for most of its lifetime, Java-Script has regained its prestige in the past few years as a result of the renewed interest in Rich Internet Applications and Ajax technologies". John Resig - jQuery in Action
  • 8. O que preciso saber ? 1. Saber programar 2. Conhecer a linguagem 3. Conhecer suas APIs
  • 9. O que preciso saber ? 1. Saber programar 2. Conhecer a linguagem 3. Conhecer suas APIs
  • 11. <!DOCTYPE html> <html> <head> <meta charset="utf-8" /> <title></title> </head> <body> <a href="javascript:alert('BOO Bad way')"> Click</a> </body> </html> Opção 1: Inline Javascript – Bad
  • 12. Opção 2: Embedded Javascript – Good <!DOCTYPE html> <html> <head> <meta charset="utf-8" /> <title></title> <script type="text/javascript" > function faca_algo(){ alert ("OK") } </script> </head> <body> <a href="#" onclick ="faca_algo()" > Click</a> </body> </html>
  • 13. Opção 3: External Javascript – Best <!DOCTYPE html> <html> <head> <meta charset="utf-8" /> <title></title> <script type="text/javascript" src="fool.js" ></script> </head> <body> <a href="#" onclick ="faca_algo()" > Click</a> </body> </html> function faca_algo(){ alert ("OK") }
  • 14. JavaScript é uma linguagem de programação
  • 15. JavaScript é uma linguagem de programação JavaScript ≠ Java
  • 16. JavaScript ● Inicialmente com o nome de Cmm (C menos menos) e depois ScriptEase. ● Netscape usa o projeto em seu Browser, nomeando como LiveScript e depois JavaScript. ● Não é derivada do Java, o nome pode ter sido usado como estratégia de marketing. ● Microsoft incorpora no teu browser com outro nome - JScript.
  • 17. Ranking das Linguagens do lado do cliente
  • 23. Sintaxe Inspirada em C, como Java e C++ for (var i = 0; i < 10; i++) { if (algumaCoisa) { break; } }
  • 28. Tipo
  • 31. Dinamicamente tipada - Vantagens Códigos menores + Funções aplicadas a diferentes valores
  • 32. Dinamicamente tipada - Vantagens Códigos menores + Funções aplicadas a diferentes valores = +Produtivade
  • 33. Dinamicamente tipada - Vantagens Códigos menores + Funções aplicadas a diferentes valores = +Produtivade =+Manutenabilidade =+Legibilidade
  • 34. Dinamicamente tipada - Desvantagens
  • 35. Dinamicamente tipada - Desvantagens Códigos poucos seguros
  • 36. Dinamicamente tipada - Desvantagens Códigos poucos seguros Baixa eficiência
  • 37. Dinamicamente tipada - Desvantagens Códigos poucos seguros Baixa eficiência Mais disciplina nos testes
  • 38. var a = 12; var b = {animal:”cat”,age:10}; var c = true; ... Nome Valor Variáveis
  • 39. var a = 12; var b = {animal:”cat”,age:10}; var c = true; ... Nome Valor Variáveis Tipo de uma váriavel é tipo de seu valor corrente
  • 40. <!DOCTYPE html> <html> <head> <meta charset="utf-8" /> <script type="text/javascript" > function teste (){ a = 20 b = 10 } teste() console.log (a, b) </script> <title></title> </head> <body> </body> </html> Exemplo
  • 43. Exemplo <!DOCTYPE html> <html> <head> <meta charset="utf-8" /> <script type="text/javascript" > var a = 40 var b = a b = 30 var p1 = {x:10, y: 20}; var p2 = p1; p2.x = 50; p2.y = 80; console.log (p1, p2, a, b) </script> <title></title> </head> <body> </body> </html>
  • 44. <!DOCTYPE html> <html> <head> <meta charset="utf-8" /> <script type="text/javascript" > var a = 40 var b = a b = 30 var p1 = {x:10, y: 20}; var p2 = p1; p2.x = 50; p2.y = 80; console.log (p1, p2, a, b) </script> <title></title> </head> <body> </body> </html> Exemplo Tipos primitivos é sempre atribuído como cópia.
  • 46. Referência Similar a diversas outras linguagens como Java, Lua, Ruby ...
  • 47. As vezes é necessário saber qual o tipo de uma determinada variável, para decidir qual o comportamento ou evitar erros de execução. typeof
  • 48. Tipos primitivos ●Numéricos → inteiro ou real ○10, 10.5, 12.1, 0 ●Booleanos ○False, True ●null and undefined
  • 50. Corrijam este código. Exercício – “Somadora”
  • 51. var myPi = “3.1415”; var result = myPi - 1.1; var myPi = “3.1415”; var result = myPi + 1.1; Regras de coerção
  • 52. var result1 = 1 + true; var result2 = 1 + false; var result3 = “true” + true; var result4 = null + true; var result5 = undefined + 0; var result6 = undefined + “0“ ; Regras de coerção
  • 53.
  • 54. São tipos primitivos, imutáveis Métodos e propriedades como objeto ● length, substring, toLowerCase, charAt, concat s = "sergio" s[0] = "S" console.log(s) String
  • 55. Funções function nome(args) { comandos; } function dobro(x) { return 2*x; } nome = function (args) { comandos; } dobro = function (x) { return 2*x; } Forma 1 Forma 2
  • 56. function twice (f, a) { return f (f (a))} function dobra (a) { return 2* a} console.log (twice (dobra, 4)) Função como parâmetro
  • 57. function twice (f, a) { return f (f (a))} console.log (twice(function (x) {return 2*x;}, 4 )) Funções anônimas
  • 58. function add (x) { return function (y) { return y+x } } add1 = add (1) console.log (add1(10)) Retornando função (closure)
  • 59. function f () { for (i in arguments ) { console.log (i) } } f (1,2) Funções – Número de argumentos indefinido
  • 60. Sobrecarga é um tipo de polimorfismo muito útil e existente em diversas linguagens, mas não existe nativamente em JavaScript, mas pode ser simulada: ● A partir do número de argumentos passados, dos valores dos argumentos passados. Sobrecarga de funções
  • 61. function f (arg) { if (arg) console.log (arg) else console.log (“ola mundo“) } f("oi") f() function f (arg) { if (arguments.length != 0) console.log (arg) else console.log ("ola mundo") } f("oi") f() Exemplos
  • 62. function f(par) { par = par || 1 console.log(par) } Parâmetros padrão
  • 63. ●Array var a = [1,2,3] ●Object var o = {nome: “joao“, idade:25} Tipos referência
  • 64. var a = [1,2,3,4] for (v in a) { console.lo g (v) } Array
  • 65. var o = {chave1 : valor1, chave2 : valor2 } Valores podem ser de qualquer dos valores existentes em JavaScript: numéricos, string, funções, arrays ou objetos Object
  • 66. var person = new Object(); person.name = “Nicholas”; person.age = 29; person.job = “Software Engineer”; person.sayName = function(){ Console.log(this.name); }; person.sayName() Object - Simulando POO
  • 67. var person = new Object(); person.name = “Nicholas”; person.age = 29; person.job = “Software Engineer”; person.sayName = function(){ Console.log(this.name); }; person.sayName() Object - Simulando POO Sempre que criar um novo „person“, terei que escrever a função sayName ?
  • 68. var person = new Object(); person.name = “Nicholas”; person.age = 29; person.job = “Software Engineer”; person.sayName = function(){ Console.log(this.name); }; person.sayName() Object - Simulando POO Sempre que criar um novo „person“, terei que escrever a função sayName ?Criem uma função para fazer isso
  • 69. function createPerson(name, age, job){ var o = new Object(); o.name = name; o.age = age; o.job = job; o.sayName = function(){ alert(this.name); }; return o; } var person1 = createPerson(“Nicholas”, 29, “Software Engineer”); var person2 = createPerson(“Greg”, 27, “Doctor”); Object - Simulando POO
  • 70. function createPerson(name, age, job){ var o = new Object(); o.name = name; o.age = age; o.job = job; o.sayName = function(){ alert(this.name); }; return o; } var person1 = createPerson(“Nicholas”, 29, “Software Engineer”); var person2 = createPerson(“Greg”, 27, “Doctor”); Object - Simulando POO Linguagens orientadas a objetos tem uma solução melhor: construtoras.
  • 71. function Person(name, age, job){ this.name = name; this.age = age; this.job = job; this.sayName = function(){ alert(this.name); }; } var person1 = new Person(“Nicholas”, 29, “Software Engineer”); var person2 = new Person(“Greg”, 27, “Doctor”); Object - Simulando POO
  • 72. function Person(name, age, job){ this.name = name; this.age = age; this.job = job; this.sayName = function(){ alert(this.name); }; } var person1 = new Person(“Nicholas”, 29, “Software Engineer”); var person2 = new Person(“Greg”, 27, “Doctor”); Object - Simulando POO Um problema: sayName é replicada em todos os objetos
  • 73. function Person(name, age, job){ this.name = name; this.age = age; this.job = job; } Person.prototype.sayName = function(){ alert(this.name); }; var person1 = new Person("Nicholas", 29,"Software Engineer"); var person2 = new Person("Greg", 27, "Doctor"); Console.log (person1.sayName == person2.sayName ) Object - Prototype
  • 74. function Person(name, age, job){ this.name = name; this.age = age; this.job = job; } Person.prototype.sayName = function(){ alert(this.name); }; var person1 = new Person("Nicholas", 29,"Software Engineer"); var person2 = new Person("Greg", 27, "Doctor"); Console.log (person1.sayName == person2.sayName ) Object - Prototype Prototype permite extender as funcionalidades de um objeto, ex: plugins do Jquery
  • 75. Person.prototype = { constructor: Person, sayName: function(){ alert(this.name); } } Object - Prototype
  • 76. Objetos como String e Array, utilizam prototypes para definir seus “métodos”. alert(typeof Array.prototype.sort); alert(typeof String.prototype.substring); Object - Prototype
  • 77. String.prototype.iniciaCom = function (text) { return this.indexOf(text) == 0; }; var msg = "Hello world!"; console.log(msg.iniciaCom("Hello") ); Objetos como String e Array, utilizam prototypes para definir seus “métodos”. Object - Prototype
  • 78. function Pessoa (name) { this._name = name; } Pessoa.prototype = { constructor: Pessoa, getName : function(){ return (this._name); }, setName : function(name){this._name = name; } } var p = new Pessoa ("sergio") console.log (p.getName()) p.setName ("joao") console.log (p.getName()) Getters e Setters
  • 79. function Pessoa (name) { this._name = name; } Pessoa.prototype = { constructor: Pessoa, getName : function(){ return (this._name); }, setName : function(name){this._name = name; } } var p = new Pessoa ("sergio") console.log (p.getName()) p.setName ("joao") console.log (p.getName()) Getters e Setters Compo possso usar “sobrecarga” aqui ?
  • 80. function Pessoa (name) { this._name = name; } Pessoa.prototype = { constructor: Pessoa, getName : function(){ return (this._name); }, setName : function(name){this._name = name; } name : function () { if (arguments[0] && typeof (arguments[0]) == "string") return this.setName (arguments[0]) else return this.getName () } } var p = new Pessoa ("sergio") console.log (p.name()) p.name ("joao") console.log (p.name()) Getters e Setters
  • 81. function Person(name ){ this._name = name; } Person.prototype = { constructor: Person, get name () { return this._name; }, set name (name) { this._name = name } } a = new Person ("jose") console.log (a.name); a.name = "joao" console.log (a.name); Getters e Setters A partir do JavaScript 1.5 (2000), o java script permitiu escrever getter e setters
  • 82. Exemplo em jQuery O método $.fn.html usado como setter $('h1').html('olá mundo'); O método html usado como getter $('h1').html(); Getters e Setters
  • 83. Avalia uma expressão JavaScript. Exemplos: console.log (eval("12*15")) console.log (eval("[12,13]")[0]) console.log (eval("({x:12.5,y:14.3})").x) Eval
  • 84. JSON JSON é um objeto JavaScript no formato de String eval ('( {"skillz": { "web":[ {"name": "html", "years": "5" }, {"name": "css", "years": "3" }], "database":[ {"name": "sql", "years": "7" }] }} )')
  • 85. JSON JSON é um objeto JavaScript no formato de String eval ('( {"skillz": { "web":[ {"name": "html", "years": "5" }, {"name": "css", "years": "3" }], "database":[ {"name": "sql", "years": "7" }] }} )') Problem at line 13 character 19: eval is evil. http://www.jslint.com/
  • 86. Eval is Evil eval (' ( {"evilcode": function(){ window.location="http://dsfsd342d.com"; }() } ) ')
  • 87. Json Criando e parseando JSON p = new Object ({ "nome" : "sergio", "idade" : 30 }) console.log (JSON.stringify (p)) console.log (JSON.parse (JSON.stringify (p))) http://www.json.org/json2.js. Browser mais antigos não inclue esse objeto JSON
  • 88. JSON - Parse Tratando erro var jsonString = "{nao eh um json}”" try { var jsonObj = JSON.parse(jsonString); } catch(e) { console.log("json invalido:", e)
  • 89. JSON - Parse var jsontext = '{"nome":"sergio", "nascimento":"05 Janeiro 1981"}'; var pessoa = JSON.parse(jsontext); var pessoa = JSON.parse(jsontext, function (key, value) { var bDate; if (key == "nascimento") { bDate = new Date(value); return bDate; } return value; });
  • 90. JSON - Stringfy Formatando a saída console.log (JSON.stringify (pessoa, function (key, value) { var bDate; if (key == "nascimento") { bDate = new Date (value) return ( bDate.getDate() +"/"+ bDate.getMonth()+1 +"/"+ bDate.getFullYear() ) } return value; }));
  • 91. Date ●getDate() Retorna um número inteiro entre 1 e 31, que representa o dia do mês do objeto Date. ●getDay() Retorna um número inteiro do dia da semana. Domingo 0, segunda 1, terça 2, etc. ●getFullYear() Retorna o ano do objeto Date em números absolutos, por exemplo 1998. ●getMonth() Retorna o mês do objeto Date, um inteiro entre 0 e 11 (0 janeiro, 1 fevereiro, etc).
  • 93. Compatibilidade ●JavaScript, Jscript, ECMAScript, ActionScript ●ECMAScript é uma linguagem de programação baseada em scripts, padronizada pela Ecma International na especificação ECMA-262. ○http://www.ecma-international.org/publications/files/ECMA-ST /ECMA-262.pdf ●JavaScript, Jscript e ActionScript são dialetos do ECMAScript ○Usando apenas elementos do ECMAScript, você garante compatibilidade. http://www.jslint.com
  • 94. Todos estes conceitos são amplamente utilizados em bibliotecas e frameworks, como o JQuery Closures Funções de primeira Ordem “Sobrecarga” Funções anônimas Objetos
  • 95. $(document).ready(function(){ $("#p1").mouseenter(function(){ $.ajax({ url: "endereco_web", success: function(html){ $("#a1").html(html); }}) }) }) Um exemplo de código em JavaScript Agora identifiquem alguns elementos discutidos nessa apresentação.
  • 97. Boas práticas Códigos legíveis (nome de variáveis...)
  • 98. Boas práticas Códigos legíveis (nome de variáveis...) Variáveis globais
  • 99. Variáveis Globais „ JavaScript's biggest problem is its dependence on global variables, particularly implied global variables. If a variable is not explicitly declared (usually with the var statement), then JavaScript assumes that the variable was global. This can mask misspelled names and other problems.“ ●JSLint
  • 100. Variáveis Globais „ JavaScript's biggest problem is its dependence on global variables, particularly implied global variables. If a variable is not explicitly declared (usually with the var statement), then JavaScript assumes that the variable was global. This can mask misspelled names and other problems.“ ●JSLint Use sempre o var e declare antes de usar
  • 101. Boas práticas Códigos legíveis (nome de variáveis...) Variáveis globais Opte por notações curtas
  • 102. Notações curtas if(v){ var x = v; } else { var x = 10; } È equivalente a: var x = v || 10;
  • 103. Boas práticas Códigos legíveis (nome de variáveis...) Variáveis globais Opte por notações curtas Modularize
  • 104. Modularize ●Modularizar sempre é uma boa prática. Dividir para conquistar. ○Bom exemplo: JQuery
  • 105. Boas práticas Códigos legíveis (nome de variáveis...) Variáveis globais Opte por notações curtas Modularize
  • 106. Boas práticas Códigos legíveis (nome de variáveis...) Variáveis globais Opte por notações curtas Modularize Valide http://www.jslint.com/
  • 107. Validar ●Códigos válidos são códigos que atendem a um consenso.
  • 108. Boas práticas Códigos legíveis (nome de variáveis...) Variáveis globais Opte por notações curtas Modularize Valide http://www.jslint.com/
  • 109. Boas práticas Códigos legíveis (nome de variáveis...) Variáveis globais Opte por notações curtas Modularize Valide http://www.jslint.com/ Use ponto e vírgula
  • 110. Boas práticas Códigos legíveis (nome de variáveis...) Variáveis globais Opte por notações curtas Modularize Valide http://www.jslint.com/ Use ponto e virgula Escopo
  • 111. Escopo Não existe escopo por bloco, apenas por funções. function f(p) { if (p) { var a = 15 } console.log (a) } f(1)
  • 112. Boas práticas Códigos legíveis (nome de variáveis...) Variáveis globais Opte por notações curtas Modularize Valide http://www.jslint.com/ Use ponto e virgula Escopo Use blocos
  • 113. Blocos {} Uso de blocos evita erros, use sempre mesmo onde não é obrigatório. if (condicao) { .. } else { }
  • 114. Boas práticas Códigos legíveis (nome de variáveis...) Variáveis globais Opte por notações curtas Modularize Valide http://www.jslint.com/ Use ponto e virgula Escopo Use blocos
  • 115. Boas práticas Códigos legíveis (nome de variáveis...) Variáveis globais Opte por notações curtas Modularize Valide http://www.jslint.com/ Use ponto e virgula Escopo Use blocos Comprima
  • 116. Boas práticas Códigos legíveis (nome de variáveis...) Variáveis globais Opte por notações curtas ModularizeValide http://www.jslint.co m/ Use ponto e virgula Escop o Use blocos Comprima Eval is Evil
  • 117. Boas práticas Códigos legíveis (nome de variáveis...) Variáveis globais Opte por notações curtas ModularizeValide http://www.jslint.co m/ Use ponto e virgula Escop o Use blocos Comprima Eval is Evil Consultem o jslint