02 Estruturas de Decisão e Repetição
Estruturas de Decisão e Repetição#
Estrutura de Decisão#
As estruturas de decisão em JavaScript são responsáveis por permitir que o programa faça escolhas lógicas e tome diferentes caminhos de acordo com as condições estabelecidas. As estruturas de decisão mais comuns são: if, if-else, switch-case e operador ternário.
Tabela:
Estrutura | Descrição |
---|---|
if | Verifica se uma condição é verdadeira e executa um bloco de código caso a condição seja atendida |
if-else | Verifica se uma condição é verdadeira e executa um bloco de código caso a condição seja atendida, caso contrário, executa um outro bloco de código |
switch-case | Verifica uma expressão e executa um bloco de código dependendo do valor dessa expressão |
operador ternário | É uma forma abreviada de escrever uma estrutura if-else em apenas uma linha |
if#
O if
é uma das estruturas de decisão mais básicas em JavaScript. Ele permite que o código execute uma determinada ação somente se uma condição for verdadeira. A sintaxe do if
é a seguinte:
if (condição) {
// código a ser executado se a condição for verdadeira
}
Por exemplo, vamos supor que queremos exibir uma mensagem somente se uma pessoa tiver idade suficiente para votar nas eleições. O código ficaria assim:
let idade = 20;
if (idade >= 18) {
console.log("Você pode votar nas eleições.");
}
Nesse caso, como a idade é maior ou igual a 18, a mensagem "Você pode votar nas eleições." será exibida no console.
Também é possível usar uma cláusula else
para executar um código caso a condição seja falsa. A sintaxe do if-else
é a seguinte:
if (condição) {
// código a ser executado se a condição for verdadeira
} else {
// código a ser executado se a condição for falsa
}
Por exemplo, vamos supor que queremos exibir uma mensagem informando se uma pessoa pode votar ou não nas eleições. O código ficaria assim:
let idade = 14;
if (idade >= 16) {
console.log("Você pode votar nas eleições.");
} else {
console.log("Você não pode votar nas eleições.");
}
Nesse caso, como a idade é menor que 16, a mensagem "Você não pode votar nas eleições." será exibida no console.
Também é possível usar várias cláusulas else if
para testar várias condições diferentes. A sintaxe do if-else if
é a seguinte:
if (condição1) {
// código a ser executado se a condição1 for verdadeira
} else if (condição2) {
// código a ser executado se a condição2 for verdadeira e a condição1 for falsa
} else if (condição3) {
// código a ser executado se a condição3 for verdadeira e as condições 1 e 2 forem falsas
} else {
// código a ser executado se nenhuma das condições anteriores for verdadeira
}
Por exemplo, vamos supor que queremos exibir uma mensagem informando em que faixa etária uma pessoa se encontra. O código ficaria assim:
let idade = 25;
if (idade < 18) {
console.log("Você é menor de idade.");
} else if (idade >= 18 && idade < 60) {
console.log("Você é adulto.");
} else {
console.log("Você é idoso.");
}
Nesse caso, como a idade é maior ou igual a 18 e menor que 60, a mensagem "Você é adulto." será exibida no console. Dessa forma, a utilização do else if permite uma maior flexibilidade e precisão na tomada de decisões, especialmente quando há múltiplas condições a serem avaliadas.
o trecho de codigo abaixo teria o mesmo resultado mas devemos evitá-lo:
let idade = 25;
if (idade < 18) {
console.log("Você é menor de idade.");
}
if (idade >= 18 && idade < 60) {
console.log("Você é adulto.");
}
if (idade >= 60) {
console.log("Você é adulto.");
}
switch-case#
O switch-case
é uma estrutura condicional que permite executar um determinado bloco de código dependendo do valor de uma expressão. A sintaxe do switch-case
é a seguinte:
switch (expressão) {
case valor1:
// código a ser executado se a expressão for igual a valor1
break;
case valor2:
// código a ser executado se a expressão for igual a valor2
break;
default:
// código a ser executado se a expressão não for igual a nenhum dos valores
}
Por exemplo, vamos supor que queremos exibir o nome de um dia da semana com base no número correspondente. O código ficaria assim:
let dia = 3;
switch (dia) {
case 1:
console.log("Domingo");
break;
case 2:
console.log("Segunda-feira");
break;
case 3:
console.log("Terça-feira");
break;
case 4:
console.log("Quarta-feira");
break;
case 5:
console.log("Quinta-feira");
break;
case 6:
console.log("Sexta-feira");
break;
case 7:
console.log("Sábado");
break;
default:
console.log("Dia inválido");
}
Nesse caso, como o valor de dia
é 3, a mensagem "Terça-feira" será exibida no console.
ternário#
O operador ternário é uma forma concisa de escrever uma estrutura if-else
. A sintaxe do operador ternário é a seguinte:
condição ? valorSeVerdadeiro : valorSeFalso
Por exemplo, vamos supor que queremos exibir uma mensagem informando se uma pessoa pode votar nas eleições. O código usando o operador ternário ficaria assim:
let idade = 20;
let mensagem = idade >= 16 ? "Você pode votar nas eleições." : "Você não pode votar nas eleições.";
console.log(mensagem);
Nesse caso, como a idade é maior ou igual a 16, a mensagem "Você pode votar nas eleições." será exibida no console.
try/catch/finally#
O bloco try envolve um conjunto de instruções que podem gerar exceções (ou erros). Se ocorrer uma exceção dentro do bloco try, o controle é transferido para o bloco catch. O bloco catch é responsável por tratar a exceção, e pode conter um conjunto de instruções que lidam com o erro.
Veja um exemplo:
try {
// código que pode gerar exceções
} catch (e) {
// tratamento da exceção
}
Neste exemplo, o código que pode gerar exceções é colocado dentro do bloco try. Se ocorrer uma exceção, o controle é transferido para o bloco catch, onde a exceção é tratada. O parâmetro e representa a exceção que foi lançada.
Vamos ver um exemplo simples de como usar o try-catch em JavaScript:
try {
// Código que pode lançar uma exceção
console.log('Executando o código do bloco try...');
throw new Error('Ocorreu um erro!');
} catch (excecao) {
// Tratamento de exceção
console.log('Executando o código do bloco catch...');
console.log(excecao.message);
}
Além disso, é possível utilizar a cláusula finally para definir um bloco de código que será executado independentemente de ocorrer ou não uma exceção. Este bloco é opcional e pode ser utilizado para limpar recursos, por exemplo.
Veja um exemplo completo:
try { // código que pode gerar exceções } catch (e) { // tratamento da exceção } finally { // código que será executado independentemente de ocorrer ou não uma exceção }
Em resumo, a utilização dos blocos try, catch e finally é importante para garantir que exceções sejam tratados de forma adequada durante a execução de um programa em JavaScript.
Estruturas de Repetição#
Estruturas de repetição são uma das principais ferramentas disponíveis em linguagens de programação, permitindo que o programador execute uma sequência de instruções repetidamente. Em JavaScript, existem duas estruturas de repetição disponíveis: while
e for
.
WHILE#
A instrução while
é usada para executar um bloco de código enquanto uma determinada condição for verdadeira. A sintaxe é a seguinte:
while (condição) {
// código a ser executado enquanto a condição for verdadeira
}
A condição pode ser qualquer expressão que possa ser avaliada como verdadeira ou falsa. Enquanto a condição for verdadeira, o bloco de código dentro das chaves será executado repetidamente. Quando a condição se tornar falsa, a execução será interrompida e o controle será passado para a próxima instrução após o bloco while
.
Veja um exemplo simples de como utilizar o while
:
let contador = 0;
while (contador < 5) {
console.log("O contador é: " + contador);
contador++;
}
Nesse exemplo, o while
é usado para imprimir o valor de "contador" enquanto ele for menor que 5. A cada iteração, o valor de "contador" é incrementado em 1. O resultado desse código seria:
O contador é: 0
O contador é: 1
O contador é: 2
O contador é: 3
O contador é: 4
FOR#
A instrução for
é usada para executar um bloco de código um número fixo de vezes. Ela é composta por três partes:
- A inicialização: onde é definida a variável de controle e atribuído o seu valor inicial;
- A condição: que define a condição de parada da repetição;
- O incremento/decremento: que define como a variável de controle será modificada a cada iteração.
A sintaxe da estrutura for
é a seguinte:
for (inicialização; condição; incremento/decremento) {
// código a ser executado enquanto a condição for verdadeira
}
A seguir, vou explicar cada parte da estrutura for
em mais detalhes.
Incialização#
A inicialização é a primeira parte da estrutura for
. Ela é usada para definir a variável de controle e atribuir o seu valor inicial. A variável de controle é usada para contar o número de iterações do laço e é geralmente denominada de i
(embora possa ter outro nome).
A inicialização pode conter uma ou mais instruções separadas por vírgulas. Por exemplo:
Veja um exemplo de como utilizar o for
contendo somente uma variavel de inicialização :
for (let i = 0; i < 5; i++) {
console.log("O valor de i é: " + i);
}
Nesse exemplo, o for
é usado para imprimir o valor de "i" enquanto ele for menor que 5. A cada iteração, o valor de "i" é incrementado em 1. O resultado desse código seria:
for (let i = 0, j = 10; i < 10; i++, j--) {
// código a ser executado enquanto a condição for verdadeira
}
Nesta inicialização, definimos duas variáveis de controle: i
e j
. A variável i
é iniciada em 0
e a variável j
em 10
. Na maioria dos casos, usamos apenas uma variável de controle.
Condição#
A condição é a segunda parte da estrutura for
. Ela define a condição de parada da repetição. A condição é avaliada no início de cada iteração e, se for verdadeira, o bloco de código dentro das chaves será executado. Se a condição for falsa, o bloco de código não será executado e o controle será passado para a próxima instrução após o bloco for
.
A condição pode ser qualquer expressão que possa ser avaliada como verdadeira ou falsa. Por exemplo:
for (let i = 0; i < 10; i++) {
// código a ser executado enquanto i for menor que 10
}
Nesse exemplo, a condição é i < 10
, o que significa que o bloco de código será executado enquanto o valor da variável i
for menor que 10
.
Incremento/Decremento#
O incremento/decremento é a terceira parte da estrutura for
. Ela define como a variável de controle será modificada a cada iteração. O incremento/decremento é executado no final de cada iteração, depois que o bloco de código dentro das chaves é executado.
O incremento/decremento pode ser uma instrução única ou uma série de instruções separadas por vírgulas. Por exemplo:
for (let i = 0; i < 10; i += 2) {
// código a ser executado enquanto i for menor que 10
}
Nesse exemplo, a variável i
é incrementada em 2
a cada iteração, em vez do valor padrão de 1
.
For of#
O for...of
é uma estrutura de repetição introduzida no ECMAScript 6 (também conhecido como ES6 ou ECMAScript 2015) que permite iterar sobre elementos iteráveis, como arrays, strings, objetos do tipo Map e Set, entre outros.
A sintaxe do for...of
é a seguinte:
for (variável of iterável) {
// código a ser executado para cada elemento do iterável
}
Onde variável
é a variável que receberá o valor de cada elemento do iterável em cada iteração, e iterável
é o objeto iterável a ser percorrido.
Por exemplo, podemos usar o for...of
para iterar sobre um array:
const array = [1, 2, 3];
for (const elemento of array) {
console.log(elemento);
}
Nesse caso, a cada iteração, a variável elemento
receberá o valor de cada elemento do array, na ordem em que aparecem. O resultado impresso no console seria:
1
2
3
Podemos também usar o for...of
para iterar sobre uma string:
const string = "JavaScript";
for (const caractere of string) {
console.log(caractere);
}
Nesse caso, a cada iteração, a variável caractere
receberá um dos caracteres da string, na ordem em que aparecem. O resultado impresso no console seria:
J
a
v
a
S
c
r
i
p
t
É importante notar que o for...of
não permite acessar o índice de cada elemento do iterável. Se for necessário acessar o índice, é recomendado utilizar o for
convencional ou o método forEach
dos arrays.
Em resumo, o for...of
é uma estrutura de repetição que permite iterar sobre elementos iteráveis de forma simples e concisa, tornando o código mais legível e fácil de entender.
FOR IN#
O for...in
é uma estrutura de repetição em JavaScript que permite iterar sobre as propriedades enumeráveis de um objeto. A sintaxe do for...in
é a seguinte:
for (propriedade in objeto) {
// código a ser executado para cada propriedade do objeto
}
Onde propriedade
é o nome de cada propriedade enumerável do objeto em cada iteração, e objeto
é o objeto a ser percorrido.
Por exemplo, podemos usar o for...in
para iterar sobre as propriedades de um objeto:
const objeto = {
nome: "João",
idade: 30,
profissao: "Desenvolvedor",
};
for (const propriedade in objeto) {
console.log(`${propriedade}: ${objeto[propriedade]}`);
}
Nesse caso, a cada iteração, a variável propriedade
receberá o nome de cada propriedade enumerável do objeto, e o valor de cada propriedade será acessado usando a sintaxe de colchetes objeto[propriedade]
. O resultado impresso no console seria:
nome: João
idade: 30
profissao: Desenvolvedor
É importante notar que o for...in
itera apenas sobre as propriedades enumeráveis do objeto, ou seja, aquelas que têm a flag enumerable
definida como true
. Algumas propriedades padrão dos objetos, como length
de arrays e prototype
de funções, por exemplo, têm a flag enumerable
definida como false
e, portanto, não são iteradas pelo for...in
.
Além disso, é recomendado usar o for...in
apenas em objetos simples, como objetos literais, e não em objetos complexos que podem herdar propriedades indesejadas de seus protótipos. Para iterar sobre elementos de arrays e outros tipos de coleções, é recomendado utilizar o for...of
ou o forEach
dos arrays.
Em resumo, o for...in
é uma estrutura de repetição que permite iterar sobre as propriedades enumeráveis de um objeto, acessando seus nomes e valores de forma simples e direta.
Exercicios de fixação#
Exercicio de Estruturas de decisão#
-
Crie um programa utilizando operador
if
eelse
que: leia um número inteiro e verifique se ele é par ou ímpar. -
Crie um programa utilizando operador
if
eelse
que: verifique se uma pessoa é maior ou menor de idade (considere que a idade mínima é 18 anos). -
Crie um programa utilizando operador
if
eelse
que: leia duas notas de um aluno, calcule a media e verifique se ele foi aprovado ou reprovado (nota mínima de aprovação é 6). -
Crie um programa utilizando operador
switch-case
que: leia um número inteiro de 1 a 7 e imprima o dia da semana correspondente. -
Crie um programa utilizando operador
switch-case
que: leia uma letra e verifique se ela é vogal ou consoante. -
Crie um programa utilizando operador
switch-case
que: leia um número inteiro de 1 a 12 e imprima o nome do mês correspondente. -
Crie um programa utilizando operador
ternario
que: leia um número e informe se ele é positivo ou negativo. -
Crie um programa utilizando operador
ternario
que: leia a idade de uma pessoa e informe se ela é maior ou menor de idade. -
Crie um programa utilizando operador
ternario
que: leia dois números e informe qual deles é o maior. -
Crie um programa utilizando operador
try-catch-finally
que: tente converter uma string em um número, e caso ocorra um erro, informe uma mensagem amigável ao usuário. -
Crie um programa utilizando operador
try-catch-finally
que: tente acessar uma propriedade de um objeto que não existe, e caso ocorra um erro, informe uma mensagem amigável ao usuário. -
Crie um programa utilizando operador
try-catch-finally
que: tente dividir um número por zero, e caso ocorra um erro, informe uma mensagem amigável ao usuário.
Exercicio de Estruturas de repetição#
-
Crie um programa utilizando a estrutura
for
que: exiba no console os números de 1 a 10. -
Crie um programa utilizando a estrutura
for
que: exiba no console os números pares de 1 a 20. -
Crie um programa utilizando a estrutura
for
que: exiba no console os números de 50 a 1 em ordem decrescente, pulando de 5 em 5. -
Crie um programa utilizando a estrutura
while
que: exiba no console a soma dos números de 1 a 10. -
Crie um programa utilizando a estrutura
while
que: exiba no console os números ímpares de 1 a 20.
Respostas Exercicios de fixação#
Estruturas de decisão#
-
Crie um programa utilizando operador
if
eelse
que: leia um número inteiro e verifique se ele é par ou ímpar.let numero = 10; // exemplo if (numero % 2 === 0) { console.log(numero + " é par."); } else { console.log(numero + " é ímpar."); }
-
Crie um programa utilizando operador
if
eelse
que: verifique se uma pessoa é maior ou menor de idade (considere que a idade mínima é 18 anos).let idade = 20; // exemplo if (idade >= 18) { console.log("Maior de idade."); } else { console.log("Menor de idade."); }
-
Crie um programa utilizando operador
if
eelse
que: leia duas notas de um aluno, calcule a media e verifique se ele foi aprovado ou reprovado (nota mínima de aprovação é 6).let nota1 = 7; // primeira nota let nota2 = 5; // segunda nota let media = (nota1 + nota2) / 2; if (media >= 6) { console.log("Aprovado."); } else { console.log("Reprovado."); }
-
Crie um programa utilizando operador
switch-case
que: leia um número inteiro de 1 a 7 e imprima o dia da semana correspondente.let numero = 5; // exemplo switch (numero) { case 1: console.log("Domingo"); break; case 2: console.log("Segunda-feira"); break; case 3: console.log("Terça-feira"); break; case 4: console.log("Quarta-feira"); break; case 5: console.log("Quinta-feira"); break; case 6: console.log("Sexta-feira"); break; case 7: console.log("Sábado"); break; default: console.log("Número inválido"); }
-
Crie um programa utilizando operador
switch-case
que: leia uma letra e verifique se ela é vogal ou consoante.let letra = "a"; // exemplo switch (letra) { case "a": case "e": case "i": case "o": case "u": console.log("Vogal"); break; default: console.log("Consoante"); }
-
Crie um programa utilizando operador
switch-case
que: leia um número inteiro de 1 a 12 e imprima o nome do mês correspondente.let numero = 9; // exemplo switch (numero) { case 1: console.log("Janeiro"); break; case 2: console.log("Fevereiro"); break; case 3: console.log("Março"); break; case 4: console.log("Abril"); break; case 5: console.log("Maio"); break; case 6: console.log("Junho"); break; case 7: console.log("Julho"); break; case 8: console.log("Agosto"); break; case 9: console.log("Setembro"); break; case 10: console.log("Outubro"); break; case 11: console.log("Novembro"); break; case 12: console.log("Dezembro"); break; default: console.log("Número inválido"); }
-
Crie um programa utilizando operador
ternario
que: leia um número e informe se ele é positivo ou negativo.let numero = 5; // exemplo let resultado = numero >= 0 ? "positivo" : "negativo"; console.log(resultado);
-
Crie um programa utilizando operador
ternario
que: leia a idade de uma pessoa e informe se ela é maior ou menor de idade.let idade = 20; // exemplo let resultado = idade >= 18 ? "maior de idade" : "menor de idade"; console.log(resultado);
-
Crie um programa utilizando operador
ternario
que: leia dois números e informe qual deles é o maior.let numero1 = 10; // exemplo let numero2 = 5; // exemplo let maior = numero1 > numero2 ? numero1 : numero2; console.log(maior);
-
Crie um programa utilizando operador
try-catch-finally
que: tente converter uma string em um número, e caso ocorra um erro, informe uma mensagem amigável ao usuário.let texto = "123abc"; // exemplo let numero; try { numero = Number(texto); if (isNaN(numero)) { throw new Error("O texto não pode ser convertido em número"); } console.log(`O número é ${numero}`); } catch (error) { console.log(error.message); } finally { console.log("Fim da execução do programa"); }
-
Crie um programa utilizando operador
try-catch-finally
que: tente acessar uma propriedade de um objeto que não existe, e caso ocorra um erro, informe uma mensagem amigável ao usuário.let objeto = {nome: "João", idade: 30}; // exemplo let propriedade = "endereco"; let valor; try { valor = objeto[propriedade]; if (!valor) { throw new Error(`A propriedade ${propriedade} não existe no objeto`); } console.log(`O valor da propriedade é ${valor}`); } catch (error) { console.log(error.message); } finally { console.log("Fim da execução do programa"); }
-
Crie um programa utilizando operador
try-catch-finally
que: tente dividir um número por zero, e caso ocorra um erro, informe uma mensagem amigável ao usuário.let numero = 10; // exemplo let divisor = 0; let resultado; try { resultado = numero / divisor; console.log(`O resultado da divisão é ${resultado}`); } catch (error) { console.log("Ocorreu um erro ao tentar dividir o número:", error.message); } finally { console.log("Fim da execução do programa"); }
Resposta Estruturas de repetição#
-
Crie um programa utilizando a estrutura
for
que: exiba no console os números de 1 a 10.for (let i = 1; i <= 10; i++) { console.log(i); }
-
Crie um programa utilizando a estrutura
for
que: exiba no console os números pares de 1 a 20.for (let i = 2; i <= 20; i += 2) { console.log(i); }
-
Crie um programa utilizando a estrutura
for
que: exiba no console os números de 50 a 1 em ordem decrescente, pulando de 5 em 5.for (let i = 50; i >= 1; i -= 5) { console.log(i); }
-
Crie um programa utilizando a estrutura
while
que: exiba no console a soma dos números de 1 a 10.let i = 1; let soma = 0; while (i <= 10) { soma += i; i++; } console.log(`A soma dos números de 1 a 10 é ${soma}`);
-
Crie um programa utilizando a estrutura
while
que: exiba no console os números ímpares de 1 a 20.let i = 1; while (i <= 20) { if (i % 2 !== 0) { console.log(i); } i++; }