使いこなすと、より関数型言語らしいコードが書けるようになります。Option[V])モナド(monad)として使い、エラー値を扱うコードの流れをスムーズにするfor-comprehensionと共に使うと良いモナドと聞いて怖じ気付く必要はありません。これから詳しく説明していきます。パターンマッチでOptionの値を取得Option[A]は値が存在するか、しないかを表すクラスで、Some(a)とNoneの二種類の値があります。パターンマッチでこの二種類の値を処理するのが基本です。CパターンマッチをせずにOptionを処理するOptionの値がSome(a)の時だけ続きの処理を行うにはmapを使います。foreachなどcollectionでよく使う関数も定義されており、これらもやはり値がSome(x)の場合のみ処理が実行されるように定義されています。詳しくはOptionのAPIを参照してください。エラー処理にOptionを使うまず例題を示します。例:入力がnullかどうかをチェックする例えば、ユーザー名とパスワードを受け取ってログインする関数loginを作ることを考えます。ユーザー名とパスワードの情報が揃っていないと次の処理ができないので、nullかどうかのチェックが入りますが、以下のように、コードが入り組んでしまいます。Javaなどのプログラミング言語でよく使われています。password)}ただし、不備のあった場合の処理(falseを返すコード)が重複して現れてしまうので無駄があります。それ以外の場合はSome(v)に変換してくれます。false}ここでパターンマッチを利用するのもありです。大分コードがすっきりしてきましたが、ユーザー名が与えられていない場合、そこで処理を終了してほしいのですが、上記のコードではパスワードの方も常にSome(p)かどうかを判定しているので無駄がありそうです。モナド(monad)とはコードをきれいにしつつ、処理の無駄も省くのに登場するのがモナドです。ScalaのOptionはモナドになっています。flatMapの二種類の関数が定義されているものと理解すればよいでしょう。少なくともこの理解だけですぐに使い始めることができます。flatMapはその毛皮を剥がしてから何かの操作を行い、その結果に対してまた毛皮を着せる操作に対応しています。Monad[B]と毛皮を一枚で済ませるようにするのが特徴です。OptionはMonadScalaのOptionがmonadになっていると言いましたが、では実際にOptionの実装の一部を簡単にしたものを取り出して見てみましょう。flatMapは共に実行結果としてNoneが返ります。flatMapの操作は、Optionの値がSomeであろうとNoneであろうと連続して適用していけるという点です。上記のNoneクラスは型情報を簡略化した定義になっています。covariantな型を使うを参考に。flatMapを使うif文やパターンマッチを使ったnull(またはNone)の値のチェックは、ログインをするためのコードの本質的な部分ではないので、本来はエラー処理の部分を気にせずプログラミングできることが好ましいはずです。flatMapを使うとコードの流れを妨げずに、必要な処理に的を絞ってコードを書けるようになります。flatMapの適用結果はNoneになるだけなので、コード中に出てくるエラー処理は最後のgetOrElseの部分のみになり、残りはエラー処理を気にせずに一本道で書けます。コメントを挟んで、コードの中身をより詳しく説明すると以下のようになります。getOrElseもmonadを剥がす。flatMapを活用すると、コードは一行に収まるもののやや面倒な書き方になってしまうのが玉に瑕です。for-comprehensionを使って簡潔にそこでScalaのfor文による網羅(for-comprehension)を使うと、上記のコードを手短に書けるようになります。passの情報が揃って無い場合にはfalseが返るこれがどうmonadなのか不思議に思うのは当然ですが、for-comprehensionが具体的に何をしているのかを知れば納得できるはずです。sugarとなっています。以下に置き換えの定義を示します。mapを使って以下に置き換えられます。e一番外側のパラメータがflatMapに置き換えられます。これが再帰的に繰り返され、最後に上記のパラメータが1つの場合のルールによりmapが適用されます。flatMapで置き換えたものと同等になることを確認してください。