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

[Dúvida] Como funcionou a reafatoração?

O codigo funciona de ambos os jeitos. Eu nao entendi a logica de uma linha em especifica Caso alguem poder me explicar eu agradeço. O codigo sem refatorar está assim:

function filtrarPorCategoria(filtro) {
    const videos = document.querySelectorAll(".videos__item");

    for(let video of videos) {
        let categoria = video.querySelector(".categoria").textContent.toLocaleLowerCase();
        let valorFiltro = filtro.toLocaleLowerCase();

        if(!categoria.includes(valorFiltro) && valorFiltro !='tudo') {
            video.style.display = 'none';
        } else {
            video.style.display = 'block';
        }
        
    }
}

Ele reafatorado está assim :

function filtrarPorCategoria(filtro) {
    const videos = document.querySelectorAll(".videos__item");
    const valorFiltro = filtro.toLocaleLowerCase();

    videos.forEach((video) => {
        const categoria = video.querySelector(".categoria").textContent.toLocaleLowerCase();

        video.style.display = valorFiltro !='tudo' ? categoria.includes(valorFiltro) ? 'block' : 'none' : 'block';  | essa linha nao entendi a logica por tras pricipalmente na parte do  'block' : 'none' : 'block';
    });
}
2 respostas
solução!

Oi, Gabriel, tudo bem?

A linha em questão usa uma combinação de operadores ternários para decidir o valor de display de cada vídeo. O operador ternário é uma forma concisa de escrever uma instrução if-else. A sintaxe básica é: condição ? valorSeVerdadeiro : valorSeFalso.

No código refatorado:

video.style.display = valorFiltro != 'tudo' ? categoria.includes(valorFiltro) ? 'block' : 'none' : 'block';

Vamos quebrar isso em partes:

  1. valorFiltro != 'tudo': esta é a condição principal. Se o filtro é diferente de 'tudo', então verificamos a próxima condição.
  2. categoria.includes(valorFiltro) ? 'block' : 'none': esta é a condição aninhada. Se a categoria do vídeo inclui o filtro, então o vídeo é mostrado (display = 'block'); se não, o vídeo é escondido (display = 'none').
  3. Se o filtro for igual a 'tudo', então todos os vídeos são mostrados (display = 'block').

Essencialmente, o que essa linha faz é verificar:

  • Se o filtro é 'tudo', todos os vídeos são mostrados.
  • Se o filtro não é 'tudo', só os vídeos que correspondem à categoria especificada no filtro são mostrados.

A refatoração torna o código mais compacto e, para muitos, mais legível uma vez que a familiaridade com o operador ternário é estabelecida. Além disso, reduz a repetição de código ao definir valorFiltro e categoria uma única vez, ao contrário do loop for original que faz essas operações repetidamente dentro do loop.

Espero ter ajudado. Caso tenha dúvidas, conte com o fórum. Abraços!

Caso este post tenha lhe ajudado, por favor, marcar como solucionado ✓. Bons Estudos!

Ola, Rodrigo Silva Harder tudo bem?

Agora sim entendi como funcionou o codigo !!! Obrigado por retirar minha duvida !!