1
resposta

[Projeto] Resolução Carinho de Compras

function adicionar() {
    let produto = document.getElementById("produto").value;
    // O método split() é usado para dividir uma string em um array de substrings, com base em um separador especificado. No caso, o separador é o caractere "-". O resultado é um array onde cada elemento é uma parte da string original que estava separada pelo caractere "-".
    const partes = produto.split("-");
    // O método parseFloat() é usado para converter uma string em um número de ponto flutuante (decimal). Ele analisa a string e retorna o valor numérico correspondente. Se a string não puder ser convertida em um número, ele retornará NaN (Not-a-Number).
    let nomeProduto = partes[0];
    let textoPreço = (partes[1]);
    let numeroLimpo = textoPreço.replace("R$", "").trim();
    let valorProduto = parseFloat(numeroLimpo);
    // O método replace() é usado para substituir uma parte de uma string por outra. No caso, ele está sendo usado para remover o símbolo "R$" da string valorProduto. 
    // O método trim() é usado para remover espaços em branco no início e no final da string resultante.
    // O método getElementById() é usado para acessar um elemento HTML com um ID específico. Ele retorna uma referência ao elemento, permitindo que você manipule suas propriedades e valores. No caso, ele está sendo usado para obter o valor do campo de entrada com o ID "quantidade".
    let quantidade = document.getElementById("quantidade").value;
    if (quantidade <= 0) {
        alert("A quantidade deve ser maior que zero.");
        return;
    }
    let quantidadeLimpa = parseInt(quantidade);
    // O método parseInt() é usado para converter uma string em um número inteiro. Ele analisa a string e retorna o valor numérico correspondente. Se a string não puder ser convertida em um número inteiro, ele retornará NaN (Not-a-Number).
    let valorTotal = valorProduto * quantidadeLimpa;
    totalGeral = totalGeral + valorTotal;
    document.getElementById("quantidade").value = "";
    let totalGeralFormatado = document.getElementById("valor-total").innerHTML = ` R$${totalGeral.toFixed(2)}`;
    // O método toFixed() é usado para formatar um número com um número específico de casas decimais. No caso, ele está sendo usado para formatar o valor total geral (totalGeral) com 2 casas decimais, garantindo que o valor seja exibido corretamente como uma quantia monetária.;
    // O operador de adição (+) é usado para somar o valor total do produto (valorTotal) ao total geral (totalGeral). Ele atualiza o valor de totalGeral com a nova soma.
    // O operador de multiplicação (*) é usado para calcular o valor total do produto, multiplicando o preço unitário (valorProduto) pela quantidade (quantidadeLimpa).
    let listaProdutos = document.getElementById("lista-produtos").innerHTML;
    // O método innerHTML é usado para acessar ou modificar o conteúdo HTML de um elemento. No caso, ele está sendo usado para obter o conteúdo atual do elemento com o ID "lista-produtos".
    let novoProduto = `<section><span class="texto-azul">${quantidadeLimpa}x</span> ${nomeProduto} <span class="texto-azul">R$${valorTotal.toFixed(2)}</span></section>`;
    // A sintaxe `${}` é usada para inserir expressões JavaScript dentro de uma string. No caso, ela está sendo usada para incluir as variáveis nomeProduto, valorProduto, quantidadeLimpa e valorTotal dentro da string que representa o novo item da lista de produtos.
    document.getElementById("lista-produtos").innerHTML = listaProdutos + novoProduto;
    // O operador de adição (+) é usado para concatenar a string existente (listaProdutos) com a nova string (novoProduto), resultando em uma única string que contém todos os itens da lista de produtos.
}

let totalGeral = 0;
// A variável totalGeral é declarada e inicializada com o valor 0. Ela é usada para armazenar o valor total acumulado dos produtos adicionados ao carrinho de compras. Cada vez que um novo produto é adicionado, o valor total do produto é calculado e somado ao totalGeral, permitindo que o valor total seja atualizado corretamente.

function limpar() {
    document.getElementById("lista-produtos").innerHTML = "";
    document.getElementById("valor-total").innerHTML = "R$0,00";
    document.getElementById("quantidade").value = "";
    totalGeral = 0;
}

1 resposta

Oii, Lucas!

Muito obrigada por compartilhar. Você migrou de uma lógica de alternância simples no AluGames para a construção de um sistema de processamento de dados mais confiável no Carrinho de Compras.

Sua capacidade de decompor o problema é notável. Ao usar o split("-") e o replace(), você demonstrou que entende como "limpar" os dados que vêm do HTML antes de realizar cálculos matemáticos.

Você aplicou corretamente o fluxo de extração de dados. Muitas vezes, os valores no HTML vêm acompanhados de símbolos (como "R$") ou espaços, e tratá-los com trim() e parseFloat() evita erros de cálculo que resultariam em NaN.

A adição da condicional if (quantidade <= 0) é uma excelente prática de UX (User Experience). Impedir que o usuário adicione produtos sem quantidade ou com valores negativos protege a integridade do seu totalGeral.

Ao utilizar o innerHTML para acumular strings (listaProdutos + novoProduto), você está criando elementos em tempo de execução. Essa é a base de muitas aplicações modernas que atualizam a interface sem recarregar a página.

Pra tornar seu código ainda mais limpo e legível, considere estes pontos:

  1. Limpeza de comentários: Seus comentários estão muito didáticos, o que é ótimo para o aprendizado. Em projetos reais, no entanto, evitamos explicar o que métodos nativos (como parseInt) fazem, focando apenas na regra de negócio.
  2. Template literals: Você já está usando as crases para criar o novoProduto, o que torna o código muito mais fácil de ler do que a concatenação antiga com o sinal de +.

O seu progresso nos projetos de lógica mostra que você já tem uma base sólida pra lidar com formulários e listas. Continue firme nos estudos.

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