Solucionado (ver solução)
Solucionado
(ver solução)
2
respostas

Um pouco perdido sobre o operador ternário.

Fala pessoal, tudo bom? Minha dúvida é a seguinte:

let novosNumeros = numeros.map(item =>  item % 2 ? item * 2 : item);

Tecnicamente o operador ternário não identificaria a primeira sintase ( item % 2) como verdadeira, uma vez que não há um operador NOT (!) nessa situacao?

Pergunto porque eu vi que no forúm já fizeram essa pergunta e um dos instrutores respondeu que:

"Se o resto da divisão por 2 for diferente de 0 isso é verdadeiro, ele retorna o item * 2, caso for 0 ele irá retornar falso então ele retorna o próprio item"

Ele também deixou um link da documentacão oficial para sanar a dúvida e eu fui checar. O link é esse: https://developer.mozilla.org/pt-BR/docs/Web/JavaScript/Reference/Operators/Operador_Condicional

Quando li a documentacão aponta a seguinte informacão:

"Se condition é true, o operador retornará o valor de expr1; se não, ele retorna o valor de exp2"

Agora o ponto da minha pergunta:

Lendo o código eu interpreto que se o resto da sobra da divisão por 2 é TRUE ele deveria manter o item e caso fosse FALSE ele multiplicaria. Para entender melhor a minha dúvida, eu escreveria o código da maneira abaixo:

let novosNumeros = numeros.map(item =>  item % 2 ? item : item * 2 );

Poderia explicar um pouco mais detalhado para mim porque fiquei meio confuso nisso e comparando o que o rapaz disse na outra pergunta do forum com o que está escrito na documentacão, me deixou mais confuso ainda.

Desculpa pelo texto gigante e obrigado pela paciência.

2 respostas
solução!

Boa tarde, Paulo! Como vai?

A explicação do instrutor está de acordo com o que é dito na documentação. Veja que o exercício pede que o valor seja dobrado quando o item for ímpar. Para essa condição ser verdadeira teremos que ter item % 2 != 0. Dessa forma poderemos escrever o nosso if.

if (item % 2 != 0) {
     return item * 2;
} else {
     return item;
} 

Mas no JS qualquer valor numérico diferente de 0 é considerado true. Então podemos reescrever o nosso if da seguinte forma.

if (item % 2) {
     return item * 2;
} else {
     return item;
} 

E, por fim, baseado nesse if podemos escrever o seu equivalente em forma ternária.

item % 2
     ? item * 2
     : item;

Que é exatamente o mesmo que vc mostrou no início do seu post. Minha dica é que vc se vc não está acostumado a usar o if ternário então o ideal é começar usando apenas ifs normais e depois tentar evoluir eles para ternários como fiz na minha explicação. Com o tempo vc vai pegando o jeito e ficará intuitivo pra vc.

Qualquer coisa é só falar!

Grande abraço e bons estudos, meu aluno!

Gabriel, muito obrigado pela resposta e muito obrigado pelo esclarecimento mais detalhado. Eu não tinha pensado na questão de que todo número diferente de 0 é true no JS. Agora faz todo o sentido e clareou.

Muito obrigado mesmo! :)