Colecciones Scala - Opción
Scala Option [T] es un contenedor para cero o un elemento de un tipo determinado. Una opción [T] puede serSome[T] o Noneobjeto, que representa un valor perdido. Por ejemplo, el método get de Scala's Map produce Some (valor) si se ha encontrado un valor correspondiente a una clave determinada, oNone si la clave dada no está definida en el Mapa.
El tipo de opción se usa con frecuencia en los programas Scala y puede compararlo con el nullvalor disponible en Java que no indica ningún valor. Por ejemplo, el método get de java.util.HashMap devuelve un valor almacenado en HashMap o un valor nulo si no se encontró ningún valor.
Digamos que tenemos un método que recupera un registro de la base de datos basado en una clave primaria.
def findPerson(key: Int): Option[Person]
El método devolverá Some [Person] si se encuentra el registro, pero None si no se encuentra el registro. Sigamos el siguiente programa.
Ejemplo
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" ))
}
}
Guarde el programa anterior en Demo.scala. Los siguientes comandos se utilizan para compilar y ejecutar este programa.
Mando
\>scalac Demo.scala
\>scala Demo
Salida
capitals.get( "France" ) : Some(Paris)
capitals.get( "India" ) : None
La forma más común de separar valores opcionales es mediante una coincidencia de patrones. Por ejemplo, pruebe el siguiente programa.
Ejemplo
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 => "?"
}
}
Guarde el programa anterior en Demo.scala. Los siguientes comandos se utilizan para compilar y ejecutar este programa.
Mando
\>scalac Demo.scala
\>scala Demo
Salida
show(capitals.get( "Japan")) : Tokyo
show(capitals.get( "India")) : ?
Usando el método getOrElse ()
A continuación se muestra el programa de ejemplo para mostrar cómo usar el método getOrElse () para acceder a un valor o un valor predeterminado cuando no hay ningún valor presente.
Ejemplo
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) )
}
}
Guarde el programa anterior en Demo.scala. Los siguientes comandos se utilizan para compilar y ejecutar este programa.
Mando
\>scalac Demo.scala
\>scala Demo
Salida
a.getOrElse(0): 5
b.getOrElse(10): 10
Usando el método isEmpty ()
A continuación se muestra el programa de ejemplo para mostrar cómo usar el método isEmpty () para verificar si la opción es Ninguna o no.
Ejemplo
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 )
}
}
Guarde el programa anterior en Demo.scala. Los siguientes comandos se utilizan para compilar y ejecutar este programa.
Mando
\>scalac Demo.scala
\>scala Demo
Ejemplo
a.isEmpty: false
b.isEmpty: true