Tbpgr Blog

Employee Experience Engineer tbpgr(てぃーびー) のブログ

Crystalは標準ライブラリに列挙型(Enum)を持っている

f:id:tbpg:20151202230253j:plain

この記事は Crystal Advent Calendar 2015 の 4 日目の記事です 昨日は、5t111111 さんによる Crystal の Dash Docset を作る でした。
熱がでているとのこと。お大事になさってください。
ところで

明日は tbpgr さんです!なんと、もう記事は下書きまで準備できているらしい…
すげえ…さすが、絶対に真似できないようなことをサラッとやってくれる!

こんなかんじでハードルを上げられてる気がしますが、ものすごくあっさりとした内容です。


Crystalは標準ライブラリに列挙型(Enum)を持っています。

列挙型とは?

一連の有限の値を取り扱うデータ型。
マジックナンバーを利用するのに比べて、可読性が高く
IDEなどの入力支援を受けることでコーディングをしやすくなります

詳細については下記を確認してください。

Rubyと列挙型

Rubyは標準で列挙型をサポートしていません。
例えば、以下のようにModuleを利用して実現するような形になります。

Railsに関してはenumをサポートするようになりました。

標準でサポートされていないこともあってか、Rubyのライブラリを読んでいても
Javaなどで実装する場合ならEnumを利用するような箇所についても
Module版のEnumを利用しているようなケースはあまり見かけません。

Crystalと列挙型

標準ライブラリでEnumをサポート

Crystalは標準でEnumをサポートしています。

サンプル

標準で曜日の Enum である Time::DayOfWeek がサポートされています。

pp Time::DayOfWeek.values
pp Time::DayOfWeek.names
pp Time::DayOfWeek.from_value?(1)
pp Time::DayOfWeek.parse?("Monday")

# => Time::DayOfWeek.values = [Sunday, Monday, Tuesday, Wednesday, Thursday, Friday, Saturday]
# => Time::DayOfWeek.names = ["Sunday", "Monday", "Tuesday", "Wednesday", "Thursday", "Friday", "Saturday"]
# => Time::DayOfWeek.from_value?(1) = Monday
# => Time::DayOfWeek.parse?("Monday") = Monday

Time struct の中でも利用されています。

GitHubのコード埋め込みに gist-it を利用しています

外部資料

次の出番

Crystal Advent Calendar 2015 12 / 05

明日はいつもCrystal情報のRT拡散に余念がない yahhonob さんです!
「妄想っぽいはなしを」とのことでwktkですね。