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

[Dúvida] Dúvida sobre boas práticas

Pois bem, antes de qualquer coisa, eu preciso deixar claro que, eu costumo ver o vídeo e depois fazer tudo o que eu vi no vídeos só que do meu jeito, sem copiar código do vídeo, e se der algum erro, a última coisa que eu faço é olhar os códigos e comparar linha por linha.

Nesse caso, não está dando nenhum, é só que eu fiquei com uma dúvida a respeito do código que eu fiz.

Esse é o código:

"use strict"

const livros = require('./constLivros')
let [ menor ] = livros

for (let i = 0; i < livros.length; i++) {
 livros[i].valor < menor.valor ? menor = livros[i] : menor = menor
}

Eu omiti o console.log, já que ele seria irrelevante aqui, mas a minha dúvida é com relação ao operador ternário.

Vou deixar um recorte do código só pra facilitar a visualização:

livros[i].valor < menor.valor ? menor = livros[i] : menor = menor

O que me incomoda é o que vem depois dos :, como podem ver, caso isso fosse um if convencional, não seria necessário colocar o menor = menor, eu coloquei isso só pra dizer que nada de diferente iria acontecer com o código e que era pra ele continuar rodando, o que funciona na prática, mas me deixa bem incomodado ver isso no código.

Até procurei saber se havia alguma palavra reservada que suprisse a minha necessidade de não fazer nada e só continuar, e falando nisso, eu encontrei, a continue, só que ao que parece ele é feito pra ser usado com o while e não com for, fora que, se fosse, ainda assim não seria bom, já que ele continua até que a condição dele se desfaça, o que, nesse caso, poderia não acontecer, e também ficaria muito longo o que já vai contra a ideia do operador ternário.

Queria saber se existe alguma forma de tornar o else do operador ternário ignorável sem fazer o que eu fiz, ou se eu poderia utilizar essa sintaxe do if sem ter nenhum problema segundo as boas práticas.

Sintaxe que eu mencionei:

if (livros[i].valor < menor.valor) { menor = livros[i] } 
2 respostas
solução!
  • "Queria saber se existe alguma forma de tornar o else do operador ternário ignorável." Você pode utilizar o null no lugar de fazer menor = menor
livros[i].valor < menor.valor ? menor = livros[i] : null

Você também pode fazer assim...

menor = livros[i].valor < menor.valor ? livros[i] : menor

Também pode utilizar o if sem problemas. Lembrando que nesse caso as {} não são obrigatórias. Então pode ser da forma que você fez ou assim...

if (livros[i].valor < menor.valor) { 
    menor = livros[i] 
}
if (livros[i].valor < menor.valor) menor = livros[i] 
if (livros[i].valor < menor.valor) 
        menor = livros[i] 

Que isso Douglas, muito obrigado, eu não conseguindo pensar em uma única solução, quando de repente me surgem várias, realmente, muito obrigado.

Sei que deve parecer bem bobo pra você, mas nunca tinha parado pra pensar em usar o null nesses momentos, agora que você me mostrou, realmente faz todo sentido. Gostei muito das outras opções também, atribuindo o resultado do operador ternário diretamente na declaração da variável também foi uma ideia muito legal, só tenho que tomar cuidado com os problemas de escopo, mas sem dúvidas, é muito interessante também, fora que eu não tinha percebido o quanto o if pode ser "maleável" dentro dos códigos.

Realmente, estou agradecido, vou lembrar dessas opções pra continuar criando códigos mais enxutos e criativos.