LoginSignup

This article is a Private article. Only a writer and users who know the URL can access it.
Please change open range to public in publish setting if you want to share this article with other users.

More than 5 years have passed since last update.

ElmのCmdについて

Last updated at Posted at 2016-12-06

3枚のうちの1つをランダムに表示するボタン

  • これをthe Elm Architectureで実装されたアプリに追加していくと、どうなるか
    • 3枚写真のサムネイルがあり、ボタンクリックしたら、ランダムに拡大表示するアプリ、という例で説明をしていた
    • jsだとMath.random()を使ってアレコレするところ(そんなに大変じゃないところ)だが。。。
  • このお題の実装がthe Elm Architectureではすんなりいかない。。。
    • それはどうしてなのかを少しずつ説明してくのが面白い
    • 逆に言うと、The Elm Architectureを使ってアプリ作るのに理解しないといけないことはすごく少ない

戻り値が毎回変わることは、純粋関数では起こらない

  • 引数が同じなら戻り値も毎回同じ結果
  • これが純粋関数(、についてのポピュラーな説明)
  • Elmの関数は純粋関数
    • つまり、戻り値が毎回変わるというのは、Elmでどうやって実現するの?という疑問を生み出す
  • 「純粋関数だけ」という枠組みで、毎回結果が変わる処理をどう扱う?という問題提起のあとで、Elmがどういう仕組みを用意してるのか、というふうに自然に説明できている

サーバーからのデータ通信、非同期処理、DBへの書き込み

  • 失敗する可能性のある(failしうる)操作とか処理を題材にすることも可能
    • むしろこっちの方が多い。どうしても他に説明しないといけないことが増え、サンプルも複雑になり、わかりにくくなる
    • 自分はここで挫折した派

The Elm Architectureでは、副作用は「上級編」扱い

  • 学習曲線をフレンドリーにするため意図的にチョイスされてる
  • サンプルアプリのTodoMVCも副作用は扱わない
  • The Elm Architecture(とかサンプルのTodoMVC)を最初に学んだ人の最初のハードルが、副作用を扱う仕組み

ランダムな結果を返すために使える仕組みとしてのcommand

  • 渡すオペレーション内容を書いたレシピのようなもの、命令の記述。と説明されている
  • コマンドは関数が返す値として表現であり、純粋関数の戻り値の1つとして位置付けてる
  • Commandに記された命令のリストを、Elmランタイムが実行する
Random.Generator Int
  • ランダムな数値(Int型)を返すためのコマンド

update関数の戻り値にコマンドが含まれるようにする

  • これがThe Elm Architectureへの導入のとっかかり、としてElm in Actionはチョイスしてる
-- before
update : Msg -> Model -> ( Model, Cmd Msg )
-- after
update : Msg -> Model -> Model
  • Modelを返していたところを、ModelCmd Msg のタプルを返すように変更してる
  • Htmlがつねに型変数をとりHtml msgと型定義されてるようにCmdCmd Msgと型定義

Screen Shot 2016-12-06 at 11.47.45 PM.png

update関数がCmd Msg型のデータを返すように実装する

略(あとでかく)

Elmでランダムな結果を出す処理をどうやるか
- こっちで、ランダムな結果を返す(サイコロ振りみたいなやつ)の実装について書いた

0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up