だらだらしてたいなぁ

ずっとゲームしながらだらだらしてたいけど、がんばってブログ書いてみた

「淡路島の電車の運行状況を取得する方法」のinterface問題をscalaの型クラスで書いてみた

元ネタはひしだまさんのエントリです。
淡路島の電車の運行状況を取得する方法 - ひしだまの変更履歴
その元ネタはこちらです。
「淡路島の電車の運行状況を聞いた話」をシステム開発に置き換えてみる - 日々常々

interfaceを個別に増やすなら型クラスかな〜と思い試しに書いてみました。シンプルにする為に、いろいろ手を抜いていますのでご了承ください。
ついでなので、元の元記事のnull問題も解決して、DSLを使って日本語で会話している風にしてあります。実際に動くので、sbt等で試してみてください。

簡単に説明

型クラス

型クラスを使う事によって、型ごと個別に振る舞い(interface)の定義ができます。今回は鉄道路線だけですが、後から飛行機やバス等を個別に増やすこともできます。*1

null問題

なんという事でしょう。scalaだとnull問題はEither型で解決できてしまいます。Eitherは2つの型を別々に保持する為のコンテナ(箱)で、今回は、運行状況の取得に成功した場合の値(Right)失敗した場合のメッセージ(Left)を格納しています。Maybeを使えというコメントが多かったようですが、失敗した原因も分かった方が良いですしね。

日本語DSL

日本語DSLはおまけです。scalaって簡単にこんな事が出来るんですよ。丸括弧は…見なかったことにしておいてください…(ノД`)

要望があれば、コードの詳しい説明も書きます。
尚、このエントリを読んだことによりjavaを投げ捨てたくなっても、当方は一切責任を持ちません(´・ω・`)

すごいHaskellたのしく学ぼう!

すごいHaskellたのしく学ぼう!


Scalaスケーラブルプログラミング第2版

Scalaスケーラブルプログラミング第2版

*1:型クラスは後ほど別エントリで説明する予定です