SHOEISHA iD

※旧SEメンバーシップ会員の方は、同じ登録情報(メールアドレス&パスワード)でログインいただけます

DeveloperZine(デベロッパージン)- エンジニアの意思決定を支える技術情報メディア ProductZine

CodeZine編集部では、現場で活躍するデベロッパーをスターにするためのカンファレンス「Developers Summit」や、エンジニアの生きざまをブーストするためのイベント「Developers Boost」など、さまざまなカンファレンスを企画・運営しています。

Webアプリケーション開発技術の新潮流スタディーズ

関数型リアクティブプログラミング言語Elmに学ぶ フロントエンド開発の新しい形 【前編】

Webアプリケーション開発技術の新潮流スタディーズ 第4回


Union Typeとcase ~ of

Elmでは、有限個の値を持つ型を定義することができます。他の言語の列挙型(enum)のようなものです。 type 型名 = 値1 | 値2 | ...のように宣言します。

type Visibility = All | Active | Completed

上のように宣言すると、Visibility型の値は、AllActiveCompletedのいずれかになります。 また、次のように、各値には追加で別の値を持たせることもできます。

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"

次のページ
その他の構文

修正履歴

この記事は参考になりましたか?

Webアプリケーション開発技術の新潮流スタディーズ連載記事一覧

もっと読む

この記事の著者

鳥居 陽介(株式会社ワークスアプリケーションズ)(トリイ ヨウスケ)

株式会社ワークスアプリケーションズ所属。イケてるアプリケーションを死ぬほど楽に作るために研究を続ける日々。社内での立ち位置は「フロントエンドのナウい人」。最近エバンジェリストという肩書きが付いた。趣味は作曲とスノーボード。 Blog: http://jinjor-labo.hatenablog.com/ ...

※プロフィールは、執筆時点、または直近の記事の寄稿時点での内容です

この記事は参考になりましたか?

この記事をシェア

CodeZine(コードジン)
https://codezine.jp/article/detail/8873 2017/03/02 16:39

イベント

CodeZine編集部では、現場で活躍するデベロッパーをスターにするためのカンファレンス「Developers Summit」や、エンジニアの生きざまをブーストするためのイベント「Developers Boost」など、さまざまなカンファレンスを企画・運営しています。

新規会員登録無料のご案内

  • ・全ての過去記事が閲覧できます
  • ・会員限定メルマガを受信できます

メールバックナンバー