Zufallszahlen generieren

Elm:
Zufallszahlen generieren

Wie geht das:

Elms reine funktionale Natur bedeutet, dass du nicht direkt Zufallszahlen generieren kannst, wie du es vielleicht in imperativen Sprachen tun würdest. Stattdessen verwendest du das Random-Modul in Verbindung mit Befehlen. Hier ist ein einfaches Beispiel, das eine zufällige Ganzzahl zwischen 1 und 100 generiert.

Zuerst installiere das Random-Modul mit elm install elm/random. Dann importiere es in deine Elm-Datei, zusammen mit den notwendigen HTML- und Event-Modulen, so:

src/Main.elm

module Main exposing (..)

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

Um dies zu einem eigenständigen Beispiel zu machen, kannst du dieses Grundgerüst hinzufügen:

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

Als Nächstes definiere einen Befehl, um eine Zufallszahl zu generieren. Dies beinhaltet das Einrichten eines Msg-Typs, um die Zufallszahl zu verarbeiten, sobald sie generiert wurde, ein Model, um sie zu speichern, und eine Update-Funktion, um alles zusammenzubinden.

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 )

Um eine Zahlengenerierung auszulösen, würdest du eine Generate-Nachricht senden, zum Beispiel durch einen Knopf in deiner Ansicht:

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

Wenn du auf den “Generieren”-Knopf klickst, wird eine zufällige Zahl zwischen 1 und 100 angezeigt.

Dieser einfache Ansatz kann angepasst und erweitert werden, indem andere Funktionen im Random-Modul genutzt werden, um Zufallsfloats, Listen oder sogar komplexe Datenstrukturen basierend auf benutzerdefinierten Typen zu erzeugen, und bietet so einen riesigen Spielplatz für die Hinzufügung von Unvorhersehbarkeit zu deinen Elm-Anwendungen.

Der Elm-Leitfaden geht viel detaillierter darauf ein. Es hat auch ein Beispiel für das Würfeln eines sechsseitigen Würfels.