Genereren van willekeurige getallen

Elm:
Genereren van willekeurige getallen

Hoe:

De pure functionele aard van Elm betekent dat je niet direct willekeurige getallen kunt genereren zoals je misschien zou doen in imperatieve talen. In plaats daarvan gebruik je de Random module in combinatie met commando’s. Hier is een basisvoorbeeld dat een willekeurig geheel getal tussen 1 en 100 genereert.

Installeer eerst de Random module met elm install elm/random. Importeer het vervolgens in je Elm-bestand, samen met de benodigde HTML- en event-modules, zoals zo:

src/Main.elm

module Main exposing (..)

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

Om dit een zelfstandig voorbeeld te maken, kun je dit sjabloon toevoegen:

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

Definieer vervolgens een commando om een willekeurig getal te genereren. Dit houdt in dat je een Msg type instelt om het willekeurige getal te behandelen zodra het is gegenereerd, een Model om het op te slaan, en een update-functie om alles samen te binden.

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 )

Om een getallengeneratie te activeren, zou je een Generate bericht sturen, bijvoorbeeld via een knop in je weergave:

view : Model -> Html Msg
view model =
    div []
        [ div [] [ text ("Willekeurig Getal: " ++ String.fromInt model.randomNumber) ]
        , button [ onClick Generate ] [ text "Genereer" ]
        ]

Wanneer je op de “Genereer” knop klikt, wordt een willekeurig getal tussen 1 en 100 weergegeven.

Deze simplistische benadering kan worden aangepast en uitgebreid, door gebruik te maken van andere functies in de Random module om willekeurige drijvende komma getallen, lijsten of zelfs complexe datastructuren te produceren op basis van aangepaste typen, waardoor een uitgebreide speeltuin wordt geboden voor het toevoegen van onvoorspelbaarheid aan je Elm-applicaties.

De Elm-gids gaat veel meer in detail. Er is ook een voorbeeld van het rollen van een zeszijdige dobbelsteen.