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 mostrar solo día y mes en el cuadro de dialog selector de date en Kotlin (Android)?
  • Android Studio muestra errores en layout.xml
  • AndroidStudio ExternalSystemException con kotlin 0.12.213
  • Los parameters generics Cualquiera de kotlin se convierte en comodines (?)
  • ¿Cuál es la mejor manera de encontrar un elemento en las lists anidadas?
  • ¿Cómo continuar el procesamiento después de que ocurra un error en RxJava 2?
  • problemas del comstackdor de Kotlin para la class no resuelta
  • Pase la function que recibe params como parámetro al método de extensión de class
  • Causado por: android.database.sqlite.SQLiteException: cerca de "org": error de syntax (código 1):, al comstackr:
  • Quiero agregar mi versión de kotlin al proyecto Gradel
  • ¿Cómo determinar si un object es henetworkingado de cierta class en Kotlin?