Gerando números aleatórios

Elm:
Gerando números aleatórios

Como fazer:

A natureza puramente funcional de Elm significa que você não pode gerar números aleatórios diretamente como faria em linguagens imperativas. Em vez disso, você usa o módulo Random em conjunto com comandos. Aqui está um exemplo básico que gera um número inteiro aleatório entre 1 e 100.

Primeiro, instale o módulo Random com elm install elm/random. Em seguida, importe-o para o seu arquivo Elm, junto com os módulos HTML e de eventos necessários, assim:

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 seja um exemplo autocontido, você pode adicionar este código inicial:

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

Em seguida, defina um comando para gerar um número aleatório. Isso envolve configurar um tipo Msg para lidar com o número aleatório assim que for gerado, um Model para armazená-lo e uma função de atualização para integrar tudo.

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 a geração de um número, você enviaria uma mensagem Generate, por exemplo, através de um botão na sua visualização:

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

Quando você clica no botão “Gerar”, um número aleatório entre 1 e 100 será exibido.

Essa abordagem simplista pode ser adaptada e expandida, aproveitando outras funções no módulo Random para produzir floats aleatórios, listas ou até estruturas de dados complexas baseadas em tipos personalizados, proporcionando um vasto campo de possibilidades para adicionar imprevisibilidade às suas aplicações Elm.

O Guia Elm entra em muito mais detalhes. Ele também tem um exemplo de rolagem de um dado de seis lados.