Projeto 4: Calculadora Simples
Construa uma calculadora com operações básicas (soma, subtração, etc.).
A calculadora simples é um projeto excelente para consolidar os fundamentos do JavaScript, porque ela junta entrada de dados, lógica de decisão, manipulação de interface e tratamento de erros básicos (como divisão por zero ou campos vazios).
Pense nela como uma “mini central de decisões”: o usuário informa dois valores, escolhe uma operação, e o sistema decide qual cálculo executar e mostra o resultado.
O que este projeto reforça
Neste projeto, você revisa e pratica:
- Variáveis para armazenar dados de entrada e resultado.
- Conversão de tipos (texto para número).
- Condicionais para escolher a operação correta.
- Eventos para reagir ao clique em botões.
- Funções para organizar o código em blocos claros.
- Manipulação do DOM para ler inputs e exibir saída.
- Validações para evitar resultados inválidos.
Estrutura mental da calculadora
Uma forma simples de pensar o fluxo:
- Capturar os dois números digitados.
- Capturar qual operação o usuário escolheu.
- Validar se os dados são números válidos.
- Executar a operação com base em uma condição.
- Mostrar o resultado na tela.
Esse fluxo representa muito bem aplicações reais: entrada → processamento → saída.
Exemplo completo (HTML + CSS + JS em um único arquivo)
<!DOCTYPE html>
<html lang="pt-BR">
<head>
<meta charset="UTF-8" />
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
<title>Calculadora Simples</title>
<style>
body {
margin: 0;
min-height: 100vh;
display: grid;
place-items: center;
background: #f4f6fb;
font-family: Arial, sans-serif;
}
.card {
background: #fff;
width: 100%;
max-width: 360px;
padding: 20px;
border-radius: 12px;
box-shadow: 0 10px 24px rgba(0, 0, 0, 0.08);
}
h1 {
margin-top: 0;
text-align: center;
font-size: 1.3rem;
color: #222;
}
.campo {
margin-bottom: 10px;
}
input, select {
width: 100%;
padding: 10px;
border: 1px solid #cdd5e1;
border-radius: 8px;
font-size: 0.95rem;
box-sizing: border-box;
}
button {
width: 100%;
border: none;
background: #2563eb;
color: #fff;
padding: 10px;
border-radius: 8px;
cursor: pointer;
margin-top: 8px;
font-size: 0.95rem;
}
button:hover {
background: #1f54c7;
}
#resultado {
margin-top: 14px;
background: #eef2ff;
padding: 10px;
border-radius: 8px;
color: #1e3a8a;
font-weight: bold;
text-align: center;
min-height: 20px;
}
</style>
</head>
<body>
<main class="card">
<h1>Calculadora Simples</h1>
<div class="campo">
<input id="numero1" type="number" placeholder="Primeiro número" />
</div>
<div class="campo">
<input id="numero2" type="number" placeholder="Segundo número" />
</div>
<div class="campo">
<select id="operacao">
<option value="somar">Somar (+)</option>
<option value="subtrair">Subtrair (-)</option>
<option value="multiplicar">Multiplicar (×)</option>
<option value="dividir">Dividir (÷)</option>
</select>
</div>
<button id="calcular">Calcular</button>
<p id="resultado"></p>
</main>
<script>
const inputNumero1 = document.getElementById("numero1");
const inputNumero2 = document.getElementById("numero2");
const selectOperacao = document.getElementById("operacao");
const botaoCalcular = document.getElementById("calcular");
const campoResultado = document.getElementById("resultado");
function calcular(num1, num2, operacao) {
if (operacao === "somar") return num1 + num2;
if (operacao === "subtrair") return num1 - num2;
if (operacao === "multiplicar") return num1 * num2;
if (operacao === "dividir") {
if (num2 === 0) {
return "Erro: divisão por zero não é permitida.";
}
return num1 / num2;
}
return "Operação inválida.";
}
botaoCalcular.addEventListener("click", () => {
const num1 = Number(inputNumero1.value);
const num2 = Number(inputNumero2.value);
const operacao = selectOperacao.value;
if (inputNumero1.value.trim() === "" || inputNumero2.value.trim() === "") {
campoResultado.textContent = "Preencha os dois números.";
return;
}
const resultado = calcular(num1, num2, operacao);
campoResultado.textContent = `Resultado: ${resultado}`;
});
</script>
</body>
</html>
Conceitos importantes por trás da calculadora
Number(...)converte valores de input (string) para número.- Condicionais (
if) escolhem qual operação executar. - Função
calcular(...)separa a lógica de negócio da interface. - Evento de clique dispara o cálculo quando o usuário interage.
- Validações impedem comportamentos inesperados.
Boas práticas usadas
- Código dividido em etapas claras (captura, validação, cálculo, exibição).
- Mensagens amigáveis para o usuário.
- Lógica central isolada em função reutilizável.
- Tratamento de caso especial (divisão por zero).
Próximas evoluções possíveis
Você pode enriquecer esse projeto com:
- Histórico de operações.
- Botão de limpar campos.
- Suporte a porcentagem e potência.
- Teclado numérico visual com botões.
- Cálculo ao pressionar Enter.
- Formatação de casas decimais no resultado.