Solucionado (ver solução)
Solucionado
(ver solução)
2
respostas

[Projeto] Resolução do desafio da Calculadora

Fiquei muito feliz em fazer esse desafio, pois pensei que seria mais difícil do que foi, consegui monta-lo de uma forma simples e consegui incluir as informações que achei pertinente para o exercício. Se tiverem sugestões de melhoria, ficaria feliz em ler.

function calcular() {
let numero1 = parseInt (prompt ("Insira o primeiro número para calcular a operação matemática:"));
let numero2 = parseInt (prompt ("Insira o segundo número para calcular a operação matemática:"));
let operacao = prompt ("insira a operação matemática desejada, sendo: (+) para somar, (-) para subtrair, (*) para multiplicar e (/) para dividir:");

if (isNaN(numero1) || isNaN(numero2)) {
    alert("Foi digitado algum caractere errado, favor refazer cálculo");
    return;
}

let resultado;

if (operacao == "+") {
 resultado = numero1 + numero2
alert (`O resultado da soma é de ${numero1 + numero2}`);
} else if (operacao == "-") {
alert (`O resultado da subtração é de ${numero1 - numero2}`);
} else if (operacao == "*") {
alert (`O resultado da multiplicação é de ${numero1 * numero2}`);
} else if (operacao == "/") {
alert (`O resultado da divisão é de ${numero1 / numero2}`);
}else {
    alert("Operação inválida!");
}}

calcular ()
2 respostas
solução!

Oii, Marcos! Tudo bem?

Parabéns pela dedicação e por ter concluído o desafio! Fico muito feliz em saber que a atividade foi mais tranquila do que você esperava. Essa sensação de "desmistificar" a dificuldade é um dos melhores sentimentos no aprendizado de programação.

Seu código tá muito funcional e você teve uma ótima sacada ao usar o isNaN para verificar se o usuário digitou realmente números. Isso é essencial para evitar erros inesperados e mostra cuidado com a experiência do usuário.

Como você pediu sugestões de melhoria, separei alguns pontos didáticos pra você levar seu código para o próximo nível:

1. Uso da variável resultado

Percebi que você declarou let resultado;, mas dentro dos if/else você acabou fazendo a conta direto dentro do alert (ex: ${numero1 + numero2}).

  • Dica: Você pode atribuir o valor à variável resultado primeiro e usar o alert apenas uma vez no final. Isso deixa o código mais limpo e evita repetição de comandos.

2. Tratamento da divisão por zero

Na matemática e na programação, dividir um número por zero é um problema.

  • Dica: No bloco da divisão, você pode adicionar um if para verificar se o numero2 é zero antes de calcular.

3. Modularização (o próximo passo!)

Pra deixar seu código mais profissional e fácil de dar manutenção, uma prática comum é separar as responsabilidades. Uma função cuida da interação (perguntas) e outras funções cuidam apenas da matemática.

Abaixo, deixo um exemplo de como aplicar essas melhorias, baseado na estrutura que você já criou, mas organizando um pouco mais:

// Funções separadas para cada operação (Responsabilidade única)
function adicao(a, b) { return a + b; }
function subtracao(a, b) { return a - b; }
function multiplicacao(a, b) { return a * b; }
function divisao(a, b) {
    if (b !== 0) {
        return a / b;
    } else {
        return "Erro: Divisão por zero não é permitida.";
    }
}

function calcular() {
    let numero1 = parseInt(prompt("Insira o primeiro número:"));
    let numero2 = parseInt(prompt("Insira o segundo número:"));
    let operacao = prompt("Insira a operação (+, -, *, /):");

    // Sua validação ficou excelente! Mantive ela aqui.
    if (isNaN(numero1) || isNaN(numero2)) {
        alert("Foi digitado algum caractere errado, favor refazer cálculo");
        return;
    }

    let resultado;

    // Usando Switch Case (uma alternativa limpa ao if/else if)
    switch (operacao) {
        case '+':
            resultado = adicao(numero1, numero2);
            break;
        case '-':
            resultado = subtracao(numero1, numero2);
            break;
        case '*':
            resultado = multiplicacao(numero1, numero2);
            break;
        case '/':
            resultado = divisao(numero1, numero2);
            break;
        default:
            alert("Operação inválida!");
            return; // Encerra a função se a operação não for válida
    }

    // Exibe o resultado apenas uma vez
    alert(`O resultado da operação é: ${resultado}`);
}

calcular();

Resumo das melhorias:

  • Legibilidade: O switch é ótimo quando temos muitas opções de escolha (casos), substituindo vários else if.
  • Reaproveitamento: Ao criar funções como adicao ou subtracao, você poderia usá-las em outras partes do programa no futuro, sem precisar reescrever a fórmula.

Continue praticando assim! Você está no caminho certo. Se tiver dúvidas sobre essa estrutura nova, pode perguntar.

Alura Conte com o apoio da comunidade Alura na sua jornada. Abraços e bons estudos!

Obrigado pela resposta, vou estudar como utilizar o Switch Case e tentarei aplicar na próxima.