Generando números aleatorios

Elm:
Generando números aleatorios

Cómo hacerlo:

La naturaleza puramente funcional de Elm significa que no puedes generar números aleatorios directamente como podrías hacerlo en lenguajes imperativos. En su lugar, usas el módulo Random en conjunción con comandos. Aquí tienes un ejemplo básico que genera un entero aleatorio entre 1 y 100.

Primero, instala el módulo Random con elm install elm/random. Luego impórtalo en tu archivo Elm, junto con los módulos de HTML y eventos necesarios, así:

src/Main.elm

module Main exposing (..)

import Browser
import Html exposing (Html, button, text, div)
import Html.Events exposing (onClick)
import Random

Para que este sea un ejemplo autocontenido, puedes agregar este código base:

main =
  Browser.element { init = init, update = update, subscriptions = subscriptions, view = view }

init : () -> (Model, Cmd Msg)
init _ =
  (Model 0, Cmd.none)

subscriptions : Model -> Sub Msg
subscriptions _ =
  Sub.none

A continuación, define un comando para generar un número aleatorio. Esto implica configurar un tipo Msg para manejar el número aleatorio una vez generado, un Model para almacenarlo, y una función de actualización para unirlo todo.

type Msg
    = Generate
    | NewRandom Int

type alias Model = { randomNumber : Int }

update : Msg -> Model -> (Model, Cmd Msg)
update msg model =
    case msg of
        Generate ->
            ( model, Random.generate NewRandom (Random.int 1 100) )

        NewRandom number ->
            ( { model | randomNumber = number }, Cmd.none )

Para disparar la generación de un número, podrías enviar un mensaje Generate, por ejemplo, a través de un botón en tu vista:

view : Model -> Html Msg
view model =
    div []
        [ div [] [ text ("Número Aleatorio: " ++ String.fromInt(model.randomNumber)) ]
        , button [ onClick Generate ] [ text "Generar" ]
        ]

Cuando hagas clic en el botón “Generar”, se mostrará un número aleatorio entre 1 y 100.

Este enfoque simplista puede ser adaptado y ampliado, aprovechando otras funciones en el módulo Random para producir flotantes aleatorios, listas, o incluso estructuras de datos complejas basadas en tipos personalizados, proporcionando un vasto terreno de juego para agregar imprevisibilidad a tus aplicaciones en Elm.

La Guía de Elm profundiza mucho más en este tema. También tiene un ejemplo de lanzamiento de un dado de seis caras.