乱数の生成

Elm:
乱数の生成

どのようにして:

Elmの純粋関数的な性質は、命令型言語で可能なように直接乱数を生成できないことを意味します。代わりに、Randomモジュールを命令と組み合わせて使用します。ここでは、1から100の間のランダムな整数を生成する基本的な例を示します。

まず、elm install elm/randomRandomモジュールをインストールします。次に、必要なHTMLおよびイベントモジュールと共に、Elmファイルにインポートします。

src/Main.elm

module Main exposing (..)

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

これが自己完結型の例であるために、このボイラープレートを追加できます:

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

次に、ランダムな数字を生成するコマンドを定義します。これには、生成されたランダムな数字を処理するためのMsg型の設定、それを格納するModel、そしてそれらをすべて結びつける更新関数が含まれます。

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 )

数字生成をトリガーするには、例えばビュー内のボタンを通じてGenerateメッセージを送信します:

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

“Generate"ボタンをクリックすると、1から100の間のランダムな数字が表示されます。

この単純なアプローチは、他の関数を利用してRandomモジュールによりランダムな浮動小数点数、リスト、またはカスタムタイプに基づいた複雑なデータ構造を生成することにより適応され拡張され、Elmアプリケーションへの予測不可能さの追加のための広大な遊び場を提供します。

Elmガイドでは、より詳細な情報が記載されています。また、六面体のサイコロを振る例もあります。