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

Scala Option (opção)

Conjunto Scala

O tipo Option (opção) do Scala é usado para representar um valor opcional (com valor ou sem valor).

Option[T] é um contêiner de valor opcional do tipo T: se o valor existir, Option[T] é um Some[T], se não existir, Option[T] é o objeto None .

Vamos analisar um trecho de código a seguir:

// Embora o Scala possa não definir o tipo de variável, ainda assim, para maior clareza, eu ainda
// definiu-o explicitamente
 
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

No código acima, myMap é um hash map do tipo String para String, mas o que difere é que seu método get() retorna um tipo chamado Option[String].

Scala usa Option[String] para informar: 'Vou tentar retornar um String, mas pode não ter String para retornar'.

Não há chave no myMap2 Este dado, o método get() retorna None.

Option tem dois subtipos, um é Some e o outro é None, quando ele retorna Some, isso significa que a função foi bem-sucedida em fornecer um String, e você pode obter esse String através do método get(), se ele retornar None, isso significa que não há String para fornecer.

Outro exemplo:

object Test {
   def main(args: Array[String]) {
      val sites = Map#40;"w3codebox" -> "pt.oldtoolbag.com", "google" -> "www.google.com"#41;
     
      println+codebox\ +  0;sites.get#40; "w3codebox" #41;) // 3codebox.com)
      println("sites.get( \ +  0;sites.get#40; "baidu" #41;)  //  None
   }
}

Executar o código acima, o resultado de saída será:

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

Você também pode usar correspondência de padrão para exibir o valor correspondente. Veja o exemplo a seguir:

object Test {
   def main(args: Array[String]) {
      val sites = Map#40;"w3codebox" -> "pt.oldtoolbag.com", "google" -> "www.google.com"#41;
     
      println+codebox\ +  
                                          show#40;sites.get#40; "w341;) )
      println("show(sites.get( \ +  
                                          show#40;sites.get#40; "baidu"#41;) )
   }
   
   def show#40;x: Option#91;String]) = x match #123;
      case Some#40;s#41; => s
      case None => "?"
   }
}

Executar o código acima, o resultado de saída será:

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

Método getOrElse()

Você pode usar o método getOrElse() para obter o elemento existente no tupla ou usar seu valor padrão, veja o exemplo a seguir:

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#41; )
      println("b.getOrElse(10): " + b.getOrElse40;10) )
   }
}

Executar o código acima, o resultado de saída será:

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

Método isEmpty()

Você pode usar o método isEmpty() para detectar se o elemento do tuplo é None, exemplo a seguir:

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 )
   }
}

Executar o código acima, o resultado de saída será:

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

Métodos comuns do Scala Option

A tabela a seguir lista os métodos comuns do Scala Option:

Número Métodos e descrição
1

def get: A

Obter o valor opcional

2

def isEmpty: Boolean

Detecta se o valor do tipo opcional é None, se for, retorna true, caso contrário, retorna false

3

def productArity: Int

Retorna o número de elementos, A(x_1, ..., x_k), retorna k

4

def productElement(n: Int): Any

Obter a opção especificada, começando com 0. Ou seja, A(x_1, ..., x_k), retorna x_(n+1) , 0 < n < k.

5

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

Se o elemento especificado na opção existir e não for None, retornará true, caso contrário, retornará false.

6

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

Se a opção contiver um valor e a função de condição passada para o filter retornar true, o filter retornará Some exemplo. Caso contrário, o valor retornado será None.

7

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

Se a opção contiver um valor e a função de condição passada para o filter retornar false, o filter retornará Some exemplo. Caso contrário, o valor retornado será None.

8

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

Se a opção contiver um valor, é passado para a função f para processamento e retornado, caso contrário, retorna None

9

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

Se a opção contiver um valor, cada valor será passado para a função f, caso contrário, não será tratado.

10

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

Se a opção contiver um valor, retorna o valor da opção, caso contrário, retorna o valor padrão definido.

11

def isDefined: Boolean

Se o valor opcional for um exemplo de Some, retorna true, caso contrário, retorna false.

12

def iterator: Iterator[A]

Se a opção contiver um valor, itera sobre o valor opcional. Se o valor opcional estiver vazio, retorna um iterador vazio.

13

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

Se a opção contiver um valor, retorna Some processado pela função f, caso contrário, retorna None

14

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

Se uma Option for None, o método orElse retornará o valor do parâmetro nomeado, caso contrário, retornará diretamente essa Option.

15

def orNull

Se a opção contiver um valor, retorna o valor da opção, caso contrário, retorna null.

Conjunto Scala