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.