質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
Elm

Elmは、Functional Reactive Programming(FRP)という概念を持つプログラミング言語です。JavaScriptにコンパイルされており、高度な対話型プログラムを簡単に作成するこができます。

Q&A

解決済

1回答

477閲覧

Elmのアロー関数の後のタプルが分かりません

tuioku

総合スコア42

Elm

Elmは、Functional Reactive Programming(FRP)という概念を持つプログラミング言語です。JavaScriptにコンパイルされており、高度な対話型プログラムを簡単に作成するこができます。

0グッド

0クリップ

投稿2020/09/29 09:16

編集2020/09/29 10:01

下記のコードの( Loading, getRandomCatGif )は何を意味するのでしょうか??
MorePleaseを実行したときの返り値でしょうか??
また、Modelの状態を監視しているソースなのですが、Cmdの意味やMorePleaseを押した時の挙動がよく分かっておりません。
ご存知の方がいればお聞きしたいです。

elm

1module Main exposing (main) 2 3import Browser 4import Html exposing (..) 5import Html.Attributes exposing (..) 6import Html.Events exposing (..) 7import Http 8import Json.Decode exposing (Decoder, field, string) 9 10 11 12-- MAIN 13 14 15main : Program () Model Msg 16main = 17 Browser.document 18 { init = init 19 , update = update 20 , subscriptions = subscriptions 21 , view = viewDocument 22 } 23 24 25 26-- MODEL 27 28 29type Model 30 = Failure 31 | Loading 32 | Success String 33 34 35init : () -> ( Model, Cmd Msg ) 36init _ = 37 ( Loading, getRandomCatGif ) 38 39 40 41-- UPDATE 42 43 44type Msg 45 = MorePlease 46 | GotGif (Result Http.Error String) 47 48 49update : Msg -> Model -> ( Model, Cmd Msg ) 50update msg model = 51 case msg of 52 MorePlease -> 53 ( Loading, getRandomCatGif ) 54 55 GotGif result -> 56 case result of 57 Ok url -> 58 ( Success url, Cmd.none ) 59 60 Err _ -> 61 ( Failure, Cmd.none ) 62 63 64 65-- SUBSCRIPTIONS 66 67 68subscriptions : Model -> Sub Msg 69subscriptions model = 70 Sub.none 71 72 73 74-- VIEW 75 76 77viewDocument : Model -> Browser.Document Msg 78viewDocument model = 79 { title = "Some cats", body = [ view model ] } 80 81 82view : Model -> Html Msg 83view model = 84 div [] 85 [ h2 [] [ text "Random Cats" ] 86 , viewGif model 87 ] 88 89 90viewGif : Model -> Html Msg 91viewGif model = 92 case model of 93 Failure -> 94 div [] 95 [ text "I could not load a random cat for some reason. " 96 , button [ onClick MorePlease ] [ text "Try Again!" ] 97 ] 98 99 Loading -> 100 text "Loading..." 101 102 Success url -> 103 div [] 104 [ button [ onClick MorePlease, style "display" "block" ] [ text "More Please!" ] 105 , img [ src url ] [] 106 ] 107 108 109 110-- HTTP 111 112 113getRandomCatGif : Cmd Msg 114getRandomCatGif = 115 Http.get 116 { url = "https://api.giphy.com/v1/gifs/random?api_key=dc6zaTOxFJmzC&tag=cat" 117 , expect = Http.expectJson GotGif gifDecoder 118 } 119 120 121gifDecoder : Decoder String 122gifDecoder = 123 field "data" (field "image_url" string) 124 125

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

kakkun61

2020/09/29 09:24

Haskell ではないので Haskell タグは外してください
guest

回答1

0

ベストアンサー

elm

1init _ = 2 ( Loading, getRandomCatGif )

この部分は Model の初期値と最初に実行する Cmd a を指定します。

elm

1button [ onClick MorePlease, style "display" "block" ] [ text "More Please!" ]

“More Please!” を押すと onClick で指定した Msg である MorePleaseupdate の第1引数 msg に渡されます。

(掲載のコードには Msg の定義がありませんので、type Msg = MorePlease であるとして回答しています。)

投稿2020/09/29 09:37

kakkun61

総合スコア285

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

tuioku

2020/09/30 01:08

なるほど!ありがとうございます。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問