Article image

MN

Marcelo Neves05/05/2025 15:18
Compartilhe

Vamos fazer uma Calculadora em JavaScript?

    Objetivo

    Criar uma calculadora funcional com layout bonito, digitando e executando contas básicas (+, −, ×, ÷) no navegador.

    🧱 Estrutura Geral do Projeto

    O projeto está todo contido em um único arquivo HTML. Ele é dividido em 3 partes principais:

    1. <head> – configurações da página e estilos (CSS)
    2. <body> – o conteúdo visível da calculadora (HTML)
    3. <script> – a lógica de funcionamento (JavaScript)

    1️⃣ HTML – Estrutura da Calculadora

    <div class="calc">
      <input type="text" id="display" readonly>
      <div class="buttons">
          <!-- Botões numéricos e operadores -->
          <button onclick="appendToDisplay('7')">7</button>
          ...
          <button onclick="calculate()">=</button>
          <button onclick="clearDisplay()">C</button>
          <button onclick="appendToDisplay('/')">/</button>
      </div>
    </div>
    

    Explicando:

    • div.calc: container principal da calculadora.
    • input#display: campo onde os números e resultados aparecem. O atributo readonly evita que o usuário digite manualmente (tudo é inserido pelos botões).
    • div.buttons: organiza os botões num grid.
    • button: cada botão chama uma função via onclick.

    2️⃣ CSS – Visual elegante e centralizado

    .calc {
      width: 300px;
      margin: 50px auto;
      padding: 20px;
      border: 1px solid #ccc;
      border-radius: 5px;
      box-shadow: 0 0 10px rgba(0, 0, 0, 0.2);
      background-color: #fff;
    }
    

    Explicando os pontos principais:

    • Centralização: margin: 50px auto centraliza horizontalmente a calculadora na tela.
    • Design clean: com border-radius, box-shadow e cores neutras, temos um visual moderno.
    • Grid para botões:
    .buttons {
      display: grid;
      grid-template-columns: repeat(4, 1fr);
      gap: 10px;
    }
    
    • Isso cria um grid com 4 colunas iguais e espaçamento entre os botões.

    3️⃣ JavaScript – A lógica da calculadora

    let display = document.getElementById('display');
    

    Funções:

    appendToDisplay(value)

    Adiciona o valor do botão ao campo display.

    function appendToDisplay(value) {
      display.value += value;
    }
    

    calculate()

    Avalia a expressão digitada e mostra o resultado.

    function calculate() {
      try {
          display.value = eval(display.value);
      } catch (error) {
          display.value = 'Erro';
      }
    }
    

    ⚠️ eval() é uma função JavaScript que executa strings como código. É poderosa, mas perigosa em ambientes com entrada do usuário não confiável.

    🔄 clearDisplay()

    Limpa o visor.

    function clearDisplay() {
      display.value = '';
    }
    

    4️⃣ 🧮 Explicando os Botões da Calculadora (HTML + JS)

    📌 Onde estão os botões?

    Eles estão dentro da <div class="buttons">:

    <div class="buttons">
      <button onclick="appendToDisplay('7')">7</button>
      <button onclick="appendToDisplay('8')">8</button>
      ...
      <button onclick="calculate()">=</button>
      <button onclick="clearDisplay()">C</button>
      <button onclick="appendToDisplay('/')">/</button>
    </div>
    

    ✅ Como funcionam?

    1. Botões de números e operadores

    Esses botões chamam a função appendToDisplay(valor) quando clicados.

    Exemplo:

    <button onclick="appendToDisplay('7')">7</button>
    

    🔹 Quando o botão "7" é clicado, ele envia o número 7 para o campo de exibição (<input>), através da função:

    function appendToDisplay(value) {
      display.value += value;
    }
    

    Essa função pega o valor atual do display e acrescenta o valor do botão clicado.

    Ela funciona para todos os números e também para os operadores +, -, *, /, ..

    2. Botão = (igual)

    <button onclick="calculate()">=</button>
    

    🔹 Esse botão executa o cálculo da expressão inteira usando:

    function calculate() {
      try {
          display.value = eval(display.value);
      } catch (error) {
          display.value = 'Erro';
      }
    }
    

    🔧 A função eval() interpreta e resolve a expressão matemática como uma conta de verdade.

    Se o usuário digitar 5+3*2 e clicar em =, o resultado será 11.

    🔒 O uso de try/catch evita que erros "quebrem" a calculadora — se alguém digitar algo inválido, aparece a palavra "Erro".

    3. Botão C (Clear / Limpar)

    <button onclick="clearDisplay()">C</button>
    

    🔹 Esse botão limpa o visor:

    function clearDisplay() {
      display.value = '';
    }
    

    Ele simplesmente apaga o conteúdo do campo de input.

    4. Botão ponto (.)

    <button onclick="appendToDisplay('.')">.</button>
    

    🔹 Esse botão serve para inserir números com casas decimais, como 3.14 ou 7.5.

    💡 Código completo para testar

    <!DOCTYPE html>
    <html lang="pt-br">
    <head>
      <meta charset="UTF-8">
      <meta name="viewport" content="width=device-width, initial-scale=1.0">
      <title>Calculadora CodandoBrasil</title>
      <style>
          body {
              font-family: Arial, sans-serif;
              text-align: center;
              background-color: #f9f9f9;
          }
    
          .calc {
              width: 300px;
              margin: 50px auto;
              padding: 20px;
              border: 1px solid #ccc;
              border-radius: 5px;
              box-shadow: 0 0 10px rgba(0, 0, 0, 0.2);
              background-color: #fff;
          }
    
          input[type="text"] {
              width: 100%;
              padding: 15px;
              margin-bottom: 10px;
              font-size: 20px;
              border: 1px solid #ccc;
              border-radius: 5px;
              box-sizing: border-box;
          }
    
          .buttons {
              display: grid;
              grid-template-columns: repeat(4, 1fr);
              gap: 10px;
          }
    
          button {
              padding: 20px;
              font-size: 18px;
              border: none;
              cursor: pointer;
              border-radius: 5px;
              background-color: #f0f0f0;
              transition: background-color 0.3s;
          }
    
          button:hover {
              background-color: #e0e0e0;
          }
    
          button:active {
              background-color: #d0d0d0;
          }
      </style>
    </head>
    <body>
      <div class="calc">
          <input type="text" id="display" readonly>
          <div class="buttons">
              <button onclick="appendToDisplay('7')">7</button>
              <button onclick="appendToDisplay('8')">8</button>
              <button onclick="appendToDisplay('9')">9</button>
              <button onclick="appendToDisplay('+')">+</button>
              <button onclick="appendToDisplay('4')">4</button>
              <button onclick="appendToDisplay('5')">5</button>
              <button onclick="appendToDisplay('6')">6</button>
              <button onclick="appendToDisplay('-')">-</button>
              <button onclick="appendToDisplay('1')">1</button>
              <button onclick="appendToDisplay('2')">2</button>
              <button onclick="appendToDisplay('3')">3</button>
              <button onclick="appendToDisplay('*')">*</button>
              <button onclick="appendToDisplay('0')">0</button>
              <button onclick="appendToDisplay('.')">.</button>
              <button onclick="calculate()">=</button>
              <button onclick="clearDisplay()">C</button>
              <button onclick="appendToDisplay('/')">/</button>
          </div>
      </div>
    
      <script>
          let display = document.getElementById('display');
    
          function appendToDisplay(value) {
              display.value += value;
          }
    
          function calculate() {
              try {
                  display.value = eval(display.value);
              } catch (error) {
                  display.value = 'Erro';
              }
          }
    
          function clearDisplay() {
              display.value = '';
          }
      </script>
    </body>
    </html>
    

    Você pode encontrar outros conteúdos meus em:

    https://codandobrasil.com.br/projetos/

    Espero que tenham gostado, não deixem de fazer a frmção de JavaScripit da DIO, é é TOP demais!

    Compartilhe
    Comentários (2)
    Marcelo Neves
    Marcelo Neves - 06/05/2025 11:53

    Sua pergunta é excelente e demonstra um olhar estratégico para o aprendizado progressivo em JavaScript e desenvolvimento web. Particularmente curto muito projetos práticos, por isso escolhi a DIO para me manter atualizado a comunidade é incrível!

    Acredito que criar projetos como uma calculadora é sim uma forma altamente eficaz para iniciantes (pelo menos para mim), porque permite aplicar conceitos de lógica de programação, DOM, eventos e estrutura de código de maneira prática e visual. Além disso, a interface simples de uma calculadora ajuda o aluno a manter o foco na funcionalidade e clareza do código, sem a distração de projetos mais complexos.

    Sobre o desenvolvimento de habilidades com esse tipo de projeto:


    • Consolida a lógica condicional e aritmética.
    • Exercita a manipulação do DOM, fundamental em aplicações interativas.
    • Introduz boas práticas de separação de responsabilidades (HTML para estrutura, CSS para estilo, JS para lógica).
    • Estimula a criação de códigos reutilizáveis e bem organizados.


    Para evoluir o projeto e torná-lo mais avançado, aqui vão algumas sugestões (algumas delas eu mesmo estou implementando):


    🔢 1. Suporte a funções matemáticas avançadas

    Use a biblioteca Math do JavaScript para adicionar:

    • Funções trigonométricas: Math.sin(), Math.cos(), Math.tan()
    • Potenciação e raízes: Math.pow(), Math.sqrt()
    • Logaritmos e exponenciais: Math.log(), Math.exp()


    🌐 2. Integração com APIs externas

    Exemplos:

    • Conversão de moedas: Integrar com APIs como ExchangeRate API ou AwesomeAPI.
    • Conversão de unidades (temperatura, distância, massa): Criar uma calculadora com chamadas a APIs específicas ou regras matemáticas locais.


    💡 3. Boas práticas e escalabilidade

    • Refatorar o código em módulos ou componentes reutilizáveis.
    • Usar event delegation para tratar os botões de maneira mais eficiente.
    • Adotar testes automatizados para validar os cálculos.
    • Melhorar a acessibilidade e usabilidade com teclas de atalho e feedback visual/auditivo.


    🎨 4. Interface moderna e responsiva

    • Aplicar conceitos de design responsivo com CSS Flexbox/Grid.
    • Adicionar temas claro/escuro, animações e transições.

    Essa abordagem progressiva transforma um projeto simples em um laboratório completo de aprendizado, que prepara o estudante para desafios maiores com segurança. Espero ter ajudado! =)

    DIO Community
    DIO Community - 06/05/2025 11:36

    Marcelo, seu artigo sobre a criação de uma calculadora em JavaScript é uma excelente introdução ao desenvolvimento de interfaces e manipulação de lógica de programação. Você explicou de maneira clara como funciona cada parte da implementação, desde a estrutura básica com HTML até a lógica por trás dos cálculos com JavaScript.

    Com base no que você apresentou, você acredita que a prática de criar projetos como esse pode ser uma forma eficaz para iniciantes desenvolverem suas habilidades em JavaScript e, ao mesmo tempo, aprenderem sobre boas práticas de design de interfaces? Além disso, como você recomendaria aprimorar essa calculadora para que ela suportasse operações mais complexas, como funções trigonométricas ou até mesmo integrações com APIs para conversões de unidades?