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