Open8

The Elm Archtecture

typetype aliasの違いは?

type

typeがなんなのかはわかっていない。
使われ方としてはsealed classに似ている気がする

type.elm
type Either
 = Loading
 | Success { value: Int }
 | Failure { message: String }

getValue : Either -> String
getValue either = 
  case either of
    Loading -> "loading"
    Success v -> "success"
    Failure message -> "failure"

type alias

type aliasは型に名前をつけるもの

typeAlias.elm
type alias T = { value: Int }

typeはカスタム型の宣言に利用するみたいだ
また別名がtagged unionやADTと呼ばれていることからseald classはあながち間違っていなそう

type aliasはレコードを作ってる

typeAlias.elm
type alias T = { value : Int } 

T // <function> : Int -> T 
typeAliasLike.elm
record : Int -> T
record first = { value = first }

record // <fucntion> : Int -> { value : Int }

typeAlias.elmtypeAliasLike.elmはほぼほぼ同じ

エラーハンドリング

型にエラー情報を逃す。ResultMaybeでそれを実現する

Maybe

JavaのOptionと同等のものでnull参照をなくす

maybe.elm
type MaybeInt
  = Value number
   | Nothing

toInt : String -> MaybeInt
toInt string = 
  case String.toInt string of
    Nothing -> Nothing
    Just value -> Value value

Result

よく聞くEither
例外処理用の型

result.elm
type Either value error
 = Just value
  | Err error

Variant valueとすることでモデルを作ることができる

#コマンドとサブスクリプション

Html msgでHTMLエレメントからメッセージを送るように、Cmd msgでコマンドからメッセージを送れる。

そもそもElmが最大限生かされる書き方ってどんなんなんだろう?
MVCを深く知ると良いのかな??

作成者以外のコメントは許可されていません