0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

【Elm勉強会 第2回目】「値」と「型」の話

0
Last updated at Posted at 2026-06-13

どんな多きなプログラムも小さなプログラムの組み合わせです。Elmでは、式を組み合わせて main 関数をつくってプログラムになります。

しかし、プログラマは人間なので多くのミスをします。ミスは早期発見できたほうが時間の節約になります。

Elmは、プログラムのミスを早期発見するために「型」という画期的な仕組みがあります。型は、どんな値になりうるか、プログラムにレールを敷くようなものです。

型というレールから、値が外れていたら、$ elm make(コンパイル)するときにエラーで知らせてくれます。

「値」と「型」

function.png

値には、String型 (文字列) や Int型 (整数)など型がついています。

Int -> Int 型の関数に渡せる値は、Int型の値のみです。"Hello World" などの文字列を渡そうとしたら、$ elm make(コンパイル)するときにエラーで落ちてしまいます。

では、"42"は、渡せるのかというと、それは違います。ダブルクォーテーション( " )がついているから、これは整数に見えても、String型として扱われるのです。

この関数( Int-> Int )に渡せるのは、42というような整数のみです。
結果として整数になるなら、式の結果でも問題ありません。たとえば次のような例は、問題ありません。

  1. 1 + 2
  2. (Math.abs 1) 補足: Math.absの型は、 Int -> Int型です。

上記のような式の結果も値として扱われます。

パズルで例えると、最終的に欲しい値を求めるために、ピースを組み合わせるようなイメージです。
少し複雑な例ですが、 Int -> String -> Int -> Int のような関数があったら、次の値をその関数に渡さなければいけません。

  1. Int型の値
  2. String型の値
  3. Int型の値

戻り値であるIntの値が欲しければ、この三つの値を関数に渡す必要があります。引数を渡す順番を変えたり省略することはできません。

NOTE: 高階関数と部分適用 という概念をマスターすれば、ピースを加工して、パズルのピース(関数や式のこと)を組み合わせられます。

List型

小さな式を組み合せて、より多きな式をつくるように、小さな型も組み合わせて多きな型にできます。
List型の正式な型は、List aです。このaは、型引数といって、自分の好きな型を与えることができます。

例えば、List型は、Int型を渡せば List Int型になります。String型を渡せば List String型です。これは、まるでInt型やString型などの単純な型を加工しているようです。

次にあげる式は、すべてList型です。

  1. [1, 2, 3] 要素3個のList Int
  2. ["Hello", "World"] 要素2個のList String

要素の型に応じてListの型が決まります。

NOTE: 空のリストは、Listの型は、未確定となります。StringだったとしてもIntだったとしても、空リストを表現する値は、[]という同じ式になるからです。

Maybe型

List型では、複数の値(0個でも1個でも100個でも)を扱う型をつくれますが、もっと単純に0個か1個の値を扱いたい場合もあります。その場合に使える型が、Maybe型です。'Maybe' という英単語は、直訳すると、「多分」という意味です。

「多分、値が存在する」という状態を言い変えると0個か1個の値を保持してると言えます。

値が存在する場合は、次のように表現します。

  1. Just 42

イメージとしては、「ただ単純に42という値があります」という表現です。
このJust 42という値は、Maybe Int型になります。42という値は、Int型なので、Maybe Intとなるわけです。

もし、

Just "Hello" であれば、この値の型は、Maybe String型です。

値が存在しない場合は、次のように表現します。

  1. Nothing

この値の型は、この時点では決定しません。

まとめ

本記事では、次のことを説明しました。

  1. プログラマのミスを早期発見するために型がある。
  2. 小さな型を組み合わせて大きな型をつくれる。

Elmでプログラムを書いていると、型エラーをよく目にすることになります。エラーという語彙からネガティブな印象を受ける必要はありません。例えるなら、赤ペン先生が常にプログラムからミスを排除するようにサポートしてくれてるようなものです。

0
0
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
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?