グッドスカラは実際には1つのヌル値:None
しか持っていません。 null
は使用しないでください(ただし、既存のJavaコードとの下位互換性を除く)。
なぜOption[T]
が有用であるかに関する多くの回答があります。たとえば、thisを参照してください。
短いバージョン:
これはオプションの性質を明示的な署名にします。明らかに、以下のことは、我々はt
は「ヌル」ことができることを期待すると述べている:
def f(t: Option[T])
あなたは操作の前にヌルチェックする必要はありません。正常に動作(i: Option[Int]) => i.map(_ + 1)
i
がSome(5)
またはNone
、とOption
を保持しているかどうか入力がNone
である可能性があることを示すラッパー(したがって、出力はNone
でもよい)。
あなたが他の
Option
Sまたはコレクションを簡単に構成することができます
def f(i: Option[Int]) = i.map(_ + 1)
f(Some(5)) // Some(6)
f(None) // None
:
val a: Option[Int] = Some(1)
val b: Option[Int] = Some(6)
val c: Option[Int] = Some(5)
val d: Option[Int] = None
for(x <- a; y <- b; z <- c) yield x + y + z // Some(12)
for(x <- a; y <- d; z <- c) yield x + y + z // None
出典
2012-03-17 23:23:50
dhg
_ "これはC#がオプションの値型を導入した理由です" _これは理由ではありません。 – gdoron
これは 'Option'がなぜ' null'よりも優れているのかを説明する最も良い説明の一つです:[Scalaの "Option"とHaskellの "Maybe"タイプがあなたをnullから救う理由](http://james-iry.blogspot.com /2010/08/why-scalas-and-haskells-types-will-save.html) – Jesper