Retorno de la function en Kotlin como una línea cuando el object es nulo

Tengo un método Java que se ve así:

void doStuff() { MyObject myObject = myObjectRepository.findById(myObjectId); if (myObject == null) { log.warn("myObject not found, aborting"); return; } // More stuff } 

¿Hay alguna manera de hacer que esto sea de una sola línea en Kotlin? Estoy pensando algo como esto (que no funciona):

 fun doStuff() { // I'd like to do something here that returns from the doStuff function when myObject is null val myObject = myObjectRepository.findById(myObjectId) ?: {log.warn("myObject not found, aborting") return} // More stuff } 

¿Puedes hacer algo como esto Kotlin?

 fun doStuff() { val myObject = myObjectRepository.findById(myObjectId) ?: log.warn("myObject not found, aborting").also{ return } // More stuff } 

Pero estoy de acuerdo con DPM, un if-else clásico es una mejor opción.

Es posible que desee considerar también el constructo when (dependiendo del tamaño, la tarea de la function y el tipo de retorno):

 fun doStuff() { val myObject = myObjectRepository.findById(myObjectId) return when { myObject == null -> log.warn("myObject not found, aborting") // Unit? else -> // More stuff } } 

Una de las razones por las que preferiría un when sobre un if-else también es porque creo que explota mejor el espacio (un if-else legible usa al less 4, a veces 5, loc) y es más legible porque tienes la palabra key when en el mismo nivel de retorno (o asignar, o lo que sea) y cada caso sea puro y simple sin palabras key adicionales, simplemente un signo no literal -> que indique claramente la condición del código.

Sin embargo, also es una function de extensión ofrecida por la lib estándar kotlin. Es una de las características que más me gusta de Kotlin que te da mucha fuerza y ​​expresividad.

Permítanme sugerirles este enlace para seguir investigando y get más información sobre otras funciones útiles, como run , let , apply , takeUnless y takeIf

  val myObject = myObjectRepository.findById(myObjectId)?:run { log.warn("myObject not found, borting"); return } //more stuff 
  • Cómo evitar la cobertura parcial con campos tardíos en Kotlin
  • Cómo usar AndroidAnnotación @ShanetworkingPref con Kotlin
  • La demostración IOU de Corda V1.0 no funciona en Windows
  • ¿Cómo hacer que Cucumber deje que Spring inyecte classs definitivas en el paso?
  • Diferencia entre con y correr en Kotlin
  • El uso de la propiedad NewApi sigue causando advertencias sobre la pelusa
  • Interceptación del método Rebase, método completamente anulador
  • Llamadas encadenadas y inheritance
  • Usando Anko getting type Error de falta de correspondencia requerido AnkoContext <ViewGroup> Found AnkoContext <Context>
  • arrayListOf y hashMapOf: reference no resuelta
  • Función de extensión estática en una class de Java