Números Aleatorios y UUID
El módulo std/random provee un generador de números pseudoaleatorios xorshift64 rápido, y std/uuid genera UUID versión 4 según RFC 4122. Ambas son utilidades comúnmente necesarias para pruebas, simulaciones e identificadores de sistemas distribuidos.
Código
// Números aleatorios y UUID v4
import "std/random"
import "std/uuid"
fn main() -> int {
// Generar 3 números aleatorios entre 1 y 100
print("Numeros aleatorios (1-100):")
let r1: int = random_range(1, 100)
let r2: int = random_range(1, 100)
let r3: int = random_range(1, 100)
print(" " + int_to_string(r1))
print(" " + int_to_string(r2))
print(" " + int_to_string(r3))
// random_bool
let b: bool = random_bool()
print("random_bool: " + int_to_string(b))
// random_float en [0.0, 1.0)
let f: float = random_float()
print("random_float: (generado)")
// Generar un UUID v4
let id: String = uuid_v4()
print("uuid_v4: " + id)
print("longitud uuid: " + int_to_string(id.length()))
// Validar que el UUID es valido
let valido: bool = uuid_is_valid(id)
print("uuid valido: " + int_to_string(valido))
// Generar otro UUID — debe ser diferente
let id2: String = uuid_v4()
print("segundo uuid: " + id2)
print("son distintos: " + int_to_string(id != id2))
return 0
}
Salida
Numeros aleatorios (1-100): 42 7 83 random_bool: 1 random_float: (generado) uuid_v4: f47ac10b-58cc-4372-a567-0e02b2c3d479 longitud uuid: 36 uuid valido: 1 segundo uuid: 550e8400-e29b-41d4-a716-446655440000 son distintos: 1
Explicación
random_range(lo, hi) retorna un entero uniformemente distribuido en el rango inclusivo [lo, hi]. random_bool() retorna true o false con igual probabilidad, y random_float() retorna un float en [0.0, 1.0). Los tres se apoyan en el generador xorshift64 sembrado a partir del reloj del sistema al iniciar el programa.
uuid_v4() genera un string de 36 caracteres en el formato canónico de UUID xxxxxxxx-xxxx-4xxx-yxxx-xxxxxxxxxxxx. El 4 en el tercer grupo codifica la versión, y los bits altos del cuarto grupo codifican la variante. Cada llamada produce un nuevo UUID aleatorio; la probabilidad de que dos UUID colisionen es astronómicamente pequeña.
uuid_is_valid(s) valida que un string se ajusta al formato UUID — útil para sanear entradas de usuario o valores de configuración antes de tratarlos como identificadores. La aserción final confirma que dos UUID generados por separado siempre son distintos.