s n h m r u
i

Commands

Kommandos an die Laufzeitumgebung

Das Programm auf der vorigen Seite ist fast vollständig. Es fehlt - bis auf die Imports - nur die Definition von wuerfelKommando. Ein Command ist eine Anweisung, die von der Laufzeitumgebung ausgeführt wird. In unserem Fall soll wuerfelKommando eine Anweisung sein, die der Laufzeitumgebung sagt, dass sie eine Zufallszahl zwischen 1 und 6 erzeugen soll und uns dann eine Nachricht mit der neuen Zahl schicken soll, z.B. NeueZahl 3. Das Command ist noch keine Durchführung der Anweisung, sondern nur die Beschreibung der Anweisung, die von der Laufzeitumgebung ausgeführt werden soll.

Konkret sieht das Command so aus:

wuerfelKommando : Cmd Msg
wuerfelKommando =
    Random.generate NeueZahl (Random.int 1 6)

Random.generate ist eine Funktion, die ein Command erzeugt. Sie nimmt als erstes Argument eine Funktion, die die generierte Zufallszahl in eine Nachricht umwandelt, und als zweites Argument einen Generator für Zufallszahlen, der hier mit Random.int 1 6 erzeugt wird.

Aufgabe 1

Stelle Vermutungen zur Signatur von Random.generate, NeueZahl und Random.int an. Überprüfe deine Vermutungen, indem du die Signaturen der Funktionen in der Dokumentation nachschaust. (Du musst dazu in der Dokumentation nach Random suchen.)

Aufgabe 2

Teste das vollständige Programm. Da das Paket elm/random standardmäßig nicht installiert ist, musst du es zuerst installieren, bevor das Modul Random importiert werden kann. Wenn du lokal am Computer arbeitest, musst du dazu in der Kommandozeile den Befehl elm install elm/random eingeben. Wenn du ellie-app.com verwendest, musst du links auf das Paket-Symbol klicken und dort nach elm/random suchen und kannst es dann mit einem Klick installieren.

Hier siehst du das vollständige Programm:

module Main exposing (main)

import Browser
import Html exposing (..)
import Html.Events exposing (..)
import Random


type alias Model =
    { zahl : Int }


type Msg
    = NeueZahl Int
    | ButtonKlick


wuerfelKommando : Cmd Msg
wuerfelKommando =
    Random.generate NeueZahl (Random.int 1 6)


init : () -> ( Model, Cmd Msg )
init _ =
    ( { zahl = 0 }, wuerfelKommando )


update : Msg -> Model -> ( Model, Cmd Msg )
update msg model =
    case msg of
        NeueZahl z ->
            ( { zahl = z }, Cmd.none )

        ButtonKlick ->
            ( model, wuerfelKommando )


view : Model -> Html Msg
view model =
    div []
        [ text (String.fromInt model.zahl)
        , button [ onClick ButtonKlick ] [ text "Neu würfeln" ]
        ]


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


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

Suche

v
8.2.3.8.3 Commands
Kopieren durch Anklicken

Rückmeldung geben