ProgramJavaScriptAltJSElmElmガイドコマンドとサブスクリプション > HTTP

HTTP

サンプルコード

#code(haskell){{

import Browser
import Html exposing (Html, text, pre)
import Http

main =

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

type Model

 = Failure
 | Loading
 | Success String

init : () -> (Model, Cmd Msg)
init _ =

 ( Loading
 , Http.get
     { url = "https://elm-lang.org/assets/public-opinion.txt"
     , expect = Http.expectString GotText
     }
 )

type Msg

 = GotText (Result Http.Error String)

update : Msg -> Model -> (Model, Cmd Msg)
update msg model =

 case msg of
   GotText result ->
     case result of
       Ok fullText ->
         (Success fullText, Cmd.none)
       Err _ ->
         (Failure, Cmd.none)

subscriptions : Model -> Sub Msg
subscriptions model =

 Sub.none

view : Model -> Html Msg
view model =

 case model of
   Failure ->
     text "I was unable to load your book."
   Loading ->
     text "Loading..."
   Success fullText ->
     pre [] [ text fullText ]

}}

パッと見、見事にサッパリ意味が分からない!
焦らずにじっくり学べば、後で意味が分かるようになるのかなー。(ちょっと不安)

Cmd

#code(haskell){{
init : () -> (Model, Cmd Msg)
init _ =

 ( Loading
 , Http.get
     { url = "https://elm-lang.org/assets/public-opinion.txt"
     , expect = Http.expectString GotText
     }
 )

}}
上記のコード片の中で、

Http.expectString

の部分がCmdに該当している。

関数定義の型注釈を見ると、init関数の返り値は、(Model, Cmd Msg)となっており、Cmdとその引数であるMsgが返り値に含まれていることが分かる。

Sub

このプログラムにおけるもう一つの新しい部分はsubscription関数になります。
Modelの情報から判断して何らかの情報に対する待ち受けするかどうかを決めることができます。
今回の例ではSub.noneとして何も待ち受けする必要がないことを示していますが、後ほど現在時刻を待ち受ける必要がある時計の例を見ていきます。

#code(haskell){{

Elmのランタイムシステムに対して、処理やデータを渡したり、受け取ったりできる、ということですね?
何となく雰囲気はつかめました。


トップ   編集 凍結 差分 履歴 添付 複製 名前変更 リロード   新規 一覧 検索 最終更新   ヘルプ   最終更新のRSS
Last-modified: 2019-11-23 (土) 21:25:04