Lección 41: Math.random()
🧠 Concepto
Section titled “🧠 Concepto”Math.random() es un método que retorna un número pseudoaleatorio entre 0 (inclusive) y 1 (exclusivo). Es decir: [0, 1).
const aleatorio = Math.random();console.log(aleatorio); // Ej: 0.7234567890123456Generar enteros aleatorios
Section titled “Generar enteros aleatorios”Para obtener enteros en un rango específico, combinamos Math.random() con Math.floor():
// Entero entre 0 y max-1function aleatorio0aN(max) { return Math.floor(Math.random() * max);}
console.log(aleatorio0aN(10)); // Entero entre 0 y 9
// Entero entre min y max (ambos inclusive)function aleatorioEntre(min, max) { return Math.floor(Math.random() * (max - min + 1)) + min;}
console.log(aleatorioEntre(1, 6)); // Simula un dado (1-6)console.log(aleatorioEntre(1, 100)); // Número al azar entre 1 y 100💻 Ejemplo
Section titled “💻 Ejemplo”// Simular un dadofunction lanzarDado() { return Math.floor(Math.random() * 6) + 1;}
console.log(`🎲 Dado: ${lanzarDado()}`);
// Lotería: elegir ganadorconst participantes = ['Ana', 'Luis', 'Carlos', 'María', 'Pedro'];const ganador = participantes[Math.floor(Math.random() * participantes.length)];console.log(`🏆 Ganador: ${ganador}`);
// Color aleatoriofunction colorAleatorio() { const r = Math.floor(Math.random() * 256); const g = Math.floor(Math.random() * 256); const b = Math.floor(Math.random() * 256); return `rgb(${r}, ${g}, ${b})`;}
console.log(`🎨 Color: ${colorAleatorio()}`);
// Array de números aleatoriosconst aleatorios = Array.from({ length: 5 }, () => Math.floor(Math.random() * 100));console.log(aleatorios); // [42, 13, 78, 5, 91] (ejemplo)⚠️ Nota
Section titled “⚠️ Nota”Math.random() NO es criptográficamente seguro. No lo uses para:
- Generación de contraseñas o tokens
- Barajado de cartas en juegos de apuestas
- Cualquier contexto de seguridad
Para usos seguros, usa crypto.getRandomValues():
// Generación seguraconst array = new Uint32Array(1);crypto.getRandomValues(array);console.log(array[0]); // número aleatorio seguroAdemás, Math.random() es pseudoaleatorio (algoritmo PRNG). La secuencia es determinista a partir de una semilla, aunque no podemos controlarla fácilmente.
Patrones útiles con Math.random():
// Booleano aleatorio (50%)const moneda = Math.random() < 0.5;
// Elemento aleatorio de un arrayconst randomItem = arr[Math.floor(Math.random() * arr.length)];
// String aleatoria (ID corto)const id = Math.random().toString(36).substring(2, 8);console.log(id); // Ej: "a3x9kf"
// Mezclar array (Fisher-Yates shuffle)function mezclar(array) { const arr = [...array]; for (let i = arr.length - 1; i > 0; i--) { const j = Math.floor(Math.random() * (i + 1)); [arr[i], arr[j]] = [arr[j], arr[i]]; } return arr;}📝 Ejercicio
Section titled “📝 Ejercicio”Escribe una función generarCodigo que genere un código alfanumérico de 6 caracteres (mayúsculas y números). Ejemplo: “A3K9F1”.
function generarCodigo() { const caracteres = 'ABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789'; // Tu código aquí}
console.log(generarCodigo()); // Ej: "X7P2M9"console.log(generarCodigo()); // Ej: "Q1R5T3"