Kotlin con si no es nulo

¿Cuál sería la forma más concisa de usar with iff a var no es null ?

Lo mejor que pude llegar es:

 arg?.let { with(it) { }} 

Puede usar las funciones de extensión de Kotlin apply() o run() dependiendo de si desea que sea fluido ( devolver this al final ) o transformar ( devolver un nuevo valor al final ):

Uso para apply :

 something?.apply { // this is now the non-null arg } 

Y un ejemplo fluido:

 user?.apply { name = "Fnetworking" age = 31 }?.updateUserInfo() 

Transformando el ejemplo utilizando run :

 val companyName = user?.run { saveUser() fetchUserCompany() }?.name ?: "unknown company" 

Alternativamente, si no le gusta esa denominación y realmente quiere una function llamada with() , puede crear fácilmente su propia function reutilizable :

 // returning the same value fluently inline fun <T: Any> T.with(func: T.() -> Unit): T = this.apply(func) // or returning a new value inline fun <T: Any, R: Any> T.with(func: T.() -> R): R = this.func() 

Ejemplo de uso:

 something?.with { // this is now the non-null arg } 

Si desea la verificación nula incrustada en la function, ¿tal vez una function withNotNull ?

 // version returning `this` or `null` fluently inline fun <T: Any> T?.withNotNull(func: T.() -> Unit): T? = this?.apply(func) // version returning new value or `null` inline fun <T: Any, R: Any> T?.withNotNull(thenDo: T.() -> R?): R? = this?.thenDo() 

Ejemplo de uso:

 something.withNotNull { // this is now the non-null arg } 

Ver también:

  • Funciones relacionadas en Any
  • Funciones de nivel superior de Kotlin
  • Referencia de la API Kotlin StdLib

Parece que la alternativa a eso sería usar:

 arg?.run { }