Melhorias aplicadas
- Separação dos elementos do DOM em variáveis, evitando repetição de getElementById.
- Substituição implícita por conversão explícita usando Number() para garantir que os valores sejam numéricos.
- Correção da validação que poderia considerar 0 como campo inválido.
- Inclusão de verificação para impedir que a quantidade seja maior que o total disponível no intervalo.
- Uso de const para seguir boas práticas e aumentar a segurança do código.
Versão Melhorada
function sortear() {
let quantidade = Number(document.getElementById("quantidade").value);
let de = Number(document.getElementById("de").value);
let ate = Number(document.getElementById("ate").value);
// Validação de campos vazios
if (
document.getElementById("quantidade").value === "" ||
document.getElementById("de").value === "" ||
document.getElementById("ate").value === ""
) {
alert("Preencha todos os campos.");
return;
}
// Validação do intervalo
if (de >= ate) {
alert('Campo "Do número" deve ser menor que "Até o número".');
return;
}
// Validação da quantidade possível
let totalDisponivel = ate - de + 1;
if (quantidade > totalDisponivel) {
alert(
`Não é possível sortear ${quantidade} números entre ${de} e ${ate}.
Máximo permitido: ${totalDisponivel}.`,
);
return;
}
let sorteados = [];
for (let i = 0; i < quantidade; i++) {
numero = obterNumeroAleatorio(de, ate);
while (sorteados.includes(numero)) {
numero = obterNumeroAleatorio(de, ate);
}
sorteados.push(numero);
}
let resultado = document.getElementById("resultado");
resultado.innerHTML = `<label class="texto__paragrafo">Números sorteados: ${sorteados}</label>`;
alterarStatusBotao();
}
function obterNumeroAleatorio(min, max) {
return Math.floor(Math.random() * (max - min + 1)) + min;
}
function alterarStatusBotao() {
let botao = document.getElementById("btn-reiniciar");
if (botao.classList.contains("container__botao-desabilitado")) {
botao.classList.remove("container__botao-desabilitado");
botao.classList.add("container__botao");
} else {
botao.classList.remove("container__botao");
botao.classList.add("container__botao-desabilitado");
}
}
function reiniciar() {
document.getElementById("quantidade").value = "";
document.getElementById("de").value = "";
document.getElementById("ate").value = "";
document.getElementById("resultado").innerHTML =
'<label class="texto__paragrafo">Números sorteados: nenhum até agora</label>';
alterarStatusBotao();
}