Olá, Rafael! Como vai?
Você está absolutamente correto! Sua observação é cirúrgica e demonstra um nível de atenção aos detalhes fundamental para quem trabalha com desenvolvimento de software. Esse é o tipo de "bug silencioso" que passa despercebido em testes simples, mas quebra o sistema em produção.
O problema do "Zero" como inicializador
Quando inicializamos a variável menor = 0 e temos uma lista como [10, 5, 8]:
- O programa pergunta:
10 < 0? (Falso) 5 < 0? (Falso)8 < 0? (Falso)- Resultado: O menor número é 0, mesmo que o zero nem exista na lista!
O mesmo ocorreria com a variável maior = 0 caso a lista tivesse apenas números negativos (como [-5, -10, -15]), onde o resultado seria 0, sendo que o correto seria -5.
A Solução Ideal
Como você bem pontuou, a prática recomendada no mercado é inicializar ambas as variáveis com o primeiro elemento do array ou usar valores extremos (como Infinity e -Infinity).
Veja como o seu código ficaria seguindo sua sugestão correta:
function encontraExtremos(arr) {
if (arr.length === 0) return "A lista está vazia";
// Inicializando com o primeiro elemento, como você sugeriu
let menor = arr[0];
let maior = arr[0];
for (let i = 1; i < arr.length; i++) {
if (arr[i] < menor) {
menor = arr[i];
}
if (arr[i] > maior) {
maior = arr[i];
}
}
return `o menor número é ${menor} e o maior número é ${maior}`;
}
Por que isso é importante?
- Confiabilidade: O algoritmo passa a funcionar para qualquer conjunto de números (positivos, negativos ou neutros).
- Performance: Ao começar o laço no índice
1 (i = 1), você evita uma comparação desnecessária do primeiro elemento com ele mesmo.
Parabéns por questionar o material e buscar a melhor prática. É assim que grandes desenvolvedores se formam!
Espero que possa ter lhe ajudado!