Cómo componer nulables en Kotlin

Imaginemos que tiene 2 funciones que devuelven el nulo y no puede componer estas 2 funciones:

fun giveInt(x: Int):Int? = x+1 fun giveInt2(x: Int):Int? = x+2 

Para lograr la composition, escribí estas funciones:

 fun all(x:Int):Int? { val y = giveInt(x) if (y != null) return giveInt2(y) else return null; } val four = all(1) 

¿Es posible componer 2 valores que aceptan if (y != null) para get otro nulable sin escribir explícitamente if (y != null) y return null ?

En Scala, simplemente haría algo como:

 def giveInt(x: Int):Option[Int] = Some(x+1) def giveInt2(x: Int):Option[Int] = Some(x+2) def all(x:Int): Option[Int] = giveInt(x).flatMap(giveInt2) 

¿Debo usar Java opcional para lograr esto o es posible con ? ¿operador?

Gracias 🙂

En caso de que quiera componer literalmente dos funciones (en el sentido FP), entonces es mejor usar references de funciones para la legibilidad:

 fun giveInt(x: Int):Int? = x+1 fun giveInt2(x: Int):Int? = x+2 fun all(x: Int): Int? = giveInt(x)?.let(::giveInt2) 

Es posible con safe call ?. operador y let function combinada de esta manera:

 fun giveInt(x: Int):Int? = x+1 fun giveInt2(x: Int):Int? = x+2 fun all(x: Int): Int? = giveInt(x)?.let { giveInt2(it) } 

Para más modismos como este, utiliza este enlace .