posts/CTJ5abpZOOAC5RweYustTAySF1CONnVgYLLXtryt.png

Laravel Lottery: Ejecuta código basado en probabilidades

Conoce la nueva función Lottery introducida en Laravel para ejecutar fragmentos de código de manera probabilística. Aprende cómo usarla para pruebas, registros o simulaciones con ejemplos claros y buenas prácticas.

En cada nueva versión, Laravel continúa sorprendiendo con utilidades que combinan elegancia y practicidad. Una de las más interesantes es la clase

Lottery
, introducida recientemente en el framework, que permite ejecutar bloques de código en función de una probabilidad definida.

Esta característica resulta útil para acciones ocasionales, como registrar logs, enviar reportes de diagnóstico o ejecutar pruebas A/B, sin necesidad de manejar manualmente generadores aleatorios.

¿Qué es Laravel Lottery?

Lottery
es una nueva API de Laravel diseñada para ejecutar código con base en odds (probabilidades).
La idea es simple: defines una probabilidad (por ejemplo, 1 de cada 10 veces) y Laravel decidirá aleatoriamente si debe ejecutar el bloque de código que especifiques.

Su sintaxis es limpia y declarativa, en línea con el estilo expresivo de Laravel.

Ejemplo básico:

use Illuminate\Support\Lottery;

Lottery::odds(1, 10)
    ->winner(function () {
        // Este código se ejecutará el 10% de las veces
        Log::info('¡Ganó la lotería!');
    })
    ->loser(function () {
        // Este bloque se ejecuta en el 90% restante
        Log::info('No ganó esta vez.');
    })
    ->choose();

Cómo funciona

La función

odds(1, 10)
indica que existe una probabilidad de 1 entre 10 de que el bloque
winner()
sea ejecutado.
Laravel utiliza el generador de números aleatorios de PHP (
random_int()
) para garantizar resultados seguros y uniformemente distribuidos.

Internamente, el flujo es el siguiente:

  1. Se define la probabilidad (numerador y denominador).

  2. Laravel genera un número aleatorio dentro del rango.

  3. Si coincide con el valor ganador, ejecuta el bloque

    winner()
    .

  4. En caso contrario, ejecuta el bloque

    loser()
    si está definido.

Esto elimina la necesidad de escribir manualmente estructuras condicionales con

rand()
o
mt_rand()
, manteniendo el código más legible y expresivo.

Ejemplos prácticos de uso

1. Registro parcial de logs

Evita llenar tu base de datos o tus archivos de log con información redundante.
Por ejemplo, puedes registrar solo un pequeño porcentaje de las solicitudes.

Lottery::odds(1, 100)
    ->winner(fn() => Log::info('Registro de muestreo de rendimiento'))
    ->choose();

Esto ejecutará el log solo en el 1% de las veces, ideal para métricas de alto tráfico.

2. Envío ocasional de reportes

Puedes usar

Lottery
para enviar reportes diagnósticos o realizar análisis de rendimiento de manera controlada.

Lottery::odds(1, 50)
    ->winner(fn() => $this->sendPerformanceReport())
    ->choose();

De este modo, solo una de cada 50 solicitudes enviará un reporte, reduciendo la carga sin perder información relevante.

3. Ejecución de pruebas A/B

Si estás implementando pruebas A/B, puedes dividir usuarios de manera aleatoria y balanceada.

if (Lottery::odds(1, 2)->choose()) {
    // Grupo A
    $layout = 'nuevo';
} else {
    // Grupo B
    $layout = 'clásico';
}

La mitad de las veces se servirá el nuevo diseño y la otra mitad el clásico, sin necesidad de manejar estados o cookies extra.

Métodos disponibles en Lottery

Laravel

Lottery
incluye métodos expresivos para definir y controlar su comportamiento:

Método Descripción

odds($numerator, $denominator)     
Define la probabilidad de éxito.

winner(Closure $callback)
Código que se ejecuta si la “lotería” es ganada.

loser(Closure $callback)
Código que se ejecuta si la “lotería” no es ganada.

choose()
Ejecuta la lógica y devuelve
true
o
false
.

Beneficios

  1. Legibilidad: se entiende fácilmente lo que hace el código.

  2. Menos lógica manual: elimina condiciones redundantes con

    rand()
    .

  3. Reutilización: permite centralizar comportamientos probabilísticos.

  4. Seguridad: utiliza generadores aleatorios criptográficamente seguros.

Consideraciones

  • No se recomienda para lógica crítica o determinista.

  • Ideal para registros, pruebas, métricas y análisis de comportamiento.

  • El resultado de

    choose()
    puede guardarse en una variable si necesitas control posterior.

Conclusión

La incorporación de

Lottery
en Laravel demuestra nuevamente la filosofía del framework: simplificar tareas comunes sin sacrificar elegancia.
Esta característica resulta especialmente útil para desarrolladores que buscan implementar acciones no deterministas de forma limpia y expresiva.

Ya sea para muestreo de datos, pruebas A/B o ejecución aleatoria controlada,

Lottery
aporta una herramienta moderna para escribir código más claro y conciso en Laravel 12 y versiones posteriores.

Comparte esta publicación

0 comentarios

Únete a la conversación y comparte tu experiencia.

Dejar un comentario

Comparte dudas, propuestas o mejoras para la comunidad.