LoginSignup
1
0

More than 3 years have passed since last update.

Option型は長さ1のリスト

Last updated at Posted at 2020-01-17

はじめに

「Option型は長さ1のリスト」と解釈すると,ScalaのOptionに関する理解が深まったのでメモ.間違ったことが書かれていたりしたら,指摘お願いします.

Option型

まず,Option型について説明します.Optionは抽象クラスであり,サブクラスはSomeとNoneの2つです.また,リストと同様に,Option型はmapメソッドやfilterメソッドなどのコレクションメソッドを所持しています.そのため,Option型は構造的には長さ1のリストと考えることができます.

以下,Option型とList型の類似性をコードによって示します.

(例)map

Listのmapと同様に、Optionのmapは、内包する要素に対して関数を適用します。

    val opt: Option[String] = Some("some")
    opt.map(_.toUpperCase).foreach(println) // SOME

    val lst: List[String] = List("list")
    lst.map(_.toUpperCase).foreach(println) // LIST

(例)flatten

    val optionNums: List[Option[Int]] = (1 to 10).map(Some(_)).toList
    println(optionNums.flatten) // List(1, 2, 3, 4, 5, 6, 7, 8, 9, 10)

    val listNums: List[List[Int]] = (1 to 10).map(List(_)).toList
    println(listNums.flatten) // List(1, 2, 3, 4, 5, 6, 7, 8, 9, 10)

(例)畳み込み

    val opt: Option[String] = Some("some")
    println(opt.fold("NONE")(_.toUpperCase)) // SOME

    val lst: List[String] = List("list")
    println(lst.foldLeft("LIST")(_ + _)) // LISTlist

結論

Option型を長さ1のリストと解釈すると,Option型について理解しやすい気がします.

1
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
0