Coleções Scala - Opção
Scala Option [T] é um contêiner para zero ou um elemento de um determinado tipo. Uma opção [T] pode serSome[T] ou Noneobjeto, que representa um valor ausente. Por exemplo, o método get do Mapa de Scala produz Some (valor) se um valor correspondente a uma determinada chave for encontrado, ouNone se a chave fornecida não estiver definida no mapa.
O tipo de opção é usado freqüentemente em programas Scala e você pode comparar isso com o nullvalor disponível em Java que não indica nenhum valor. Por exemplo, o método get de java.util.HashMap retorna um valor armazenado no HashMap ou nulo se nenhum valor foi encontrado.
Digamos que temos um método que recupera um registro do banco de dados com base em uma chave primária.
def findPerson(key: Int): Option[Person]
O método retornará Some [Person] se o registro for encontrado, mas None se o registro não for encontrado. Vamos seguir o seguinte programa.
Exemplo
object Demo {
def main(args: Array[String]) {
val capitals = Map("France" -> "Paris", "Japan" -> "Tokyo")
println("capitals.get( \"France\" ) : " + capitals.get( "France" ))
println("capitals.get( \"India\" ) : " + capitals.get( "India" ))
}
}
Salve o programa acima em Demo.scala. Os seguintes comandos são usados para compilar e executar este programa.
Comando
\>scalac Demo.scala
\>scala Demo
Resultado
capitals.get( "France" ) : Some(Paris)
capitals.get( "India" ) : None
A maneira mais comum de separar valores opcionais é por meio de uma correspondência de padrão. Por exemplo, tente o seguinte programa.
Exemplo
object Demo {
def main(args: Array[String]) {
val capitals = Map("France" -> "Paris", "Japan" -> "Tokyo")
println("show(capitals.get( \"Japan\")) : " + show(capitals.get( "Japan")) )
println("show(capitals.get( \"India\")) : " + show(capitals.get( "India")) )
}
def show(x: Option[String]) = x match {
case Some(s) => s
case None => "?"
}
}
Salve o programa acima em Demo.scala. Os seguintes comandos são usados para compilar e executar este programa.
Comando
\>scalac Demo.scala
\>scala Demo
Resultado
show(capitals.get( "Japan")) : Tokyo
show(capitals.get( "India")) : ?
Usando o método getOrElse ()
A seguir está o programa de exemplo para mostrar como usar o método getOrElse () para acessar um valor ou um padrão quando nenhum valor está presente.
Exemplo
object Demo {
def main(args: Array[String]) {
val a:Option[Int] = Some(5)
val b:Option[Int] = None
println("a.getOrElse(0): " + a.getOrElse(0) )
println("b.getOrElse(10): " + b.getOrElse(10) )
}
}
Salve o programa acima em Demo.scala. Os seguintes comandos são usados para compilar e executar este programa.
Comando
\>scalac Demo.scala
\>scala Demo
Resultado
a.getOrElse(0): 5
b.getOrElse(10): 10
Usando o método isEmpty ()
A seguir está o programa de exemplo para mostrar como usar o método isEmpty () para verificar se a opção é None ou não.
Exemplo
object Demo {
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 )
}
}
Salve o programa acima em Demo.scala. Os seguintes comandos são usados para compilar e executar este programa.
Comando
\>scalac Demo.scala
\>scala Demo
Exemplo
a.isEmpty: false
b.isEmpty: true