10章列挙型とパターン
驚くほど多くの計算機の問題が、悲劇的な直和型の欠如として説明できる。(cf. lambdaの欠如)
−Graydon Hoare†1
本章の最初のトピックは、太古の昔からある強力な存在で、代償と引き換えにたくさんのことを喜んでやってくれ、さまざまな文明でさまざまな名前で呼ばれているものだ。ただし、悪魔のことではない。それはある種のユーザ定義データ型で、MLやHaskellのプログラマ達には、直和型(sum type)、判別共用体(discriminated union)、代数データ型(algebraic data type)などの名前で知られている。Rustでは列挙型(enumerations)もしくはenumと呼ぶ。悪魔と違って、これは完全に安全で、代償もそれほど大きくない。
C++やC#にも列挙型がある。これを用いて、名前付きの定数の集合を値とする独自の型を定義することができる。例えば、Red
、Orange
、Yellow
などを値とするColor
という型を定義することができる。このようなことはRustの列挙型でもできるが、Rustの列挙型ははるかに強力だ。Rustの列挙型にはデータを持つことができる。さまざまな型のデータを持つことも可能だ。例えば、RustのResult<String, io::Error>
型は列挙型だ。この型の値は、String
を持つOk
値か、io::Error
を持つErr
値のどちらかだ。これは、C++やC#の列挙型ではできない。Rustの列挙型は、どちらかと言うと共用体(union)に似ている。ただし、共用体と異なり、Rustの列挙型は型安全だ。 ...
Get プログラミングRust 第2版 now with the O’Reilly learning platform.
O’Reilly members experience books, live events, courses curated by job role, and more from O’Reilly and nearly 200 top publishers.