鍍金池/ 教程/ Scala/ Option 類型
模式的種類(三)
模式限定修飾
簡單的示例
模式的種類(二)
模式無處不在
模式的種類(四)
Sealed Classes
Option 類型
重疊模式定義
模式的種類(一)

Option 類型

Scala 語言中包含一個(gè)標(biāo)準(zhǔn)類型 Option 類型,代表可選值,Option 類型的值可以有兩個(gè)可能的值,一個(gè)為 some(x) 其中 x 為有效值,另外一個(gè)為 None 對象,代表空值。

Option 類型的值通常作為 Scala 集合類型(List,Map 等)操作的返回類型。 比如 Map 的 get 方法:

    scala> val capitals = Map("France"->"Paris", "Japan"->"Tokyo","China"->"Beijing")
    capitals: scala.collection.immutable.Map[String,String] = Map(France -> Paris, Japan -> Tokyo, China -> Beijing)

    scala> capitals get "France"
    res0: Option[String] = Some(Paris)

    scala> capitals get "North Pole"
    res1: Option[String] = None

將 Option 類型的值放開的一種常見的方法是使用模式匹配:

    scala> def show(x:Option[String]) = x match{
        case Some(s) => s
        case None => "?"
    }

    show: (x: Option[String])String

    scala> show (capitals get "China")
    res3: String = Beijing

    scala> show (capitals get "France")
    res4: String = Paris

    scala> show (capitals get "North Pole")
    res5: String = ?

Scala 程序使用 Option 非常頻繁,在 Java 中使用 null 來表示空值,代碼中很多地方都要添加 Null 檢測,不然很容易出現(xiàn) NullPointException。 因此 Java 程序需要關(guān)心那些變量可能是 Null,而這些變量出現(xiàn) Null 的可能性很低,但一但出現(xiàn),很難查出為什么出現(xiàn) NullPointerException。

Scala 的 Option 類型可以避免這種情況,因此 Scala 應(yīng)用推薦使用 Option 類型來代表一些可選值。使用 Option 類型,讀者一眼就可以看出這種類型的值可能為 None。

注: Option 類型是 Monoid,通俗的理解可以認(rèn)為是一種設(shè)計(jì)模式。