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이고 값의 타입이 String인 해시 맵이지만, 그의 get()이 반환하는 것은 Option[String]이라는 카테고리입니다.

Scala 使用 Option[String] 来告诉你:「我会想办法回传一个 String,但也可能没有 String 给你」。

myMap 里并没有 key2 这笔数据,get() 方法返回 None。

Option 有两个子类别,一个是 Some,一个是 None,当他回传 Some 的时候,代表这个函式成功地给了你一个 String,而你可以透过 get() 这个函式拿到那个 String,如果他返回的是 None,则代表没有字符串可以给你。

另一个示例:

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

위 코드를 실행하면 다음과 같은 출력 결과가 나타납니다:

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

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

object Test {
   def main(args: Array[String]) {
      val sites = Map40;"w3codebox" -> "ko.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")) : ko.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인지 확인합니다. 그렇다면 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](기본: => 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](대체: => Option[B]): Option[B]

Option이 None이면, orElse 메서드는 전달된 명명된 매개변수의 값을 반환하고, 그렇지 않으면 그 Option을 직접 반환합니다.

15

def orNull

선택 사항이 값이 포함되어 있으면 선택 사항 값을 반환하고, 그렇지 않으면 null을 반환합니다.

Scala 집합