3
respostas

Usando Ternário e Do/While

let cont = contPar = contImpar = 0;

do {
  cont % 2 == 0 ? contPar++ : contImpar++;
  cont++;
} while (cont <= 100);

console.log("Pares:", contPar);
console.log("Impares:", contImpar);
3 respostas

Olá, Luis! Como vai?

Parabéns pela resolução da atividade!

Observei que você explorou o uso do laço do...while para realizar a contagem de números com JavaScript, utilizou muito bem o operador ternário para separar pares e ímpares e ainda compreendeu a importância da incrementação para controlar corretamente o fluxo da repetição.

Continue postando as suas soluções, com certeza isso ajudará outros estudantes e tem grande relevância para o fórum.

Uma dica interessante para o futuro é simplificar a lógica utilizando o for. Assim:

let contPar = 0;
let contImpar = 0;

for (let i = 0; i <= 100; i++) {
  i % 2 === 0 ? contPar++ : contImpar++;
}

console.log("Pares:", contPar);
console.log("Ímpares:", contImpar);

Isso faz a contagem de forma mais direta e legível, mantendo o mesmo resultado.

Fico à disposição! E se precisar, conte sempre com o apoio do fórum.

Abraço e bons estudos!

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

Fala, Luis! Bom código pra puxar um debate.

Vou cutucar dois pontos aqui, tá? Sem maldade — é pra gente pensar junto.

1) Ternário como "fazedor de coisas"

Esse é o tipo de código que funciona, passa no teste, mas vai fazer alguém no code review levantar a sobrancelha. O ternário foi pensado pra retornar um valor, não pra executar side effects. Quando você escreve:

cont % 2 == 0 ? contPar++ : contImpar++;

Você tá basicamente usando um if/else disfarçado de expressão. E aí a gente cai naquela pergunta: "funcionar" é o mesmo que "ser legível"?

Um if/else aqui deixa a intenção explícita — "se for par, incrementa um; senão, incrementa outro". O ternário esconde isso atrás de uma sintaxe que o cérebro pode associar com "me devolve um valor".

Ternário brilha quando você tá atribuindo:

const tipo = cont % 2 === 0 ? 'par' : 'ímpar';

Percebe a diferença? Aqui o ternário tá cumprindo o papel dele: escolher um valor.

2) A armadilha silenciosa do let

Essa aqui é mais traiçoeira:

let cont = contPar = contImpar = 0;

Parece que tá declarando três variáveis com let, né? Mas não. Só cont ganha o let. As outras duas (contPar e contImpar) vazam pro escopo global como variáveis implícitas. Em "use strict" isso estoura um ReferenceError na sua cara.

O seguro é:

let cont = 0, contPar = 0, contImpar = 0;

Ou, se preferir deixar mais claro:

let cont = 0;
let contPar = 0;
let contImpar = 0;

O código funciona? Funciona. Mas a gente que tá aprendendo (e quem já tá no mercado também) precisa treinar esse olhar de "funciona, mas será que comunica bem?". Código a gente escreve uma vez e lê quinhentas.

Bora trocar ideia!

Perfeito! Agradeço demais e levo de coração todo o aprendizado! Obrigado pelo feedback... Eu mesmo não tinha atentado para o caso de usar o ternário em atribuições e foi bom ter isso em mente e nem para o bug quando encadeei as declarações das variáveis. Apesar de ser intuitivo, deixei passar!

A princípio eu usei o ternário por 3 motivos:
1 - É um código muito simples.
2 - O objetivo é mais didático que funcional.
3 - Todos resolveram com IF, então não teria muito sentido psotar mais um código igual.

Apesar de para mim ser um código claro de entendimento! Posso, claro, em códigos maiores facilitar a clareza com estruturas mais intuitivas.

Valeu Vinny por chegar sempre junto nas dúvidas e exclarecimentos. Continje assim!

Corrige meu novo código:

let cont = contPar, contImpar = 0;

do {
  cont % 2 == 0 ? contPar++ : contImpar++;
  cont++;
} while (cont <= 100);

console.log("Pares:", contPar);
console.log("Impares:", contImpar);