2014年5月19日月曜日

かんたんScalaz/Booean論理記号

ScalazではBooleanに以下の論理演算子を追加しています。







演算子意味別名Scala
Conjunction, AND/\&&
Disjunction, OR\/||
!||Negation of Disjunction, NOR
!&&Negation of Conjunction, NAND
ーー>Conditional
<ーーInverse Conditional
Negational of Conditionalー/>
Negation of Inverse Conditional<\ー

かんたんScalazの観点では、以下のような扱いがよいと思います。

  • 「ならば」の論理演算である「ーー>」は覚える価値がある。
  • 他の演算子は必要に応じて。

ーー>

Scala(や通常のプログラミング言語)が提供していない論理演算子の中で「ならば(Conditional, 論理包含、条件文)」を表す論理演算子「ーー>」はなかなか有用ではないかと思います。「ーー>」の使い所はたとえば以下のようなassertです。

assert (!isCacheable(x) --> !isCached(x), "キャッシュ可能でない場合、キャッシュにデータが入っているのはおかしい。")

このケースだと、キャッシュ可能の場合はキャッシュにデータがあってもなくてもよいので、「ならば」の論理演算の条件にぴったり合います。

ちなみに、上記のassertは「<ーー」(Inverse Conditional, 逆論理包含?)を使って以下のようにも書けるようです。

assert (isCacheable(x) <-- isCached(x), "キャッシュにデータが入っている場合、キャッシュ可能である必要がある。")

∧と∨

論理積の演算子に「∧」や「/\」、論理和の演算子に「∨」や「\/」が定義されていますが、Scalaの論理演算子「&&」、「||」とかぶるので使用しても通常のプログラミングが特に便利になるというものではありません。逆に実行時のオーバーヘッドは確実にあるので、「∧」や「∨」といった数学記号をどうしても使いたい局面でなければ無理をして使う感じでもないでしょう。

否定形

以下のものは他の演算子の否定形です。否定形があると覚えておいて、使う時に仕様を確認する形でよいでしょう。





論理記号別名否定元
!||||
!&&&&
ー/>ーー>
<\ー<ーー

諸元

  • Scala 2.10.4
  • Scalaz 7.0.6

0 件のコメント:

コメントを投稿