Antes mesmo de assistir o segundo vídeo quebrei a cabeça para resolver sozinho. Tive que pesquisar bastante e usei IA para sugerir como fazer o que eu desejava e, depois, para entender os conceitos da linguagem que estão por trás dela.
Em primeiro lugar, sequer cogitei usar o HTML como fonte de informação, uma vez que ele pode ser alterado diretamente no browser, o que ofereceria uma boa oportunidade de fraude. Além disso, separar o produto do valor por split() não funcionaria caso houvesse um produto como um "mouse-pad", por exemplo.
Pesquisando descobri que informações, como a lista dos produtos disponíveis e seus preços, vem de um back-end (o que quer que isso seja) e por isso resolvi colocar como constante no programa, e não no HTML. A IA me ensinou a usar dicionários, o que facilitou muito a minha vida.
Daí veio a ideia de representar o carrinho também como uma lista. Isso foi mais complicado mas, por acidente, usar também um dicionário. Como é um exemplo, iniciei com o que estava na imagem inicial.
Ao invés de ficar somando e subtraindo o total (sei lá, fiquei com medo de me confundir), criei uma função que soma o carrinho todo e resulta o total.
Daí, mostrar o carrinho e total ficou uma coisa sempre certa. O que estiver nas variáveis, estará na tela, evitando o bug que os professores corrigiram durante a construção.
Quando comecei a adicionar coisas no carrinho percebi que não fazia sentido deixar o mesmo item mais de uma vez como na solução dos professores, e sim mudar as quantidades. Como estou trabalhando com as variáveis, deu bastante trabalho, mas funcionou.
Mas e tirar os itens do carrinhos? Descobri que o meu programa (assim como os dos professores) aceita números negativos. E daí, digitando números negativos o programa ajusta sozinho o valor do item e o total.
Mas e quando chega a zero? E se baixar de zero ? Fiz mais uma modificação para retirar o item do carrinho se a quantidade for menor do que 1.
Daí tive que lidar com a ausência de preenchimento de quantidade. Descobri o que é NaN, e decidi que se o usuário deixar a quantidade em branco, o item do carrinho é removido. Poderia fazer diferente. Foi uma escolha.
No fim meu programa ficou muito mais complicado do que o do exemplo mas com as seguintes vantagens em relação ao exemplo dos professores:
- Funciona com produtos com hífen ("-") no nome
- Não usa o HTML como fonte de informação - o que é uma péssima prática
- Foca apenas no controle do carrinho sem ter que preocupar com a soma, que é calculada a partir do carrinho
- Evita que um mesmo produto entre duas vezes no carrinho
- Permite, ainda de que um modo improvisado, a retirada de quantidades e mesmo de itens do carrinho
O código não cabe aqui. Vou ver como posto