Oi Eduardo,
Sua dúvida é muito pertinente! O método .sort()
em JavaScript, quando usado sem uma função de comparação personalizada, na verdade não garante um embaralhamento aleatório. Ele converte os elementos em strings e os ordena de acordo com a ordem dos pontos de código Unicode, o que pode gerar resultados inesperados e não aleatórios, especialmente com números.
A função embaralhar
que você viu na aula implementa o algoritmo de Fisher-Yates (ou Knuth Shuffle), que é um método consagrado para embaralhar arrays de forma aleatória e uniforme. Ele garante que todas as permutações possíveis tenham a mesma probabilidade de ocorrer, o que é fundamental para muitos casos de uso, como sorteios, jogos e testes aleatórios.
Usar o .sort()
sem função de comparação para "embaralhar" é um atalho que pode funcionar em casos simples e com arrays pequenos, mas não é a forma correta e confiável de se fazer isso. A função embaralhar
mostrada no vídeo é uma solução mais robusta e didática, que ilustra como implementar um algoritmo de embaralhamento.
Para exemplificar, veja a diferença:
let listaNumeros = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10];
// Tentativa de "embaralhar" com .sort() (não funciona corretamente)
listaNumeros.sort();
console.log("Usando sort() sem função de comparação:", listaNumeros); // Resultado não aleatório
// Embaralhamento correto com a função Fisher-Yates
function embaralhar(lista) {
for (let indice = lista.length; indice; indice--) {
const indiceAleatorio = Math.floor(Math.random() * indice);
[lista[indice - 1], lista[indiceAleatorio]] = [lista[indiceAleatorio], lista[indice - 1]];
}
}
let listaNumeros2 = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10];
embaralhar(listaNumeros2);
console.log("Usando o método embaralhar() correto:", listaNumeros2); // Resultado aleatório
O método .sort()
sem função de comparação não foi usado no vídeo para exemplificar a procura de soluções na web, mas sim para mostrar que existe uma forma mais correta de embaralhar listas.
Caso este post o tenha ajudado, por favor,
marcar como solucionado ☑️.
Bons Estudos! 🤓