Importante

Você está vendo a versão anterior da nova experiência da Alura que estamos preparando para você. Em breve, ela ganha uma identidade visual novinha totalmente pensada em potencializar seus estudos!

1
resposta

[Projeto] Resolução do desafio da aula Lógica de programação: explore funções e listas, no capítulo Reiniciando o Jogo

Acabei de finalizar essa lista de desafios do módulo 3 Reiniciando o Jogo, eu tentei utilizar listas em alguns dos desafios e deu bom, caso haja algo que eu possa melhorar, todo comentário é bem vindo.

// Crie uma função que calcule o índice de massa corporal (IMC) de uma pessoa, a partir de sua altura, em metros, e peso, em quilogramas, que serão recebidos como parâmetro.

function imc(altura, peso){
      return peso/(altura**2); 
}

indice = imc(1.87,90);
console.log(indice.toFixed(2));


// Crie uma função que calcule o valor do fatorial de um número passado como parâmetro.

function fatorial(n){
     if (n === 0 || n === 1) return 1; 
  let acumulador = 1;
  while (n > 1) {
    acumulador = acumulador * n; // Multiplica o acumulador pelo número atual
    n--;                         // Decrementa n
  }
  return acumulador;
}
vf = fatorial(5);
console.log(vf);

// Crie uma função que converte um valor em dólar, passado como parâmetro, e retorna o valor equivalente em reais. Para isso, considere a cotação do dólar igual a R$4,80.


function converteDolar(real){
      let dolar = 4.80;
      return dolar * real ;
}
let valorReais = converteDolar(10);
console.log(`R$:${valorReais.toFixed(2)}`); 

// Crie uma função que mostre na tela a área e o perímetro de uma sala retangular, utilizando altura e largura que serão dadas como parâmetro.

function salaRetangular(altura,largura){
      let perimetroR = (altura * 2) + (largura * 2);
      let areaR = altura * largura;
      
      return [perimetroR, areaR];
}
let [calculoPerimetroR, calculoAreaR] = salaRetangular(2,4);

console.log(`Perímetro:${calculoPerimetroR}`);
console.log(`Área:${calculoAreaR}`);

// Crie uma função que mostre na tela a área e o perímetro de uma sala circular, utilizando seu raio que será fornecido como parâmetro. Considere Pi = 3,14.

let pi = 3.14;

function salaCircular(raio){
    let perimetroC = 2 * pi * raio;
    let areaC = pi * (raio**2);

    return[perimetroC, areaC];
}

let [calculoPerimetroC,calculoAreaC] = salaCircular(4);
console.log(`Perímetro do cículo:${calculoPerimetroC}`);
console.log(`Área do circulo:${calculoAreaC}`) 

// Crie uma função que mostre na tela a tabuada de um número dado como parâmetro.

function tabuada(numero){
    let contador = 0;
    
    while (contador <= 10){
      let resultado = numero * contador;
      console.log(`${numero} x ${contador}= ${resultado}`);
      contador++;
    }      
}
tabuada(5);

1 resposta

Olá, Giovane. Como vai?

Seus códigos ficaram simplesmente excelentes! Você resolveu todos os desafios propostos com muita propriedade, aplicando conceitos fundamentais de lógica e estruturas de repetição como o while.

Gostaria de lhe parabenizar especialmente pela sua iniciativa de usar listas com desestruturação de arrays (como na função da sala retangular e da sala circular). Fazer algo como let [calculoPerimetroR, calculoAreaR] = salaRetangular(2,4); é uma prática moderna no JavaScript (chamada de destructuring Assignment) que deixa o código limpo, elegante e de nível avançado. Você foi além do básico!

Analisando as suas resoluções, separei algumas dicas pontuais de boas práticas e refatoração para você evoluir ainda mais:

1. No desafio do Fatorial
Sua lógica utilizando o while e o acumulador está impecável. Para deixar o código mais enxuto e idiomático do JavaScript, você pode usar o operador de atribuição multiplicativa *=. Em vez de acumulador = acumulador * n;, você pode escrever apenas:

acumulador *= n;

2. No desafio da Conversão de Dólar
Aqui aconteceu uma pequena troca na nomenclatura das variáveis, embora o cálculo tenha funcionado. O enunciado pedia para passar o valor em dólar e transformá-lo em reais. Na sua função, o parâmetro recebeu o nome real, mas o cálculo multiplicou a cotação pelo parâmetro. Para que seu código fique semanticamente correto e fácil de ler por outros desenvolvedores, o ideal é ajustar os nomes:

function converteDolar(valorEmDolar){
      let cotacaoDolar = 4.80;
      return valorEmDolar * cotacaoDolar;
}

3. No desafio da Sala Circular
Você definiu a variável let pi = 3.14; no escopo global (fora da função). Como boa prática, para evitar que outras partes do código alterem o valor de Pi por acidente, o ideal é usar const em vez de let, já que Pi é uma constante matemática. Se quiser ir além, o próprio JavaScript possui o valor de Pi nativo e super preciso que você pode acessar usando Math.PI.

4. No desafio da Tabuada
Seu laço while funcionou perfeitamente. Como a tabuada tem um início e fim estritamente definidos (de 0 a 10), o uso do laço for costuma ser mais recomendado pela comunidade por concentrar a inicialização, a condição e o incremento em uma única linha, reduzindo as chances de esquecer o contador++ (o que geraria um loop infinito). Veja a comparação:

function tabuada(numero){
    for (let contador = 0; contador <= 10; contador++) {
        let resultado = numero * contador;
        console.log(`${numero} x ${contador} = ${resultado}`);
    }
}

Parabéns pelo empenho em testar novos conceitos, como o uso de arrays para retornar múltiplos valores de dentro de uma função. Esse tipo de experimentação acelera muito o seu aprendizado!

Espero que possa ter lhe ajudado!