Opción Scala[ T ] es un contenedor para cero o un elemento de un tipo determinado. Una opción[T] pueden ser cualquiera de los dos Algunos[T] o Ninguno objeto, 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, o Ninguno 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 nulo valor 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á algunos[Person] si se encuentra el registro, pero Ninguno 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
Producción
capitals.get( "France" ) : Some(Paris) capitals.get( "India" ) : None
La forma más común de separar los 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
Producción
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
Producción
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
Métodos de opciones de Scala
A continuación se muestran los métodos importantes que puede utilizar mientras juega con Opciones. Para obtener una lista completa de los métodos disponibles, consulte la documentación oficial de Scala.
No Señor | Métodos con descripción |
---|---|
1 |
def get: A Devuelve el valor de la opción. |
2 |
def isEmpty: booleano Devuelve verdadero si la opción es Ninguna, falso en caso contrario. |
3 |
def productArity: Int El tamaño de este producto. Para un producto A (x_1, …, x_k), devuelve k |
4 |
def productElement (n: Int): Cualquiera El enésimo elemento de este producto, basado en 0. En otras palabras, para un producto A (x_1, …, x_k), devuelve x_ (n + 1) donde 0 |
5 |
def existe (p: (A) => Booleano): Booleano Devuelve verdadero si esta opción no está vacía y el predicado p devuelve verdadero cuando se aplica al valor de esta opción. De lo contrario, devuelve falso. |
6 |
def filter (p: (A) => Boolean): Opción[A] Devuelve esta opción si no está vacía y la aplicación del predicado p al valor de esta opción devuelve verdadero. De lo contrario, devuelva Ninguno. |
7 |
def filterNot (p: (A) => Boolean): Opción[A] Devuelve esta opción si no está vacía y la aplicación del predicado p al valor de esta opción devuelve falso. De lo contrario, devuelva Ninguno. |
8 |
def flatMap[B](f: (A) => Opción[B]): Opción[B] Devuelve el resultado de aplicar f al valor de esta opción si esta opción no está vacía. Devuelve Ninguno si esta opción está vacía. |
9 |
def foreach[U](f: (A) => U): Unidad Aplique el procedimiento dado f al valor de la opción, si no está vacía. De lo contrario, no haga nada. |
10 |
def getOrElse[B >: A](predeterminado: => B): B Devuelve el valor de la opción si la opción no está vacía; de lo contrario, devuelve el resultado de evaluar el valor predeterminado. |
11 |
def isDefined: booleano Devuelve verdadero si la opción es una instancia de Some, falso en caso contrario. |
12 |
def iterador: iterador[A] Devuelve un iterador singleton que devuelve el valor de la opción si no está vacío, o un iterador vacío si la opción está vacía. |
13 |
def mapa[B](f: (A) => B): Opción[B] Devuelve Some que contiene el resultado de aplicar f al valor de esta opción si esta opción no está vacía. De lo contrario, devuelva Ninguno. |
14 |
def orElse[B >: A](alternativa: => Opción[B]): Opción[B] Devuelve esta opción si no está vacía; de lo contrario, devuelve el resultado de evaluar la alternativa. |
15 |
def orNull Devuelve el valor de la opción si no está vacía o nulo si está vacía. |
scala_collections.htm