コンパイラかく語りき

import { Fun } from 'programming'

最小構成ではじめるElm Architecture

いわゆるリハビリ。自分用に書いたのですが、公開します。Elmのバージョンは0.17です。

なぜ書いたのか。

ググッて出てくるコードが複雑なものが多く、初心者にとって本当に必要なものを明示したかったから。

なので、0.17から盛り込まれたSubscribeについてはスキップします。

目的

MVCに馴染みのあるくらいのエンジニアが、ひとまずElmの世界にスムーズに移行できるようにする。

ファイル構成

ファイル構成はこんな感じ。

- simple-counter
-- elm-stuff
-- elm-package.json
-- index.html
-- Main.elm

とりあえず、Main.elmさえあればOK。それをindex.htmlにコンパイルします。

環境設定については、Elmに入門する(2)に書かせていただきました。

Main.elm

こちらが書いたコードです。作ったのは、シンプルなカウンタです。 ElmArchitectureのサンプルコードとほとんど同じになってしまいました。

// Main.elm

-- 必要なパッケージのインポート
import Html exposing (Html, button, div, text)
import Html.App as App
import Html.Events exposing (onClick)

-- エントリーポイント的なやつ。
main =
  App.beginnerProgram
    { model = model
    , view = view
    , update = update
    }

-- Model

type alias Model = Int

model : Model
model =
  0

-- Update

type Msg = Increment | Decrement

update : Msg -> Model -> Model
update msg model =
  case msg of
    Increment ->
      model + 1
    Decrement ->
      model - 1

-- View

view : Model -> Html Msg
view model =
  div []
    [ div [][ text (toString model)]
    , button [ onClick Increment ][ text "+"]
    , button [ onClick Decrement ][ text "-"]
    ]

Modelとして数値を持ち、Updateは数値のインクリメントとデクリメントのアクションを持ち、そして、Viewでは数値と、数値操作のボタンを描画します。

Viewでボタンを押されると、Updateが発行されてModelが更新され、Viewが再レンダリングされます。

MVCがそれぞれ、Model, View, Updateのようなものだと考えれば、理解が早まるかもしれません。完全に対応しているわけではありませんが。。

次回は、ここにSubscriptionを盛り込んだコードを書いてみたいと思います。