この記事は 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 を利用しています
外部資料
- enum Time::DayOfWeek - Crystal API Docs
- 列挙型 - Wikipedia
- リファクタリング−Rubyエディション - amazon
- struct Time - Crystal API Docs
- abstract struct Enum - Crystal API Docs
- gist-it
次の出番
Crystal Advent Calendar 2015 12 / 05
明日はいつもCrystal情報のRT拡散に余念がない yahhonob さんです!
「妄想っぽいはなしを」とのことでwktkですね。