LoginSignup
40
13

More than 5 years have passed since last update.

Elm初心者でもできるprintデバッグ

Last updated at Posted at 2017-12-06

お前のimport Debugを数えろ

Elm初めてでprint仕方が分からないって人をツイッターで二人ほど見かけたのでやりかたを書いておきます
式と文の違いが判らないって人もいるかもなんですけどとりあえず気にしない方針です

追記:2018/08/22
0.19が出ましたがここに書いてあることはそのまま動くのでよろしくお願いします

 import Debug

まずimportする
importいらなかった。書かなくていいです(書いてもいいです

 update model msg =
   case msg ->
     NoOp ->
       Debug.log "modelをprintして、返り値はmodel" model

     InputName str ->
       { model | name = Debug.log "strをprint, model.nameにstrがセットされる" str }

     IgnoreNum num ->
       let
         _ = Debug.log "numをprint、numが返るんだけど使わないので _ に入れて捨てる" num
         -- アンダーバーは使いませんよーみたいな特殊な変数?
       in
         model
       -- こんなふうに式を並べることはできない
       -- Debug.log "numをprint、numが返るんだけど使わないので _ に入れて捨てる" num
       -- model
     UpdateUsers ->
       { model |
         users =
           model.users
             |> List.map enhanceUser
             |> Debug.log "enhanceされたuser listをprint"
             |> List.map killUser
             |> List.map (\user -> Debug.log "なぜかkillされたuserを1人ずつprint" user)
             -- pipeの途中でいくらでもはさみこめるんでよろしく
       }

大事なのは式(1行みたいな意味)を並べて書けないのと、Debug.logはlogしたものがそのまま返ってくること

ElmのviewはただのElmコードなのでview内でももちろん同じことができます

 view model =
   div [] [ text <| log "printします" <| model.message ]

何もわからないおれはElmの文法がよくわからないままコードを書いている
って人向けにたぶんどこでも動くprintも書いておきます

 let _ = Debug.log "このコード片は割とどこおいても大丈夫な気がする" something in

somethingに見たい変数を入れてください

ついでに2stepで学ぶDebug.log書いておきます

 view model =
    div [] [ text model.message ]

もとのコードがあります

 view model =
    div [] [ text (model.message) ]

step1. みたいものをかっこでかこむ

 view model =
    div [] [ text (Debug.log "log label" model.message) ]

step2. Debig.logを足す

ね、簡単でしたね

40
13
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
40
13