NonEmptyList
名の通りの空じゃないリストです。
利点は
- head,tailで必ず値が返ることが保証される
- reduceも必ず成功する・・・のだがそれにあたるメソッドはない。
wrapNelは値をNonEmptyListで包みます。
nelはNonEmptyListのインスタンスを作ります。
<::は値を先頭に追加。
<:::, :::>はListをNonEmptyListに連結します。
ただ残念なところは、せっかくheadやtailが成功するのに、分解するためのunapply, unapplySeqが定義されていないことです。
ScalazではValidationと併せて使われます。
Validation
Validationはエラーか値を返すための直和型です。
Eitherとの違いはエラーをaccumulateできるところです。
解説、考察などは
http://d.hatena.ne.jp/xuwei/20110927/1317156625
http://d.hatena.ne.jp/cooldaemon/20111017/1318862426
http://d.hatena.ne.jp/terazzo/20111022/1319295098
に書いてあってあまり書くことない・・・
のでとりあえず関係するものを挙げていきます。
ValidationNEL
Validation[NonEmptyList[E], A]のエイリアスです。
Scalazオブジェクトに定義されています。
success, fail, successNel, failNel
Success, Failureで値を包みます。
parse{Boolean,Byte,Short,Int,Long,Float,Double}
StringWに定義されている関数。
パースに失敗したらNumberFormatExceptionをValidationで返します。
Validation#failはFailProjectionというError値を操作するためのコンテナを返します。
Eitherの場合はRightProjection, LeftProjectionとありますが、ValidationはデフォルトでSuccessに対して操作をするので、FailProjectionだけが存在します。
FailProjection#validationはもとのValidationを返します。
lift, liftFailNel
持ち上げ関数。
liftは値をwrap、liftFailNelはエラーをNonEmptyListでwrapします。
|, |||
| は失敗していたときに渡した値が返ります。getOrElseのようなもの。
||| は失敗していたときは、そのエラーの値をとり、成功時の型で値を返します。
Validation、とってもいいですよ!
最近、エラー処理を書いてはいけないというスライドが上がっていました。
アレほど強力ではないですが、エラーをaccumulateしていけるということはやはり便利だと思います。
0 件のコメント:
コメントを投稿