English | 简体中文 | 繁體中文 | Русский язык | Français | Español | Português | Deutsch | 日本語 | 한국어 | Italiano | بالعربية

Scala Option(オプション)

Scala コレクション

ScalaのOption(オプション)タイプは、値が選択可能(存在するかどうか)を表すために使用されます。

Option[T]は、Tのタイプの選択可能な値のコンテナです:値が存在する場合、Option[T]はSome[T]で、存在しない場合、Option[T]はNoneオブジェクトです。

次に、コードの一部を見てみましょう:

// Scalaは変数のタイプを定義しなくても良いですが、明確にするために、私は
// を表示する定義にしました
 
val myMap: Map[String, String] = Map("key1" -> "value")
val value1: Option[String] = myMap.get("key1")
val value2: Option[String] = myMap.get("key2")
 
println(value1) // Some("value1")
println(value2) // None

上記のコードでは、myMapはStringのタイプのKeyとStringのタイプのValueを持つhash mapですが、get()メソッドがOption[String]というクラスを返却するのが異なります。

Scala は Option[String] を使用して「String を返すことを試みますが、String が提供されない可能性があります」と伝えます。

myMap には key がありません2 このデータでは、get() メソッドが None を返します。

Option には二つのサブカテゴリーがあります。一つは Some、もう一つは None です。その関数が Some を返した場合、この関数が成功して String をあなたに提供したことを意味し、get() 関数を通じてその String を取得することができます。その場合に None が返された場合は、String が提供されないことを意味します。

另一个示例:

object Test {
   def main(args: Array[String]) {
      val sites = Map40;"w3codebox" -> "ja.oldtoolbag.com", "google" -> "www.google.com"41;
     
      println("sites.get( "w3codebox\" ) : " +  0;sites.get40; "w3codebox"41;) // Some(ja.oldtoolbag.com)
      println("sites.get( "baidu" ) : " +  0;sites.get40; "baidu"41;)  //  None
   }
}

上記のコードを実行すると、以下の結果が得られます:

$ scalac Test.scala 
$ scala Test
sites.get( "w3codebox" ) : Some(ja.oldtoolbag.com)
sites.get( "baidu" ) : None

你也可以通过模式匹配来输出匹配值。示例如下:

object Test {
   def main(args: Array[String]) {
      val sites = Map40;"w3codebox" -> "ja.oldtoolbag.com", "google" -> "www.google.com"41;
     
      println("show(sites.get( "w3codebox\")) : " +  
                                          show40;sites.get40; "w3codebox"41;) )
      println("show(sites.get( "baidu")) : " +  
                                          show40;sites.get40; "baidu"41;) )
   }
   
   def show40;x: Option91;String]) = x match123;
      case Some40;s) => s
      case None => "?"
   }
}

上記のコードを実行すると、以下の結果が得られます:

$ scalac Test.scala 
$ scala Test
show(sites.get( "w3codebox")) : ja.oldtoolbag.com
show(sites.get( "baidu")) : ?

getOrElse() 方法

你可以使用 getOrElse() 方法来获取元组中存在的元素或者使用其默认的值,示例如下:

object Test {
   def main(args: Array[String]) {
      val a:Option[Int] = Some(5)
      val b:Option[Int] = None
     
      println("a.getOrElse(0): " + a.getOrElse40;0) )
      println("b.getOrElse(10): " + b.getOrElse40;10) )
   }
}

上記のコードを実行すると、以下の結果が得られます:

$ scalac Test.scala 
$ scala Test
a.getOrElse(0): 5
b.getOrElse(10): 10

isEmpty()メソッド

isEmpty()メソッドを使用して、タプルの要素がNoneかどうかを検出することができます。以下に例を示します:

object Test {
   def main(args: Array[String]) {
      val a:Option[Int] = Some(5)
      val b:Option[Int] = None
     
      println("a.isEmpty: " + a.isEmpty )
      println("b.isEmpty: " + b.isEmpty )
   }
}

上記のコードを実行すると、以下の結果が得られます:

$ scalac Test.scala 
$ scala Test
a.isEmpty: false
b.isEmpty: true

Scala Optionの常用メソッド

以下にScala Optionの常用メソッドを示します:

序号 メソッド及び説明
1

def get: A

オプションの値を取得します

2

def isEmpty: Boolean

オプションの型の値がNoneかどうかを検出し、それがNoneの場合はtrue、それ以外の場合はfalseを返します。

3

def productArity: Int

要素の数を返します、A(x_1, ..., x_k), 返却 k

4

def productElement(n: Int): Any

指定されたオプションを取得し、0から始めます。つまり A(x_1, ..., x_k), 返却 x_(n+1) 、 0 < n < k.

5

def exists(p: (A) => Boolean): Boolean

指定された条件に一致する要素がオプションに存在し、Noneでない場合にtrueを返します。それ以外の場合、falseを返します。

6

def filter(p: (A) => Boolean): Option[A]

オプションが値を含んでおり、filterに渡された条件関数がtrueを返した場合、filterはSomeサンプルを返します。それ以外の場合、返り値はNoneです。

7

def filterNot(p: (A) => Boolean): Option[A]

オプションが値を含んでおり、filterに渡された条件関数がfalseを返した場合、filterはSomeサンプルを返します。それ以外の場合、返り値はNoneです。

8

def flatMap[B](f: (A) => Option[B]): Option[B]

オプションが値を含む場合、関数 f で処理後を返します。それ以外の場合は None を返します。

9

def foreach[U](f: (A) => U): Unit

オプションが値を含む場合、各値を関数 f に渡します。それ以外の場合は処理しません。

10

def getOrElse[B >: A](default: => B): B

オプションが値を含む場合、オプションの値を返します。それ以外の場合は設定されたデフォルト値を返します。

11

def isDefined: Boolean

オプションの値が Some の場合 true を返します。それ以外の場合は false を返します。

12

def iterator: Iterator[A]

オプションが値を含む場合、オプションの値をイテレートします。オプションが空の場合は、空のイテレータを返します。

13

def map[B](f: (A) => B): Option[B]

オプションが値を含む場合、関数 f で処理された Some を返します。それ以外の場合は None を返します。

14

def orElse[B >: A](alternative: => Option[B]): Option[B]

Option が None であれば、orElse メソッドは引数の値を返します。それ以外の場合は、その Option を直接返します。

15

def orNull

オプションが値を含む場合、オプションの値を返します。それ以外の場合は null を返します。

Scala コレクション