#author("2019-11-23T12:02:27+00:00","default:sagasite","sagasite")
[[Program]] > [[JavaScript]] > [[AltJS]] > [[Elm]] > [[Elmガイド>Elm_guide]] > コマンドとサブスクリプション
#norelated
#contents
//----------------------------------------
*コマンドとサブスクリプション [#qddbd63d]
-コマンドとサブスクリプション · An Introduction to Elm https://guide.elm-lang.jp/effects/
**sandbox [#t6463bc7]
>今まで多くは触れませんでしたが、これまでのプログラムは全て Browser.sandbox から生成されていました。
初期値としてのModelを与え、どのようにそれをupdateしてviewするのかを説明してきました。
Browser.sandboxではシステムを下記のように構成すると考えることができます:
&ref(sandbox_500px.png);
>我々はElmの世界(上図のブルーの部分)の中にとどまり、いろいろな関数を書いたりデータを変換したりします。
そしてこの世界がElmのランタイムシステムとつながります。
全てのDOM操作を明確に分離することにより、極めて積極的な最適化が実現可能となります。
**element [#p3276514]
>続くいくつかの例ではプログラムを作るためにBrowser.elementを使っていきます。
そこでは外の世界とのやり取りを可能とするためのコマンドとサブスクリプションの概念を導入していきます。
Browser.elementではシステムを下記のように構成すると考えることができます:
&ref(element_500px.png);
>このプログラムではHtmlという値に加えて、CmdとSubなる値をランタイムシステムに送り出します。
ここでは我々のプログラムがランタイムシステムに対してHTTPリクエストを送ったり乱数を生成するよう指示することができます。
また現在時刻をランタイムシステムから待ち受けて我々のプログラムで使うこともできます。
この図をHaskellに置き換えて考えると、
-図の青い部分は、純粋で副作用のない世界
-ランタイムシステムは、不純で副作用のある世界
と分割しているように見えます。
>Note 3:「指示する」を意味する英語のCommandがCmdの語源です。
英語のSubscriptionがSubの語源で、主に定期購読と訳されますが、Elmでのイメージは外部から来るメッセージを定期的に待ち受けるところからから来ています 。
果たして、コマンドとサブスクリプションとは、一体何なのか!?
先に読み進めて正体を探ってみたいと思います!