した直方体スマートフォン用の表示で見るぷるぷるした直方体エンジニアの雑記です。―Scalazコントリビューターによる関数型徹底ガイド"を買いました。読んで、各章の内容をまとめてゆきます。実用的なエラー処理についてです。blog.esplo.net4章この章では、エラー処理について触れています。例外が参照透過でないこと、型安全でないこと、mapなどの汎用性の高い関数との相性が最悪であることが述べられています。代わりにnullや特殊な値を返す方法、呼び出し元でエラー処理関数を引数として渡す方法などを挙げて問題点を列挙しています。Optionこれらに代わるアプローチとして、Option型が紹介されます。ここで早速練習問題が出ます。filterを実装せよ。None)Optionがネストしたりして少しややこしいですが、必要な処理と必要な型を考えるとそこそこスムーズに書くことが出来ました。flatMapをベースとして、variance関数を実装せよ。エラー処理を気にせず書くと出来上がりです。2))))便利で安全なOptionですが、今までの関数を全て対応するよう書き換えないといけない?という不安があがってきます。そんな時のためにliftという考えを使って、普通の関数をOption対応させることが可能です。2項関数を使ってOption型を2つ受け取るmap2を作れ。sb)))配列に対しNoneを1つでも含む場合はNoneを返し、それ以外は全てのSomeを返すsequence関数を作れ。foldRightでリストを作る途中で、先ほどのmap2を使えば良さそうです。_))1度しか走査を行わない、sequenceを総称したtraverse関数を作れ。上記sequenceととほとんど同じですね。_))EitherOptionはエラーが起きたことを知らせてくれますが、追加情報を与えてはくれません。そこで、Eitherデータ型を使って情報を付与したエラーを表現します。Eitherは、Right(正常値)とLeft(エラー値)の直和からなるデータ型です。どちらかに値が入るわけですね。Right値を操作するmap/flatMap/orElse/map2を作れ。sugarが用意されていてforで書けます。定着していないのでflatMap/mapで書いてしまいましたが、forにも慣れていきたいです。traverseを作れ。_))ほとんど同じなので、sequenceはtraverseを使って書くこともできますね。B]になればよいです。map2でつなげた際、複数のエラーが起きていても1つしか報告できない。何を変更すればよいか。Eitherは1つしかエラーを持てないので、Leftをリストにしてあげれば複数持てそうです。エラーが発生するたびにリストに追加してゆくイメージです。ここで4章は終了です。3章の怒涛の練習問題の後だと、多少物足りない感はあります。先は長いですので、各章はこれくらいの長さが良かったりします。次章では非正格の話です。徐々に深いところに潜っている感じがします。思ったこと本章ではエラー処理を扱いましたが、実際のプログラムでも特に役立つ章だと思いました。例外を使えば一瞬で片付きますが、フローが乱れたり型安全が崩れたり処理し忘れたりと、デメリットも大きいです。エラーも値として後でまとめて処理する、純粋性を保つための工夫が詰め込まれていると感じました。reserved.スターをつけました引用をストックしましたストック一覧を見る閉じる引用するにはまずログインしてくださいログイン閉じる引用をストックできませんでした。再度お試しください閉じる限定公開記事のため引用できません。