Este documento introduz o JavaScript e fornece uma visão geral de sua história, uso e conceitos-chave. Em particular:
1) Apresenta uma breve história do JavaScript, desde sua criação pela Netscape em 1995 até seu uso atual em milhões de páginas da web.
2) Discutem conceitos importantes como funções, funções anônimas e o uso de funções como parâmetros.
3) Fornece exemplos de como incorporar JavaScript em páginas web usando blocos <script>, arquivos externos e eventos em elementos HTML
3. Eduardo Mendes (edumendes@gmail.com)3
Apesar de já estarem presentes
há várias décadas, pode-se dizer que
só recentemente começaram a ser
usados por milhões de pessoas
no mundo todo
50's
Software
Sistemas de
5. Eduardo Mendes (edumendes@gmail.com)
“ Este enorme e rápido crescimento
no número de usuários de computadores
não poderia ter acontecido
sem o grande avanço na facilidade de uso
e nas técnicas
de interface que se seguiram”
5
(SMEETS, BONESS e BANKRAS, 2009)
6. Eduardo Mendes (edumendes@gmail.com)
O que é riqueza?
“A riqueza de um cliente é
determinada pelo
modelo de interação
que o cliente oferece ao usuário"
6
Experiência do usuário
7. Eduardo Mendes (edumendes@gmail.com)
O que é riqueza?
Um modelo rico de interação oferece
suporte para uma variedade
de métodos de entrada,
que responde intuitivamente
e dentro de um prazo razoável
7
8. Eduardo Mendes (edumendes@gmail.com)
O que é riqueza?
Interação será tanto melhor
quanto mais próxima estiver
de uma geração atualizada
de aplicativos desktop
8
10. Internet
Cientistas do CERN lançaram
uma proposta para a World Wide Web (HTML)
Facilitou o compartilhamento de documentos de pesquisa
Hipertexto + Internet
1989
11. Eduardo Mendes (edumendes@gmail.com)
A Internet e a Web
foram se espalhando e
se tornando populares
11
Originalmente foi criada para que as pessoas
pudessem compartilhar informações, publicando documentos,
e fazer referências cruzadas a eles através de hiperlinks
90's
Entretanto a qualidade das aplicações eram baixas
23. Eduardo Mendes (edumendes@gmail.com)
2. Questões sobre
interface web
2.1 Modularização e Separação de
interesses
2.2 A web é uma só
2.3 Progressive Enhacement
2.4 Web Design Responsivo
23
26. Eduardo Mendes (edumendes@gmail.com)
Separation Of
Concerns (SoC)
Para tratar a complexidade é
melhor se concentrar em um
assunto de cada vez, para melhorar
a compreensão sobre o sistema e
melhorar sua capacidade de
evolução
(DIJKSTRA, 1974)
26
30. Eduardo Mendes (edumendes@gmail.com)30
O que é JavaScript?
Não faz parte das plataformas Java
Destinada para o uso em páginas Web (client-side) ou em servidores web (server-side)
Front-end
JavaScript é uma linguagem interpretada.
31. Eduardo Mendes (edumendes@gmail.com)31
O que posso fazer com JavaScript?
Acesso à elementos de uma página web
Imagens
Elementos de um formulário
Links etc
Manipulados ou mudados via programação
32. Eduardo Mendes (edumendes@gmail.com)32
O que posso fazer com JavaScript?
Capturar eventos
Click do mouse
Tecla pressionada
Outros
Operações baseadas nas ações do usuário.
33. Eduardo Mendes (edumendes@gmail.com)33
Como usar JavaScript?
3 maneiras:
Dentro de blocos HTML
<script> ... </script>
Arquivo externo importado pela página
<script language=“javascript” src=“funcoes.js"></script>
Dentro dos elementos HTML sensíveis a eventos
<input type="text" name="nome" value="" onblur="caixaAlta(this)“ />
34. Eduardo Mendes (edumendes@gmail.com)34
Blocos script
<script language=“javascript”>
... instruções JavaScript ...
</script>
Podem aparecer diversas vezes no código
De preferência dentro das tags <head>
37. Eduardo Mendes (edumendes@gmail.com)37
Importando um arquivo
Código de importação deve vir no <head>
Atributo SRC no descritor <script>
<html>
<head>
<script language=“javascript” src=“funcoes.js"></script>
</head>
<body>
....
<script>
resultado = soma(10, 30);
document.write("<p>A soma de 5 e 6 é " + resultado + “</p>”);
</script>
38. Eduardo Mendes (edumendes@gmail.com)38
Em Elementos HTML
Atributos para captura de eventos disparados
Arrasto de um mouse
Clique de um botão
Quando ocorre um evento
Um procedimento de tratamento do evento é chamado
39. Eduardo Mendes (edumendes@gmail.com)39
Em Elementos HTML
Atributos de eventos
Sempre começam com o prefixo “ON”
onblur, onerror, onfocus, onchange, onclick, onkeydown, onkeypress, onkeyup...
Valores recebidos por esses atributos
Código JavaScript
40. Eduardo Mendes (edumendes@gmail.com)40
Em Elementos HTML
<form>
<input type="button“
value=“Aperte aqui“
onclick="alert(‘Botão Pressionado')“>
</form>
<a href="javascript:alert(‘Link acionado!’)"> link </a>
44. Eduardo Mendes (edumendes@gmail.com)
Funções
44
construindo funções em tempo de execução
function somaDosQuadrados(x, y){
return Math.pow(x,2) + Math.pow(y,2);
}
Está na memória assim que
o programa carrega
var soma = function somaDosQuadrados(x, y){
return Math.pow(x,2) + Math.pow(y,2);
};
A função foi atribuída
à variável soma
45. Eduardo Mendes (edumendes@gmail.com)
Funções
45
construindo funções em tempo de execução
function somaDosQuadrados(x, y){
return Math.pow(x,2) + Math.pow(y,2);
}
Está na memória assim que
o programa carrega
var soma = function somaDosQuadrados(x, y){
return Math.pow(x,2) + Math.pow(y,2);
};
É preciso de um ponto e
vírgula no final da sentença
46. Eduardo Mendes (edumendes@gmail.com)
Funções
46
construindo funções em tempo de execução
function somaDosQuadrados(x, y){
return Math.pow(x,2) + Math.pow(y,2);
}
Está na memória assim que
o programa carrega
var soma = function somaDosQuadrados(x, y){
return Math.pow(x,2) + Math.pow(y,2);
};
Agora a função carrega
apenas quando este código
for alcançado
47. Eduardo Mendes (edumendes@gmail.com)
Funções
47
construindo funções em tempo de execução
function somaDosQuadrados(x, y){
return Math.pow(x,2) + Math.pow(y,2);
}
Está na memória assim que
o programa carrega
var soma = function somaDosQuadrados(x, y){
return Math.pow(x,2) + Math.pow(y,2);
};
Agora a função carrega
apenas quando este código
for alcançado
soma(3,4);
25
48. Eduardo Mendes (edumendes@gmail.com)
Funções
48
construindo funções em tempo de execução
function somaDosQuadrados(x, y){
return Math.pow(x,2) + Math.pow(y,2);
}
A variável precisou de parênteses e ponto e vírgula
var soma = function somaDosQuadrados(x, y){
return Math.pow(x,2) + Math.pow(y,2);
};
O nome da função é opcional,
já que estamos usando uma
variável que já possui um
nome
soma(3,4);
25
49. Eduardo Mendes (edumendes@gmail.com)
Funções Anônimas
49
não precisam ser nomeadas já que possuem uma variável
var soma = function somaDosQuadrados(x, y){
return Math.pow(x,2) + Math.pow(y,2);
};
Funções Anônimas
50. Eduardo Mendes (edumendes@gmail.com)
Funções Anônimas
50
não precisam ser nomeadas já que possuem uma variável
var soma = function (x, y){
return Math.pow(x,2) + Math.pow(y,2);
};
Funções Anônimas
51. Eduardo Mendes (edumendes@gmail.com)
Funções Anônimas
51
não precisam ser nomeadas já que possuem uma variável
var soma = function (x, y){
return Math.pow(x,2) + Math.pow(y,2);
};
Funções Anônimas
Sem nome
soma(3,4);
25
Ainda precisa de parênteses e ponto e vírgula
55. Eduardo Mendes (edumendes@gmail.com)
Funções como parâmetros
55
var mensagemFinal = function() {
alert("Fim de Jogo! Obrigado por participar!");
}
uma variável que armazena uma função pode ser passada para outras funções
56. Eduardo Mendes (edumendes@gmail.com)
Funções como parâmetros
56
var mensagemFinal = function() {
alert("Fim de Jogo! Obrigado por participar!");
}
...
encerrarJogo(mensagemFinal);
A variável mensagemFinal
é passada como parâmetro
para uma função existente
uma variável que armazena uma função pode ser passada para outras funções
57. Eduardo Mendes (edumendes@gmail.com)
Funções como parâmetros
57
var mensagemFinal = function() {
alert("Fim de Jogo! Obrigado por participar!");
}
...
encerrarJogo(mensagemFinal);
A variável mensagemFinal
é passada como parâmetro
para uma função existente
uma variável que armazena uma função pode ser passada para outras funções
function encerrarJogo(mensagem) {
...
mensagem();
...
}
58. Eduardo Mendes (edumendes@gmail.com)
Funções como parâmetros
58
var mensagemFinal = function() {
alert("Fim de Jogo! Obrigado por participar!");
}
...
encerrarJogo(mensagemFinal);
uma variável que armazena uma função pode ser passada para outras funções
function encerrarJogo(mensagem) {
...
mensagem();
...
}
function encerrarJogo(mensagem) {
...
mensagem();
...
}
59. Eduardo Mendes (edumendes@gmail.com)
Funções como parâmetros
59
var mensagemFinal = function() {
alert("Fim de Jogo! Obrigado por participar!");
}
...
encerrarJogo(mensagemFinal);
uma variável que armazena uma função pode ser passada para outras funções
function encerrarJogo(mensagem) {
...
mensagem();
...
}
function encerrarJogo( ) {
...
mensagem();
...
}
60. Eduardo Mendes (edumendes@gmail.com)
var mensagemFinal = function() {
alert("Fim de Jogo! Obrigado por participar!");
}
...
encerrarJogo(mensagemFinal);
function encerrarJogo(mensagemFinal) {
...
mensagem();
...
}
Funções como parâmetros
60
uma variável que armazena uma função pode ser passada para outras funções
function encerrarJogo(mensagem) {
...
mensagem();
...
}
61. Eduardo Mendes (edumendes@gmail.com)
var mensagemFinal = function() {
alert("Fim de Jogo! Obrigado por participar!");
}
...
encerrarJogo(mensagemFinal);
function encerrarJogo(mensagemFinal) {
...
mensagemFinal();
...
}
Funções como parâmetros
61
uma variável que armazena uma função pode ser passada para outras funções
function encerrarJogo(mensagem) {
...
mensagem();
...
}
62. Eduardo Mendes (edumendes@gmail.com)
var mensagemFinal = function() {
alert("Fim de Jogo! Obrigado por participar!");
}
...
encerrarJogo(mensagemFinal);
function encerrarJogo(mensagemFinal) {
...
mensagemFinal();
...
}
Funções como parâmetros
62
uma variável que armazena uma função pode ser passada para outras funções
function encerrarJogo(mensagem) {
...
mensagem();
...
}
63. Eduardo Mendes (edumendes@gmail.com)
var mensagemFinal = function() {
alert("Fim de Jogo! Obrigado por participar!");
}
...
encerrarJogo(mensagemFinal);
function encerrarJogo(mensagemFinal) {
...
mensagemFinal();
...
}
E se houvesse várias mensagens?
63
É possível ter flexibilidade com essa estrutura e escolher uma mensagem específica
function encerrarJogo(mensagem) {
...
mensagem();
...
}
64. Eduardo Mendes (edumendes@gmail.com)
function encerrarJogo(mensagem) {
mensagem();
}
var mensagemFinal;
if (vencedor) {
mensagemFinal = function() {
alert("Você venceu! Batata frita!");
};
} else {
mensagemFinal = function() {
alert("Que pena! Tente mais uma vez!");
};
}
encerrarJogo(mensagemFinal);
E se houvesse várias mensagens?
64
É possível ter flexibilidade com essa estrutura e escolher uma mensagem específica
var vencedor = false;
65. Eduardo Mendes (edumendes@gmail.com)
function encerrarJogo(mensagem) {
mensagem();
}
var mensagemFinal;
if (vencedor) {
mensagemFinal = function() {
alert("Você venceu! Batata frita!");
};
} else {
mensagemFinal = function() {
alert("Que pena! Tente mais uma vez!");
};
}
encerrarJogo(mensagemFinal);
E se houvesse várias mensagens?
65
É possível ter flexibilidade com essa estrutura e escolher uma mensagem específica
var vencedor = true;
66. Eduardo Mendes (edumendes@gmail.com)
Utilizando funções arrays e map
66
var numeros = [2, 4, 5, 6, 7, 8, 9];
uma variável que armazena uma função pode ser passada para outras funções
var resultados = numeros.map( );- outra função -
o método map recebe uma
função e retorna um array
processado pela função
2 4 5 6 7 8 9
outro valor outro valor outro valor outro valor outro valor outro valor outro valor
- outra função -
67. Eduardo Mendes (edumendes@gmail.com)
Utilizando funções arrays e map
67
var numeros = [2, 4, 5, 6, 7, 8, 9];
Map funciona com um laço que executa sobre cada índice do array
var resultados = numbers.map( );- outra função -
var resultados = [];
for (var i = 0; i < numeros.length; i++) {
resultados[i] = algumaFuncao(numeros[i]);
}
o método map encapsula este
processamento e o resume
em uma linha de código
68. Eduardo Mendes (edumendes@gmail.com)
Utilizando funções arrays e map
68
var numeros = [2, 4, 5, 6, 7, 8, 9];
Map funciona com um laço que executa sobre cada índice do array
var resultados = numeros.map(function(celula) {
return celula * 2;
}
);
2 4 5 6 7 8 9
4 8 10 12 14 16 18
- função -
70. Eduardo Mendes (edumendes@gmail.com)
Objetos em
JavaScript
Uma entidade independente com
propriedades e tipo
como em outras linguagens as
propriedades são acessadas pela
notação do ponto
70
variavel
Objeto
idade=10
variavelDoObjeto.nomeDaPropriedade o.idade
71. Eduardo Mendes (edumendes@gmail.com)
Criando objetos
71
var carro = new Object();
carro.fabricante = "KIA";
carro.modelo = "Picanto";
carro.ano = 2012;
carro["fabricante"] = "Volks";
carro["modelo"] = "Gol";
carro["ano"] = 2013;
pode ser utilizado como
um array associativo
75. Eduardo Mendes (edumendes@gmail.com)
Métodos
75
variavelDoObjeto.nomeDoMetodo =
nome_funcao;
São funções associadas a um objeto…
ou é uma propriedade de um objeto
que é uma função
um método é uma função atribuída
a uma propriedade do objeto
var meuObjeto = {
meuMetodo: function(params) {
// algum comportamento
}
};