#author("2019-11-23T00:02:04+00:00","default:sagasite","sagasite")
[[Program]] > [[JavaScript]] > [[AltJS]] > [[Elm]] > [[Elmガイド>Elm_guide]] > [[型>Elm_guide_Types]] > カスタム型
#norelated
#contents
//----------------------------------------
*カスタム型 [#d607f841]
-カスタム型 · An Introduction to Elm https://guide.elm-lang.jp/types/custom_types.html
~
一応読んだけど、そういうもんだという表面的な理解しか得られていない。
いまいちよく理解できていない。うまく言語化できないけど、モヤモヤが残るかんじ。
Elm本もパラレル読みして、もう少し掘り下げないといけない。
**型の設計 [#d382d025]
>ある状況を非常に厳密に表現し始めるのにカスタム型は極めて強力です。
例えばもし何かデータをロードされるのを待っているとしたら、その状況をこのようにカスタム型で表現したいかもしれません:
#code(haskell){{
type Profile
= Failure
| Loading
| Success { name : String, description : String }
}}
Profile のデータの状態をLoadingから始めて、フェッチに失敗したらFailure、成功したらSuccessというように何が起こったかに応じて状態を遷移させることができます。
このような設計はview関数を書くのを本当にシンプルにします。
データの状態がカスタム型で表現されているのでview関数はデータをロードしているときも常に妥当な見た目を表示することができます。
>Note: カスタム型は Elm で最も重要な機能です。
特に一度でもより厳密にシナリオを設計しようとする習慣を持てば、カスタム型に非常に深みを感じるでしょう。
わたしはこの深みを付録の「集合としての型」や「型のビット表現」で共有しようと試みています。
うーん、型は状態を表す仕組みとしても使えるんだな?
これはどういうことなのか?と常に頭の片隅に置きながら、さらにElmガイドを読み進めてみよう。
**バリアント [#hdb7bc0d]
「バリアント」という用語が出てきました。
英語版のElmガイドでは「variant」というスペルでした。
-Custom Types · An Introduction to Elm https://guide.elm-lang.org/types/custom_types.html
-variant(バリアント)の意味 - goo国語辞書 https://dictionary.goo.ne.jp/jn/180029/meaning/m0u/
>1 変型。変種。
2 本文の異同。また、異同のある本文。異文。「写本のバリアント」
3 同一種の生物集団の中に見られる遺伝子型の違い。同一種であっても個体によってさまざまな遺伝的変異が存在し、その変異の総体をバリアント(多様体)とよぶ。遺伝子バリアント。遺伝的バリアント。遺伝子多様体。遺伝的多様体。
元々の意味は、「変種」とか「多様体」という意味みたいです。
バリエーションという英語もありますね。
-variation(バリエーション)の意味 - goo国語辞書 https://dictionary.goo.ne.jp/jn/180045/meaning/m0u/
>1 物事の変化。また、物の変型・変種など。
2 変奏曲。
ここでElm本の説明を参照してみましょう。
#html{{
<table border="0" cellpadding="5"><tr><td valign="top"><a href="https://www.amazon.co.jp/exec/obidos/ASIN/4863542224/vertex9-22/" target="_blank"><img src="https://images-fe.ssl-images-amazon.com/images/I/51G32HC7rSL._SL160_.jpg" border="0"></a></td><td> </td><td valign="top"><a href="https://www.amazon.co.jp/exec/obidos/ASIN/4863542224/vertex9-22/" target="_blank">基礎からわかる Elm</a><br>鳥居 陽介<br>シーアンドアール研究所<br>2019-02-27<br>¥ 2,840</td></tr></table>
}}
~
(p.63)
>■シンプルな値の列挙
最も簡単なカスタム型の例は、考えうるすべての値を列挙したものです。他の言語では「enum(列挙型)」と呼ばれていることもあります。
たとえば、次のようにして曜日を表すDay型を定義することができます。
type Day = Mon | Tue | Wed | Thu | Fri | Sat | Sun
それぞれの値はバリアント(Variant)と呼ばれます。バリアント名は大文字から始まるキャメルケースにします。
列挙された値は、他の型の値と同じように使うことができます。
最初は混乱する人が多いのですが、Mon、Tueなどは「型」ではなく「値」なので注意してください。
-Elmのカスタム型は、他のプログラミング言語でいうところの「enum(列挙型)」に相当する。
-カスタム型の各値は、バリアントと呼ばれている。
今の段階では、カスタム型やバリアントの使い方が、いまいちピンと来ませんが、とりあえず先に行ってみます。