Option型のmapとflatMapがようやくわかった(Scalaの話)


Scalaを始めて1ヶ月と少し。Option型のmapとflatMapを使う場面が現れ、一体こいつが何なのかを理解するのに時間がかかった。

mapは、A => B の関数を引数に取る。Option[A]の中身を取り出して、Some(A)の場合はA => B を適用し、Option化して返す。

内側でやっていることは

で、一番頭を悩ませたのがflatMapで、一体こいつは何のために居るのかで悩んだ。

flatMapの定義はこんなかんじ

悩んだ結果、わかったのは、flatMapはmapを更に多重に呼び出すために居るらしいということ。

参考にしたページに似た例を使うと

は、呼び出しを見ると、もしpがNoneだった場合に、password.mapの結果はNoneになる。だが、mapは A=>Bであって、A=>Noneを認めていない。

だが、flatMapはA=>Option[B]を引数に取り、かつNoneはOptionのサブクラスなので、A=>Noneとなってもコンパイルエラーを起こさない。

つまり、flatMapはmapを連続で使うときのためのもの、と認識することにした。関数型脳の道は遠い。

 


この記事はScala, プログラミングに投稿されました タグ: . このパーマリンクをブックマークする。 コメントを投稿するか、トラックバックをどうぞ: トラックバック URL.

コメントする

あなたのメールは 絶対に 公開されたり共有されたりしません。 * が付いている欄は必須項目です

次の HTML タグと属性が使用できます: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code class="" title="" data-url=""> <del datetime=""> <em> <i> <q cite=""> <s> <strike> <strong> <pre class="" title="" data-url=""> <span class="" title="" data-url="">

*
*