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

Qual código é melhor?

Fiz um pouco diferente o código da aula. Existe alguma forma que é melhor ou tem mais boas práticas?

Meu código:

const alunos = ['João', 'Juliana', 'Caio', 'Ana'];
const medias = [10, 8, 7.5, 9];

const lista = [alunos, medias];

function exibeNomeENota(aluno){
    const indice = lista[0].indexOf(aluno);
    if(indice >= 0){
        const mediaAluno = lista[1][indice];
        console.log(`${aluno} tem a média ${mediaAluno}`);
    }
    else{
        console.log('Estudante não existe na lista');
    }
}

exibeNomeENota('Juliana');
exibeNomeENota('Vini');

Código da aula:

const alunos = ['João', 'Juliana', 'Caio', 'Ana'];
const medias = [10, 8, 7.5, 9];

const lista = [alunos, medias];

function exibeNomeENota(aluno){
    if(lista[0].includes(aluno)){
        const indice = lista[0].indexOf(aluno);
        const mediaAluno = lista[1][indice];
        console.log(`${aluno} tem a média ${mediaAluno}`);
    }
    else{
        console.log('Estudante não existe na lista');
    }
}

exibeNomeENota('Juliana');
exibeNomeENota('Vini');
3 respostas

Olá Luidi. Tudo bem?

Que bom ver você explorando diferentes abordagens no seu código! Ambas as versões que você apresentou são válidas e funcionam corretamente para o que se propõem. No entanto, há algumas nuances que podem ser consideradas em termos de boas práticas.

No seu código, você utiliza o método indexOf diretamente para verificar se o aluno está na lista, enquanto no código da aula, o método includes é utilizado antes de indexOf. Usar includes pode ser considerado uma boa prática porque ele é mais claro em relação à intenção do código: você está explicitamente verificando se o elemento está presente antes de buscar seu índice. Isso pode tornar o código mais legível para outras pessoas que o leiam.

Aqui está um exemplo prático para ilustrar as diferenças:

  1. Seu Código:

    const indice = lista[0].indexOf(aluno);
    if(indice >= 0){
        // código
    }
    
  2. Código da Aula:

    if(lista[0].includes(aluno)){
        const indice = lista[0].indexOf(aluno);
        // código
    }
    

No seu código, você verifica se o índice é maior ou igual a zero, o que é uma abordagem válida. No entanto, ao usar includes, você faz essa verificação de forma mais semântica e direta. Além disso, includes pode ser melhor em termos de performance, pois ele para a busca assim que encontra o elemento, enquanto indexOf continua a busca mesmo após encontrar o elemento, caso você não precise do índice.

Ambas as abordagens são corretas, mas a escolha entre uma e outra pode depender do contexto e da preferência por clareza e legibilidade do código.

Espero ter ajudado e bons estudos!

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

Entendi que usar o includes primeiro deixa o código mais legível, mas não entendi essa parte: "enquanto indexOf continua a busca mesmo após encontrar o elemento, caso você não precise do índice.", o indexOf não para a busca quando encontra o índice da primeira ocorrência? E em termos de performance não seria melhor usar somente o método indexOf em vez dele e mais o método includes? Mas a legibilidade é preferível do que esse pequeno ganho de performance, né?

solução!

Olá, Luidi!

Sobre sua última dúvida: o método indexOf realmente para a busca assim que encontra a primeira ocorrência você tem razão, então o comentário anterior sobre "continuar a busca" foi um equívoco. Em termos de performance, usar apenas indexOf é mais eficiente do que combinar includes e indexOf, já que você realiza uma busca a menos.

No entanto, a legibilidade e clareza do código também são importantes, principalmente em projetos maiores ou colaborativos. Usar includes seguido de indexOf deixa explícita a intenção de verificar primeiro a existência de um item antes de acessar seu índice, o que facilita a compreensão do código.

Fico à disposição. Abraços e bons estudos!