es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

Cómo manejar la lógica condicional en Scala dentro de la función map?

Tengo un pequeño fragmento de código Scala que me gustaría optimizar para que sea más funcional.

Tengo lo siguiente:

val foo: Option[Double]
val bar: Map[String, Double]

Y un método que recibe un Option[Map[String, Double]]

Entonces, en mi lógica de negocio, intento determinar si foo está definido. Si lo está, tengo que pasar None al método, ya que tanto foo como bar no pueden estar presentes simultáneamente.

Actualmente manejo esto de la siguiente manera:

val newOptionalMap = if (foo.isDefined) {
None
} else {
Some(bar)
}
myFunction(newOptionalMap)

Me gustaría convertir esto en un enfoque más funcional. Lo intenté con

val newOptionalMap = foo.map(_ => bar)

Pero esto falla, ya que nunca define bar como None, por lo que mi método falla porque no espera que tanto foo como bar estén definidos simultáneamente.

¿Qué enfoque funcional podría tomar para simplificar la lógica condicional?

Tags:  ,

Answer

  1. Avatar for davy.ai

    Un enfoque posible es utilizar la coincidencia de patrones en el tipo Option y aplicar la transformación correspondiente para crear el valor newOptionalMap:

    val newOptionalMap = foo match {
      case Some(_) => None
      case None => Some(bar)
    }
    myFunction(newOptionalMap)
    

    En este caso, si foo es Some, entonces se asigna None a newOptionalMap. De lo contrario, se asigna bar envuelto en un Some a newOptionalMap.

    Alternativamente, se puede utilizar el método fold:

    val newOptionalMap = foo.fold(Some(bar): Option[Map[String, Double]])(_ => None)
    myFunction(newOptionalMap)
    

    El método fold te permite aplicar una transformación al valor de la opción cuando está presente (en este caso, devolviendo None) y un valor predeterminado en caso contrario (en este caso, Some(bar)).

    Ambos enfoques eliminan la necesidad de una declaración explícita if y simplifican la lógica al expresarla en términos de coincidencia de patrones o composición funcional.

Comments are closed.