昨日に引き続いてScalazの小ネタです。
OptionとBooleanの相互変換もよく出てくる処理です。普通に考えても簡単にできる処理ではありますが、より簡潔に書くことができればプログラミング効率も地味に上がってきます。
Option→Boolean
まず、OptionをBooleanに変換する処理です。OptionがSomeの場合はtrue、Noneの場合はfalseを得る処理になります。
この手の処理はmatch式が定番です。
o match { case Some(_) => true case None => false }
しかし、Scalazを使うともう少し短くできそうです。
まずcataメソッド。
o.cata(x => true, false)
次はsomeメソッドとnoneメソッドのチェイン。
o.some(x => true).none(false)
少し短くすることができましたが、Someに格納されている値は無関係なのでもう少し短くしたいところです。
そこで登場するのが?メソッドと|メソッドのチェイン。
o ? true | false
これはかなり短くなりました。
と、ここでよく考えてみると、Scalazを使わないでもOptionにそのものズバリがありました。
o.isDefined
OptionからBooleanへの変換はOptionのisDefinedメソッドを使うのが結論です。
Boolean→Option
BooleanをOptionに変換するときには:
if (b) 1.some else none
とするのが普通ですが、Scalazを用いると以下のように書くこともできます。
b ? 1.some | none
いずれの場合も、「else none」や「| none」がちょっと悔しいですね。
Scalazだと以下のように書くことができます。
b option 1
optionメソッドはby-nameパラメタなので以下のように処理を記述することもできます。この使い方は結構使い出があります。
b option { ...何かの処理 }
諸元
- Scala 2.10.0-RC1
- Scalaz 2.10.0-M6
0 件のコメント:
コメントを投稿