Comecando Com JavaScript - 30 at Guto Xavier
Comecando Com JavaScript - 30 at Guto Xavier
Guto Xavier
Copyright © 2019 Guto Xavier. Todos os direitos reservados. Este ebook ou qualquer
parte dele não pode ser reproduzido ou usado de forma alguma sem autorização
expressa, por escrito, do autor ou editor, exceto pelo uso de citações breves em uma
resenha do ebook.
Versão 2019.4.21
● Correção da missão do dia 7.
● Acréscimo de link para responder o Quiz JavaScript da missão do dia 26.
● Acréscimo das respostas do Quiz JavaScript da missão do dia 26.
Sobre o autor
Guto Xavier possui mais de 10 anos de experiência no ensino de tecnologias para
diferentes públicos, além da experiência com desenvolvimento de sistemas. Atualmente
exerce a atividade de consultor em projetos para internet e docente em cursos de
programação de sistemas e jogos. Em sua carreira, teve passagens por empresas de
diferentes portes e segmentos, desde multinacionais do ramo automobilístico até startups
da área imobiliária.
Sobre o autor
Introdução
Dia 1 - Missão: Pedir o nome e a idade do usuário e escrever essas informações de uma forma amigável.
Dia 2 - Missão: Realizar contas no console.
Dia 3 - Missão: Calcular a média de venda à partir dos valores vendidos em cada um dos meses do 1º Trim de
2018 de um vendedor
Dia 4 - Missão: Validar se um candidato pode ou não iniciar o processo de CNH
Dia 5 - Missão: Verificar se é dia, tarde ou noite e mostrar uma mensagem personalizada.
Dia 6 - Missão: Calcular as horas extras de um funcionário a partir das horas semanais trabalhadas.
Considerar a carga horária do funcionário de 44 horas por semana.
Dia 7 - Missão: Exibir dia da semana por extenso.
Dia 8 - Missão: Efetuar uma das 4 operações matemáticas básicas.
Dia 9 - Missão: Verificando confirmação para o usuário.
Dia 10 - Missão: Melhorando nossa produtividade.
Dia 11 - Missão: Exibindo uma mensagem várias vezes.
Dia 12 - Missão: Calcular a média de N alunos.
Dia 13 - Missão: Calcular a média de N números.
Dia 14 - Missão: Criar um contador.
Dia 15 - Missão: Armazenando lista de carros de um estacionamento
Dia 16 - Missão: Adicionando e removendo elementos da lista de carros
Dia 17 - Missão: Era uma vez o JavaScript
Dia 18 - Missão: Dicionário de animais
Dia 19 - Missão: Dicionário de animais
Dia 20 - Missão: Exibir os alunos de uma lista
Dia 21 - Missão: Criando uma agenda de contatos
Dia 22 - Missão: Escrevendo na tela
Dia 23 - Missão: Refinando nosso cálculo de média
Dia 24 - Missão: Tornando a cálculo da média reutilizável
Dia 25 - Missão: Abrindo site de notícias
Dia 26 - JavaScript Quiz
Dia 27 - Missão: Abrindo qualquer site
Dia 28 - Missão: Acréscimo e desconto
Dia 29 - Missão: Classificação de filmes
Dia 30 - Missão: CONCLUÍDA COM SUCESSO
Sobre as versões anteriores
2019.4.3
Correção de blablabla
Introdução
#30DaysOfCode
Objetivos:
- melhorar a lógica
- aprender uma linguagem de programação
- aplicar os conceitos de lógica de programação na prática
Esse livro não irá te ensinar a programar em 30 dias!
A ideia desse livro é do leitor se desafiar durante 30 dias, executando uma missão por
dia. Esse desafio é conhecido como 30 dias de código. Ao fim das leituras e práticas,
esperamos que o estudante esteja criando pequenos programas e tendo compreensão dos
códigos digitado.
Para esse projeto, foram criadas missões guiadas, ou seja, um guia passo-à-passo do que
deverá ser feito, sempre comentado e detalhado. Estas missões foram escritas levando
em consideração que o estudante realize ao menos uma por dia na ordem proposta. O
tempo de dedicação por missão varia de pessoa para pessoa, mas as soluções levam em
média 20 minutos.
Seria extremamente útil que o estudante registre os problemas que tiver e como
encontrou a solução, uma espécie de diário, às vezes os problemas podem reaparecer e
isso evitaria errar a mesma coisa. Outra sugestão é registrar suas dúvidas para medir sua
evolução.
Para entender mais sobre esse projeto (inspirado em #100DaysOfCode) leia os artigos
dos links
https://medium.com/gdgcampinas/100daysofcode-o-que-eu-aprendi-em-20-dias-
1a65f4d8ad3f
https://medium.com/@JCSerraCampos/100diasdecodigo-c8c1c912907a
https://medium.com/@barbaraknupp/hello-world-100-dias-de-c%C3%B3digo-
ab8153165b81
Dia 1 - Missão: Pedir o nome e a idade do usuário e
escrever essas informações de uma forma amigável.
Objetivo:
● Conhecer o console
● Trabalhar comandos de entrada e saída de dados do JavaScript
Descrição:
Abra o navegador Google Chrome, com o navegador aberto, aperte a tecla F12 (do
teclado). Irá aparecer algo parecido com a imagem a seguir:
Observação: Caso a Web Dev Tools não esteja do lado de baixo e você queira deixar ela
assim você pode clicar nos 3 pontos no fim dela e escolher como ela vai ficar:
Click na aba Console do Web Dev Tools:
No console digite o comando clear(); depois pressione enter para executar o comando. O
comando clear(); irá limpar o console:
Sempre que quiser limpar o console você pode executar o comando clear.
O comando prompt produz essa caixa para que o usuário possa entrar com informações.
No caso, foi criado uma variável chamada nome e o valor informado pelo usuário será
armazenado nesta variável.
Continue com o código
Exibindo os dados
Após ter pedido o usuário as informações nome e idade, chegou o momentos de exibir
essas informações. Digite os seguintes códigos:
console.log("Seu nome é");
console.log(nome);
O comando console.log() exibe no console do navegador o que estiver entre aspas ( “ ” )
ou o conteúdo da variável, no caso a variável nome. Ele está exibindo em duas linhas,
caso você queira exibir tudo em uma linha só pode executar o seguinte comando.
alert("Seja bem vindo " + nome + "!!! Você tem " + idade + " anos.");
O comando alert() produz uma caixa de mensagem similar a do comando prompt(), com
a diferença de que a do alert é apenas para saída de dados.
O código inteiro ficou assim:
Faça experimentos em cima desse exemplo, incremente ele pedindo outras informações
como data de nascimento ou endereço e mude suas mensagens e formas de exibição.
Dia 2 - Missão: Realizar contas no console.
Objetivo:
Descrição:
Operadores aritméticos
O console permite que você realize contas, execute os comandos abaixo e veja os
resultados.
● + → adição
● - → subtração
● / → Divisão
● * → Multiplicação
Operadores relacionais
Operações utilizando os operadores relacionais retornam sempre true ou false, execute
os comandos abaixo para ver um exemplo:
Agora que você sabe que tem uma calculadora no seu navegador crie suas contas e
exemplos para praticar, crie contas mais complexas para ver o comportamento e
resultado das contas. Exemplo:
● Declarar variáveis
● Conversão de valores
Descrição:
Variáveis
No Javascript a declaração de variáveis não é obrigatória, porém muito recomendada.
Digite o código abaixo para entender:
valor1;
Ao digitar valor1; será exibido um erro dizendo que não está definido.
Esse erro acontece porque não declaramos essa variável. Execute o comando abaixo para
declarar a variável valor1:
var valor1;
E agora digite novamente o nome da variável no console:
valor1;
Dessa vez não existiu o erro, porém foi informado a mensagem undefined que significa
que essa variável está indefinida, sem um valor. Vamos atribuir um valor à essa variável:
valor1 = 50;
valor1;
Observe que agora, após de você digitar apenas o nome da variável foi exibido o valor
50. O operador de atribuição é o = (igual), quando você utiliza o igual ele pega o que
tiver do lado direito e atribui ao que estiver ao lado esquerdo do operador (Ex: valor1 =
50).
valor2 = 100;
valor2;
Nessa linha estamos declarando a variável e já inserindo um valor dentro dela, o que
também é possível. Afim de boas práticas recomenda-se sempre utilizar o var para
definir suas variáveis, juntas ou separadas. Exemplo:
var valor1;
var valor2;
OU
OU
Missão
Quando você entra com dados utilizando o comando prompt esses valores são
armazenados como string(texto), o comando parseFloat(); converte os valores para ponto
flutuante (número decimal);
console.log("A média de vendas do " + vendedor + " no 1º trim foi " + media);
alert("A média de vendas do " + vendedor + " no 1º trim foi " + media);
O código inteiro fica assim:
Bem com isso mude o exemplo, exiba o total de vendas do primeiro trimestre, peça
informações referentes ao segundo trimestre também, crie seus exemplos.
Dia 4 - Missão: Validar se um candidato pode ou não
iniciar o processo de CNH
Objetivo:
Descrição:
Estrutura de decisão
No Javascript temos algumas estruturas de decisão, nesse momento vamos conhecer o if
(se). Digite os códigos abaixo para testar:
Observação: para digitar como está no if utilize shift + enter para mudar de linha e o
comando não ser executado.
if ( condição ) {
instruções se a condição for verdadeiro
}else{
instruções se a condição for falsa
}
Nesse exemplo será exibida a mensagem “Mais uma vez” pois será executado os
comandos no bloco verdadeiro do if pois a variável continuar possui um valor igual à
“sim”.
Missão
Vamos primeiro pedir que o usuário digite o nome do candidato e a idade do candidato:
Agora vamos verificar se o candidato está apto a iniciar o processo e informar o usuário
disso:
Missão concluída, agora crie seus exemplos como por exemplo perguntar para o usuário
se ele é casado ou solteiro e personalizar a mensagem de acordo com a resposta.
Dia 5 - Missão: Verificar se é dia, tarde ou noite e mostrar
uma mensagem personalizada.
Objetivo:
Descrição:
Objeto Date
Antes de tudo, precisamos declarar uma variável e descobrir a hora. Para isso iremos
criar um objeto date. Digite o código abaixo:
var dataCompleta;
dataCompleta = new Date;
Na variável dataCompleta foi criado uma instância do objeto chamado Date. Através do
objeto Date podemos pegar todas as informações da data completa como dia, mês, ano,
hora, minuto, segundo. Digite os exemplos abaixo para ver o funcionamento:
Missão
Iremos personalizar a mensagem que iremos mostrar ao usuário, para isso iremos
considerar que até antes do meio dia será “bom dia”, que até antes das 18 será “ boa
tarde” e antes da 00:00 será “boa noite”.
Criar uma variável para armazenar a data completa e uma variável para armazenar
apenas à hora atual:
var dataCompleta;
var horaAtual;
Descrição:
Missão
Iremos calcular em quantas horas o funcionário excedeu de sua carga horária semanal, as
horas excedidas são as horas extras. Exemplo: O funcionário Pedro tem uma carga
horária semanal de 44 horas, mas ele trabalhou 50 horas nesta semana, logo, Pedro fez 6
horas extras.
Para deixar mais completo nosso sistema, vamos verificar também se o funcionário está
“devendo” horas. Por exemplo, se Pedro tem uma carga horária de 44 horas mas essa
semana trabalhou 40, ele está com 4 horas negativas.
Vamos criar as variáveis para armazenar a carga horária semanal do funcionário, o saldo
de horas, e, uma para armazenar as horas semanais trabalhadas. Essa última informação
deve ser informado pelo usuário. Digite:
Agora, em cima do saldo de horas vamos fazer as verificações. Se o saldo de horas for
positivo ( >0 ), significa que existem horas extras. Se for negativo ( <0 ), significa que o
usuário trabalhou menos do que sua carga horária, e está em débito. Se nada disso
acontecer significa que as horas trabalhadas e a carga horária semanal são iguais, por
isso não existe nem horas extras nem horas em débito. Digite:
alert("O funcionário está devendo " + (saldoHoras * -1) + " hora(s) nesta semana.");
Bem, agora crie seus exemplos, faça por exemplo ao invés de utilizar a carga horária
semanal utilize a carga horária mensal do funcionário, solicite o nome do funcionário,
etc.
Dia 7 - Missão: Exibir dia da semana por extenso.
Objetivo:
Descrição:
Nas missões anteriores utilizamos a estrutura de decisão if(se), porém ela não é a única
estrutura de decisão existente. Vamos relembrar a estrutura de decisão if, digite:
Missão
Nossa missão é verificar qual dia é hoje(da semana) e escrever por extenso. Exemplo:
Hoje é segunda-feira.
Primeiro vamos criar variáveis para para armazenar a o objeto date, o dia da semana em
número e o dia da semana por extenso. Digite:
Agora vamos fazer a verificação para preencher a variável do dia da semana por extenso.
Digite:
switch(diaDaSemana){
case 1:
diaDaSemanaExtenso = "domingo";
break;
case 2:
diaDaSemanaExtenso = "segunda-feira";
break;
case 3:
diaDaSemanaExtenso = "terça-feira";
break;
case 4:
diaDaSemanaExtenso = "quarta-feira";
break;
case 5:
diaDaSemanaExtenso = "quinta-feira";
break;
case 6:
diaDaSemanaExtenso = "sexta-feira";
break;
default:
diaDaSemanaExtenso = "sábado";
break;
}
Descrição:
Missão
Vamos efetuar um cálculo à partir de dois valores informados pelo usuário e de acordo
com a operação escolhida pelo usuário. Vamos pedir os valores e a operação. Digite:
Agora vamos verificar qual operação foi escolhida e executar a operação. Digite:
switch(operacao){
case "+":
resultado = parseFloat(numero1) + parseFloat(numero2);
break;
case "-":
resultado = parseFloat(numero1) - parseFloat(numero2);
break;
case "*":
resultado = parseFloat(numero1) * parseFloat(numero2);
break;
case "/":
resultado = parseFloat(numero1) / parseFloat(numero2);
break;
default:
alert("Operação inválida");
break;
}
Descrição:
Confirm
O comando confirm cria uma janela parecida com o prompt, porém nesta janela existem
apenas dois botões: OK e Cancelar. Digite:
Se você clicar no botão “OK” o retorno será true, se clicar no botão “Cancelar” o
retorno será false. Podemos armazenar esse retorno em uma variável. Digite:
var decisao = confirm("Deseja salvar o arquivo?");
decisao;
Missão
Vamos fazer uma pergunta para o usuário utilizando o comando confirm e de acordo
com o botão que ele pressionar vamos mostrar uma mensagem.
Primeiro, vamos criar a variável que vai armazenar o resultado do comando confirm e já
escrever este comando também. Digite:
var continuar = var continuar = confirm("Deseja continuar a operação?");
Agora, vamos verificar qual foi o botão pressionado utilizando a estrutura de decisão if e
de acordo com o botão exibir a mensagem. Digite:
if(continuar == true){
console.log("Você clicou no botão OK. Vamos continuar a operação.");
}else{
console.log("Você clicou no botão CANCELAR. Vamos cancelar a operação.");
}
Descrição:
Tudo o que fizemos até agora nas outras missões fizemos no console do navegador o
Google Chrome, o que é muito bom pois para começar a programar foi bem simples.
Uma das piores coisas em praticar no console é que ele não salva nada, então ao fechar o
navegador, ou mesmo atualizar a janela, aquilo que você digitou era perdido. Nesse
momento é hora de melhorar nosso ambiente de trabalho e instalar uma IDE para
podermos salvar nossos códigos.
Dentre essas que são mais simples, talvez as mais famosas sejam:
● Notepad++
● Visual Studio Code
● Atom
● Sublime Text
● Brackets
Notepad++
Visual Studio Code
Atom
Sublime Text
Brackets
Basicamente, todos esses editores são muito parecidos entre si, a grande mudança entre
eles são exatamente os plugins e extensões disponíveis para cada um. Plugins e
extensões são as funções adicionais desenvolvidas para esses editores, essas funções
podem ser desenvolvidas por qualquer pessoa da comunidade e não apenas funcionários
das empresas.
Missão
Durante nossas missões irei utilizar o Visual Studio Code como IDE padrão para realizar
as atividades a partir desse momento.
Ao abrir o VS Code você já verá as janelas para instalar o pacote para português (Brazil)
disponível. Como estamos iniciando nosso estudo em programação, se quiser, pode
instalar a tradução, eu não recomendo, vou utilizar em inglês.
Pressione CTRL+N (ou click em File → New File ) para criar um novo arquivo,
observe que ele criou uma nova aba chamada Untitled-1.
Digite:
<script>
Todo nosso código JavaScript deverá ficar entre as tag’s <script></script>. Click entre
as tag’s script e insira algumas linhas em branco:
Agora sua vez de praticar, escolha algumas (ou todas) das missões anteriores e crie
arquivos separados no VS Code (Missao1.html, Missao2.html, Missao3.html, etc) e
realize-as utilizando o VS Code.
Dia 11 - Missão: Exibindo uma mensagem várias vezes.
Objetivo:
Descrição:
O laço de repetição permite que você repita uma série de instruções até a condição para
o laço se tornar falsa. Veja o exemplo a seguir, digite no VS Code dentro da tag script:
<script>
var contador = 1;
while( contador <= 5 ){
console.log("Bom dia");
contador = contador + 1;
}
</script>
Salve o arquivo e abra o arquivo no Google Chrome, abra o console e veja o resultado:
Primeiro temos var contador = 1; nessa linha declaramos uma variável que vai servir
para controlar quantas vezes o laço de repetição foi executado. A cada vez que o laço
executar, na última linha dentro do laço existe o comando contador = contador + 1; que
acrescenta mais um à essa variável de controle. Essa variável começa o programa
valendo 1, mas depois de executar o laço uma vez ela vale 2, e depois 3 e assim
sucessivamente.
Depois temos while( contador <= 5 ){ aqui é a condição que deve ser satisfeita para que
os comandos dentro do laço sejam executados. O contador começa valendo 1, como 1 é
menor ou igual à 5 ele entra no laço e realiza um loop, a cada loop aumenta 1 no valor
da variável contador, depois de 5 loops o contador tem o valor de 6, o que faz com que a
condição seja falsa e o laço de repetição não seja mais executado.
Vamos criar uma outra situação, tipo eu quero uma contagem regressiva, começando em
10 e depois que chegar a zero apareça a mensagem “OLHA A EXPLOSÃO!”. Volte ao
VS Code e altere o código para esse:
<script>
var contador = 10;
while(contador >= 0){
console.log("..... " + contador + " ......");
contador = contador - 1;
}
console.log("OLHA A EXPLOSAO!");
</script>
Salve seu arquivo e abra ele no Google Chrome novamente e veja o resultado:
Missão
Abra o VS Code, aperte CTRL+N para criar um arquivo novo, aperte CTRL+S e salve o
arquivo com o nome de Missao11.html
A missão consiste em repetir uma mesma frase uma certa quantidade de vezes. Nós já
fizemos isso no exemplo sobre laço de repetição, para essa missão vamos perguntar para
o usuário quantas vezes ele quer repetir a mensagem.
Vamos criar uma variável para ser nosso contador e perguntar quantas vezes ele deseja
repetir a mensagem. Digite:
var contador = 1;
var numeroRepeticao = prompt("Informe o numero de vezes que a mensagem deve
aparecer", "Digite aqui");
Descrição:
<script>
</script>
Missão
Declare as variáveis que irão armazenar o nome, as notas e a média do aluno. Digite:
Agora, declare a variável que vai armazenar a resposta do usuário que será um true ou
false. Nós vamos inicializar ela com true para entrar no laço de repetição pelo menos a
primeira vez. Digite:
while(resposta==true){
nome = prompt("Informe o nome do aluno(a)","Digite aqui");
nota1 = prompt("Informe a nota do 1º bimestre","Digite aqui");
nota2 = prompt("Informe a nota do 2º bimestre","Digite aqui");
nota3 = prompt("Informe a nota do 3º bimestre","Digite aqui");
nota4 = prompt("Informe a nota do 4º bimestre","Digite aqui");
media = (parseFloat(nota1) + parseFloat(nota2) + parseFloat(nota3) +
parseFloat(nota4))/4;
alert("O(A) estudande " + nome + " obteve a media " + media);
resposta = confirm("Calcular a media de outro aluno?");
}
Descrição:
<script>
</script>
Missão
Nosso programa vai calcular a média de quantos números o usuário quiser digitar.
Relembrando o cálculo da média é a SOMA DE TODOS OS NÚMEROS DIVIDIDO
PELA QUANTIDADE DE NÚMEROS. Por exemplo, se eu tenho 3 números, a média é
a soma desses 3 números dividido por 3.
Primeiro, vamos declarar as variáveis que irão armazenar a quantidade de números que o
usuário digitou, a variável que vai armazenar se o usuário irá inserir um novo número, a
variável que irá armazenar a média, a variável que vai armazenar a soma total dos
números digitados e por último a variável que vai armazenar o número atual digitado.
Digite:
var quantidadeNumeros = 0;
var novoNumero = "S";
var media = 0;
var somaNumeros = 0;
var numero = 0;
Agora vamos criar o laço de repetição, onde dentro do laço terão as instruções
perguntando o número novo, somando esse novo número ao total já existente,
aumentando em 1 a quantidade de números digitados e perguntando se o usuário deseja
digitar mais um número. Digite:
while(novoNumero == "S"){
numero = prompt("Informe um numero","Digite aqui!");
somaNumeros = parseFloat(somaNumeros) + parseFloat(numero);
quantidadeNumeros = quantidadeNumeros + 1;
novoNumero = prompt("Deseja informar mais um numero? \n[S]im\n[N]ao");
}
<script>
var quantidadeNumeros = 0;
var novoNumero = "S";
var media = 0;
var somaNumeros = 0;
var numero = 0;
while(novoNumero == "S"){
numero = prompt("Informe um numero","Digite aqui!");
somaNumeros = parseFloat(somaNumeros) + parseFloat(numero);
quantidadeNumeros = quantidadeNumeros + 1;
novoNumero = prompt("Deseja informar mais um numero? \n[S]im\n[N]ao");
}
media = somaNumeros / quantidadeNumeros;
</script>
Salve o arquivo e abra no Google Chrome para ver o resultado, não esqueça de abrir o
console.
Dia 14 - Missão: Criar um contador.
Objetivo:
Descrição:
<script>
</script>
Missão
contador = contador + 1;
contador = contador - 1;
Porém existem operadores específicos para incrementar (+1) e decrementar (-1) valores,
são os operadores ++ e -- e são eles que utilizaremos nessa missão.
Primeiro vamos declarar as duas variáveis que vão servir como contadores, uma que
deverá aumentar e outra que deverá diminuir. Digite:
var contador = 0;
var contador2 = 10;
Agora crie o laço de repetição que deve mostrar de 0 à 10, aumentando de um por um
por causa da instrução contador++. Digite:
alert("Vamos aumentar");
while(contador <= 10){
console.log(contador);
contador++;
}
Agora crie o laço de repetição que deve mostrar de 10 à 0, diminuindo de um por um por
causa da instrução contador2--. Digite:
alert("Vamos diminuir");
while(contador2 >= 0){
console.log(contador2);
contador2--;
}
<script>
var contador = 0;
var contador2 = 10;
alert("Vamos aumentar");
contador++;
}
alert("Vamos diminuir");
contador2--;
}
</script>
Salve o arquivo e abra no Google Chrome para ver o resultado, não esqueça de abrir o
console.
Dia 15 - Missão: Armazenando lista de carros de um
estacionamento
Objetivo:
● Utilizando Array
● Laço de repetição(while)
Descrição:
<script>
</script>
Array
Array é um tipo de variável(não confundir com tipo de dados) utilizado para armazenar
múltiplos valores. A grande característica do array é que ele pode ter subdivisões
endereçadas(índice) e em cada uma dessas subdivisões armazenar um valor diferente.
Por exemplo, vamos imaginar que você precise guardar o nome de 5 alunos,
normalmente, com o que aprendemos até aqui você faria da seguinte forma, digite:
console.log(aluno1);
console.log(aluno2);
console.log(aluno3);
console.log(aluno4);
console.log(aluno5);
Salve seu arquivo e abra no Google Chrome para visualizar o resultado que estará no
console:
Dessa forma conseguimos produzir o resultado esperado, que era armazenar o nome dos
alunos e exibi-los posteriormente. Mas será que essa é a melhor maneira? Até aqui é a
maneira possível, portanto, a melhor maneira dentro do que aprendemos.
Array na prática
Um pouco mais acima está escrito que “array é um tipo de variável utilizado para
armazenar múltiplos valores” vamos ver o funcionamento de array na prática para
resolver nosso problema.
Para criarmos um array a sintaxe é:
Vamos substituir as 5 primeiras linhas do código que criamos, onde foram declaradas as
variáveis, por uma linha apenas. Digite:
As variáveis aluno1, aluno2, aluno3, aluno4 e aluno5 foram substituídas pela variável
alunos. A variável alunos é um array que contém todos os nomes dos alunos, ou seja
contém um conjunto de valores.
O array alunos contém 5 valores, logo falamos que ela contém 5 posições. Para acessar
cada uma das posições utilizamos um índice. Esse índice inicia em 0. Observe a tabela
abaixo:
0 1 2 3 4
Maria Rose Claudio Renata Fernando
Se eu quiser trocar o nome da Renata por Renato eu preciso acessar a posição 3 do array
alunos e substituir o valor. Digite:
alunos[3] = "Renato";
Para mostrar cada nome disponível no array alunos basta eu utilizar o comando
console.log utilizando cada uma das posições do array alunos. Digite:
console.log(alunos[0]);
console.log(alunos[1]);
console.log(alunos[2]);
console.log(alunos[3]);
console.log(alunos[4]);
Veja que nosso código já está menor do que o anterior, e também mais performático,
pois ao invés de utilizarmos 5 variáveis na memória estamos utilizando apenas uma.
var contador = 0;
while(contador<=4){
console.log(alunos[contador]);
contador++;
}
Primeira versão:
Missão
Crie um arquivo novo no VS Code, aperte CTRL+S e salve o arquivo com o nome de
Missao15.html e já digite:
<script>
</script>
Agora crie o laço de repetição responsável por popular o array carros com os modelos
dos carros. Digite:
while(contador<=4){
carros[contador] = prompt("Informe o modelo do carro nº " + contador , "Digite
aqui");
contador++;
}
Agora vamos zerar novamente a variável contador para que ela possa ser utilizada para
criar um outro loop. Digite:
contador = 0;
Por fim, vamos criar o laço de repetição responsável por exibir os carros no console.
Digite:
● Utilizando Array
● Métodos do Array
Descrição:
<script>
</script>
Missão
Vamos criar uma lista de carros e manipular os elementos delas, removendo carros
existentes e adicionando novos.
Primeiro vamos criar o array com a lista de carros. Digite:
0 1 2 3 4 5
Uno Gol Celta Civic Palio Siena
Temos então um array com 6 posições que possui índices de 0 à 5.
Uma forma que podemos fazer para visualizar o conteúdo deste array é utilizar o
comando console.dir. Digite:
console.dir(carros);
Salve o arquivo e abra no Google Chrome para ver o resultado, não esqueça de abrir o
console para ver o resultado que será algo como:
carros[3] = "Fit";
console.dir(carros);
Salve o arquivo e abra no Google Chrome para ver o resultado, não esqueça de abrir o
console para ver o resultado que será algo como:
Observe que da primeira exibição para a segunda o valor da posição 3 foi alterado.
O código inteiro até o momento é:
<script>
var carros = ["Uno" , "Gol" , "Celta" , "Civic" , "Palio" , "Siena" ];
console.dir(carros);
carros[3] = "Fit";
console.dir(carros);
</script>
carros.pop();
<script>
var carros = ["Uno" , "Gol" , "Celta" , "Civic" , "Palio" , "Siena" ];
console.dir(carros);
carros[3] = "Fit";
carros.pop();
console.dir(carros);
</script>
O método pop do array remove o último elemento do array. Salve e abra seu arquivo no
navegador para ver algo parecido com isso:
Observe que agora a primeira exibição do array possui 6 posições e a segunda 5, pois
entre as exibições foi aplicado o método pop. Click nas setinhas para expandir e ver o
conteúdo dos arrays:
Agora vamos inserir mais dois valores no array carros, vamos inserir “Agile” e
“Sandero”. Logo depois da linha do comando “pop” digite:
carros.push("Agile");
carros.push("Sandero");
<script>
var carros = ["Uno" , "Gol" , "Celta" , "Civic" , "Palio" , "Siena" ];
console.dir(carros);
carros[3] = "Fit";
carros.pop();
carros.push("Agile");
carros.push("Sandero");
console.dir(carros);
</script>
Salve e abra seu arquivo no navegador para ver algo parecido com isso:
O método push insere um valor ao final do array. Veja que a primeira exibição do array
possui 6 posições, e a segunda 7, entre a primeira e a segunda foi aplicado o método
pop, que removeu uma posição fazendo nosso array ficar com 5 posições e depois
aplicado duas vezes o método push, fazendo o array ficar com 7 posições.
Dia 17 - Missão: Era uma vez o JavaScript
Objetivo:
https://www.youtube.com/watch?v=jXPU0uAzmYY
Dia 18 - Missão: Dicionário de animais
Objetivo:
● Array
● Laço de repetição
● Estrutura de decisão
Descrição:
<script>
</script>
Missão
Vamos criar um programa onde o usuário escolhe um animal e são exibidas algumas
informações sobre esse animal.
Vamos declarar as variáveis que vão controlar a exibição, armazenar a opção do animal a
ser exibido e o array que vai armazenar as informações dos animais. Digite:
A linha var animais = new Array(4); cria um array chamado animais com 4 posições.
Vamos agora colocar informações no array animais. Digite:
Vamos criar o laço de exibição e a estrutura de decisão que vai verificar a opção
escolhida para exibir as informações dos animais. Digite:
while(continuar == "S"){
console.clear();
switch(animalExibir){
case "0":
console.log("Aranha");
console.log(animais[animalExibir]);
break;
case "1":
console.log("Escorpião");
console.log(animais[animalExibir]);
break;
case "2":
console.log("Cobra");
console.log(animais[animalExibir]);
break;
case "3":
console.log("Lagarto");
console.log(animais[animalExibir]);
break;
default:
console.log("Opcao invalida");
break;
}
continuar = prompt("Deseja ver outro animal? [S]im / [N]ao", "Digite aqui");
}
E por fim, vamos limpar o console exibir uma mensagem para finalizar o programa.
Digite:
console.clear();
console.log("Obrigado!");
<script>
var continuar = "S";
var animalExibir;
var animais = new Array(4);
while(continuar == "S"){
console.clear();
switch(animalExibir){
case "0":
console.log("Aranha");
console.log(animais[animalExibir]);
break;
case "1":
console.log("Escorpião");
console.log(animais[animalExibir]);
break;
case "2":
console.log("Cobra");
console.log(animais[animalExibir]);
break;
case "3":
console.log("Lagarto");
console.log(animais[animalExibir]);
break;
default:
console.log("Opcao invalida");
break;
}
console.clear();
console.log("Obrigado!");
</script>
Salve o arquivo e abra no Google Chrome para ver o resultado, não esqueça de abrir o
console.
Dia 19 - Missão: Dicionário de animais
Objetivo:
● Array
● Laço de repetição
Descrição:
<script>
</script>
Missão
Vamos criar um programa para o controle de cursos, onde o usuário deve informar o
nome do curso, o código do curso e o conteúdo programático para o curso. No caso do
conteúdo programático, o usuário pode informar quantas vezes quiser.
Vamos declarar as variáveis que vão armazenar o nome do curso, o código do curso, a
variável de controle para informar um novo conteúdo, uma variável para armazenar
temporariamente o conteúdo, o array de conteúdos e a variável de contador. Digite:
while(novoConteudo == "S"){
conteudoTemp = prompt("Informe o conteudo do curso" , "Digite aqui");
conteudoCurso.push(conteudoTemp);
novoConteudo = prompt("Deseja cadastrar um novo conteúdo para o curso?[S]im /
[N]ao" , "Digite aqui");
}
Agora crie as instruções para exibir as informações do curso e o laço que vai percorrer o
array exibindo o conteúdo do curso. Digite:
console.clear();
console.log("Codigo: " + codigoCurso);
console.log("Curso: " + nomeCurso);
console.log("Conteudo: ");
while(contador < conteudoCurso.length){
console.log(conteudoCurso[contador]);
contador++;
}
<script>
var nomeCurso = prompt("Informe o nome do curso" , "Digite aqui");
var codigoCurso = prompt("Informe o codigo do curso" , "Digite aqui");
var novoConteudo = "S";
var conteudoTemp = "";
var conteudoCurso = [];
var contador = 0;
while(novoConteudo == "S"){
conteudoTemp = prompt("Informe o conteudo do curso" , "Digite aqui");
conteudoCurso.push(conteudoTemp);
novoConteudo = prompt("Deseja cadastrar um novo conteúdo para o curso?[S]im /
[N]ao" , "Digite aqui");
}
console.clear();
console.log("Codigo: " + codigoCurso);
console.log("Curso: " + nomeCurso);
console.log("Conteudo: ");
while(contador < conteudoCurso.length){
console.log(conteudoCurso[contador]);
contador++;
}
</script>
Salve o arquivo e abra no Google Chrome para ver o resultado, não esqueça de abrir o
console.
Dia 20 - Missão: Exibir os alunos de uma lista
Objetivo:
● Laço de repetição(for)
Descrição:
<script>
</script>
Qualquer problema que você resolve com um laço é possível resolver com outro, claro
que pode ser que tenha uma solução “mais fácil” dependendo do problema e do laço
utilizado, mas em geral você pode utilizar o que você conseguir para resolver o
problema.
Nós já estudamos o laço while e agora vamos ver o laço for.
O laço for que criamos irá executar 10 vezes e em cada uma das vezes vai exibir o
conteúdo da variável contador. Vamos entender o laço for:
Missão
Crie um arquivo novo no VS Code, aperte CTRL+S e salve o arquivo com o nome de
Missao20.html e já digite:
<script>
</script>
Nossa missão será criar um array com o nome dos alunos de um curso e exibir o nome
de cada um dos alunos no console.
Fizemos algo muito parecido em um exemplo na missão 15. Veja:
Iremos fazer a mesma coisa, mas utilizando o laço for para evidenciar as diferenças.
Digite:
Primeiro temos a variável contador. A condição diz que o laço vai se repetir enquanto
contador for menor que 5, pois 5 é a quantidade de posições do array alunos. E a
cada repetição do laço será executado à instrução contador++ que fará com que o
valor de contador seja aumentado de um por um.
Compare agora com o exemplo da missão 15 e veja como esse código ficou mais
enxuto, porém, para quem está iniciando, talvez um pouco mais complexo:
Um bom exercício é revisitar as missões anteriores e tentar utilizar o laço for para
resolver as missões que envolverem laço de repetição.
Dia 21 - Missão: Criando uma agenda de contatos
Objetivo:
● Laço de repetição(for)
<script>
</script>
Missão
A missão consiste em criar uma agenda de contatos que contenham os seguintes dados:
nome, telefone e cidade. Para cada parte de informação teremos um array diferente,
então nosso código terá os arrays: nomes, telefones e cidades. Observe os exemplos:
Nomes
0 1 2
João Maria Joana
Telefones
0 1 2
99111-1111 99222-2222 99333-3333
Cidades
0 1 2
Americana Piracicaba Campinas
A ligação entre as informações será através do índice, por exemplo: o contato 0 é o João,
com o telefone 99111-1111 da cidade Americana.
Vamos começar o código declarando as variáveis e arrays que vamos utilizar. Digite:
Agora, vamos criar o laço que pega as informações e popula os arrays. Digite:
while(novoContato == "S"){
nomes[contador] = prompt("Informe o nome","");
telefones[contador] = prompt("Informe o telefone","");
cidades[contador] = prompt("Informe a cidade","");
novoContato = prompt("Cadastrar novo contato?[S]im / [N]ao","");
contador++;
}
<script>
var nomes = [];
var telefones = [];
var cidades = [];
var novoContato = "S";
var contador = 0;
while(novoContato == "S"){
nomes[contador] = prompt("Informe o nome","");
telefones[contador] = prompt("Informe o telefone","");
cidades[contador] = prompt("Informe a cidade","");
novoContato = prompt("Cadastrar novo contato?[S]im / [N]ao","");
contador++;
}
● Laço de repetição(for)
Descrição:
<script>
</script>
Missão
Todas as saídas de dados que trabalhamos até agora foram no console ou utilizando alert.
Agora vamos pegar informações do usuário e escrever dentro de sua página html. Para
fazer isso vamos utilizar o comando document.write(). Digite:
Veja que o nome e a idade ficaram “colados”, vamos colocar uma informação em cada
linha. Para isso insira a linha a seguir antes da linha document.write(idade); .Digite:
document.write("<br>");
<script>
var nome = prompt("Informe seu nome","Digite aqui");
document.write(nome);
● Laço de repetição(for)
Descrição:
<script>
</script>
Missão
Vamos pedir o nome do aluno e 4 notas para calcular a média, porém vamos verificar se
cada uma das notas digitadas é realmente um número, caso não seja iremos pedir que o
usuário informe a nota novamente. Também iremos utilizar um comando para limitar a
média à uma casa decimais(e não mais ficar apresentando resultados tipo
7.89999999999999).
Vamos declarar as variáveis que irão armazenar a nota, a média e nosso contador, e
depois disso já vamos pedir o nome do aluno. Digite:
Nada de novo até aqui, agora criamos o laço de repetição que “prenderá” o usuário até
que ele digite 4 notas válidas(números). Digite:
A novidade aqui é a função isNaN(nota), essa função verifica se o conteúdo dentro dos
parênteses Não É um Número(isNaN = is Not a Number), caso não seja um número ele
executa as instruções da parte true do if, ou seja exibe a mensagem “Voce nao digitou um
numero valido”. Se for um número, são executadas as instruções da parte false do if, ou
seja, o novo valor é somado à variável media e o contador é incrementado em 1.
Vamos agora fazer o cálculo da média e apresentar as informações na página. Digite:
media = media / 4;
Nessa parte do código a novidade é o toFixed(1), que faz com que o conteúdo da
variável media seja apresentado utilizando apenas 1 casa decimal.
Veja o código inteiro:
<script>
Descrição:
<script>
</script>
Nós já fizemos algumas missões onde o objetivo era criar o cálculo da média, porém o
problema que temos é de esses códigos não serem reutilizáveis, e toda vez que queremos
calcular uma média diferente precisamos recarregar a página. Isso ainda acontece pois
não trabalhamos com funções!
Funções, de um jeito bem simples, é quando você pega um conjunto de instruções e dá
um nome, de modo que toda vez que você chame por esse nome sejam executadas
aquelas instruções.
Vamos criar um exemplo: precisamos efetuar um cálculo de multiplicação entre dois
números. Digite:
function Multiplicacao(){
var resultado = 0;
var n1 = prompt("Informe o primeiro numero" , "Digite aqui!");
var n2 = prompt("Informe o segundo numero" , "Digite aqui!");
resultado = n1 * n2;
document.write("O resultado é " + resultado);
}
O que temos de novo é a function. A sintaxe para se criar uma função é a seguinte:
function NomeDaFunção(){
instruções;
instruções;
instruções;
}
As regras para o nome da função são basicamente os mesmos de variáveis. Salve seu
arquivo e abra no Google Chrome, e veja que nada vai acontecer.
Em todos nossos outros exemplos, quando você abria o arquivo o código já era
executado automaticamente, dessa vez não foi pois todo o código está dentro de uma
função, e para esse código ser executado você deve chamar essa função. Abra o console
e digite o nome da função e pressione enter:
Veja que agora sim seu código foi executa, os dois números foram pedidos e o resultado
apareceu na tela:
O legal é que agora, sempre que precisar fazer o cálculo é só “chamar” a função.
Missão
<script>
</script>
Vamos pedir as notas e calcular a média, vamos colocar essa lógica dentro de uma
função. Digite:
function Media(){
var media = 0, nota = 0, contador = 0;
var nome = prompt("Informe o nome do aluno","Digite aqui!!!");
Salve, abra no Google Chrome, abra o console, digite o nome da função ( Media(); ) ,
pressione enter, preencha as informações e visualize o resultado.
Dia 25 - Missão: Abrindo site de notícias
Objetivo:
Descrição:
<script>
</script>
Missão
Vamos criar uma função que abra o site do UOL e uma que abra o site GLOBO. Digite:
<script>
function AbrirUOL(){
alert("O site UOL será aberto");
window.open("https://uol.com.br");
}
function AbrirGlobo(){
alert("O site GLOBO será aberto");
window.open("https://globo.com");
}
</script>
Salve, abra no Google Chrome, abra o console, digite o nome da função ( AbrirUOL();
ou AbrirGlobo(); ) , pressione enter, preencha as informações e visualize o resultado.
Dia 26 - JavaScript Quiz
Caso queira responder online, click no link https://goo.gl/forms/ydQRFdrlcde38fK13.
As respostas se encontram na última página.
14) Qual o operador utilizado para atribuir um valor para uma variável? *
a) x
b) =
c) *
d) -
Descrição:
<script>
</script>
Missão
A resolução do nosso problema será muito parecido com o da missão 25, porém na
missão 25 se quiséssemos abrir 10 sites diferentes teríamos que criar 10 funções
diferentes, aqui vamos ter apenas uma função, porém essa função receberá um
parâmetro. Digite:
AbrirSite("UOL","https://uol.com.br");
AbrirSite("TERRA","https://terra.com.br");
Quando você chama a função desse jeito AbrirSite("TERRA","https://terra.com.br"); o
valor "TERRA" será passado para a variável nomeSite e o valor "https://terra.com.br"
será passado para a variável enderecoSite. Utilizando parâmetros nossas funções ficam
muito mais dinâmicas e úteis.
Dia 28 - Missão: Acréscimo e desconto
Objetivo:
Descrição:
<script>
</script>
Missão
Vamos criar uma função que receba 3 parâmetros: o valor total, uma porcentagem e a
operação. Se a operação for acréscimo a porcentagem deve ser acrescida ao valor total,
se a operação for desconto a porcentagem deve ser descontada do valor total. Digite:
<script>
function operacao(total, porcentagem, operacao){
var valor_porcentagem = porcentagem/100 * total;
var total_pagar = 0;
if(operacao == "acrescimo"){
//acréscimo
total_pagar = total + valor_porcentagem;
}else{
//desconto
total_pagar = total - valor_porcentagem;
}
operacao(1000 , 15 , "acrescimo");
operacao(200 , 7 , "desconto");
Dia 29 - Missão: Classificação de filmes
Objetivo:
Descrição:
<script>
</script>
Missão
function Classificacao(){
alert("Informe uma classificacao de 1 a 5 estrelas pra cada filme");
for(contador = 0 ; contador < filmes.length ; contador++){
classificacao[contador] = prompt("Informe a quantidade de estrelas pro filmes " +
filmes[contador]);
}
}
Para finalizar vamos criar a função ExibeFilmes. Nessa função temos dois laços de
repetição, um para exibir os filmes, e dentro do laço dos filmes temos um para exibir os
asteríscos, ou seja, para cada filme será montada uma string com as estrelas(asteriscos)
equivalentes à nota informada pelo usuário. Digite:
function ExibirClassificacoes(){
var numEstrelas = "";
for(contador = 0 ; contador < filmes.length ; contador++){
numEstrelas = "";
<script>
function Classificacao(){
alert("Informe uma classificacao de 1 a 5 estrelas pra cada filme");
for(contador = 0 ; contador < filmes.length ; contador++){
classificacao[contador] = prompt("Informe a quantidade de estrelas pro filmes " +
filmes[contador]);
}
}
function ExibirClassificacoes(){
var numEstrelas = "";
for(contador = 0 ; contador < filmes.length ; contador++){
numEstrelas = "";
</script>
Salve, abra no Google Chrome, abra o console, digite o nome da função, preencha os
dados, e execute a segunda função:
Classificacao();
ExibirClassificacoes();
Dia 30 - Missão: CONCLUÍDA COM SUCESSO
Parabéns!!!
Se você chegou até aqui foi por sua dedicação. Acredito que hoje saiba mais de
JavaScript do que à 30 dias atrás.
A ideia dessa atividade nunca foi só JavaScript, por trás disso teve resiliência,
disposição, perseverança, dedicação, entre outras coisas.
Depois dessa pausa inicie um novo ciclo, pegue um outro assunto e se proponha a
estudar 30 dias, criando exemplos e atividades referentes à esse assunto. Vá
documentando sua evolução, de preferência de forma visível e física, como com uma
agenda, adesivos ou post-it espalhados pelo seu ambiente de estudo.
Caso queira se aprofundar mais em JavaScript segue uma lista de sites com conteúdo
gratuito e de qualidade:
● https://www.freecodecamp.org
● https://www.codecademy.com
● https://rocketseat.com.br/curso-javascript-basico-do-zero
● Desvendando a linguagem JavaScript
● Curso de JavaScript (Universidade XTI)
JavaScript Quiz - Respostas
1 - B , 2 - C, 3 - D, 4 - A, 5 - C, 6 - B, 7 - C, 8 - C , 9 - C, 10 - A, 11 - D, 12 - B, 13 - B, 14 - B, 15 - A, 16 - A