関数型リアクティブプログラミング言語Elmに学ぶ フロントエンド開発の新しい形 【前編】
Webアプリケーション開発技術の新潮流スタディーズ 第4回
-
- Page 3
Union Typeとcase ~ of
Elmでは、有限個の値を持つ型を定義することができます。他の言語の列挙型(enum)のようなものです。 type 型名 = 値1 | 値2 | ...のように宣言します。
type Visibility = All | Active | Completed
上のように宣言すると、Visibility型の値は、All、Active、Completedのいずれかになります。 また、次のように、各値には追加で別の値を持たせることもできます。
type User = Anonymous | LoggedIn String user : User user = LoggedIn "john"
User型の値は、Anonymousか、String型の値を1つ保持したLoggedInです。
Union Typeの値は、case ... ofで分岐することができます。
userPhoto : User -> String
userPhoto user =
case user of
Anonymous ->
"anon.png"
LoggedIn name -> -- 中身のStringをnameという変数として取り出す
"users/" ++ name ++ "/photo.png"
photo = userPhoto (LoggedIn "john") -- "users/john/photo.png"
Maybe
Maybeは「値があるかもしれないし、ないかもしれない」ことを表す型で、次のように定義されています。
type Maybe a = Just a | Nothing
Maybeの後ろにあるaは型引数と呼ばれ、任意の型を当てはめることができます。例えば、Int型に限定したいときは次のようにします。
value : Maybe Int value = Just 10
Maybe型の値を取り出すためにはcase ... ofを使います。
-- List.head : List a -> Maybe a
-- List.headはリストの先頭の値を返す関数で、リストが空であればNothing 、空でなければJust aを返す。
message list =
case List.head list of
Just n ->
"head is " ++ n
Nothing ->
"empty!"
mes = message [1,2,3] -- "head is 1"
- 修正履歴
-
- 2017/03/02 16:35 Elmのバージョンアップに伴う仕様変更についての注意を、記事冒頭に追加しました。
この記事は参考になりましたか?
- この記事の著者
-
鳥居 陽介(株式会社ワークスアプリケーションズ)(トリイ ヨウスケ)
株式会社ワークスアプリケーションズ所属。イケてるアプリケーションを死ぬほど楽に作るために研究を続ける日々。社内での立ち位置は「フロントエンドのナウい人」。最近エバンジェリストという肩書きが付いた。趣味は作曲とスノーボード。 Blog: http://jinjor-labo.hatenablog.com/ ...
※プロフィールは、執筆時点、または直近の記事の寄稿時点での内容です
この記事は参考になりましたか?
この記事をシェア
