Trabajo con algo de lógica empresarial escrita en Kotlin. Tengo un caso así en mi método: compruebo un valor para nulo, y si ES nulo, quiero devolverlo, de lo contrario, hago algo de lógica. Mi versión se parece a:
fun calculateFoo(parameter: SomeObject?): ReturnObject? = if (parameter == null) null else performCalculation(parameter)Literalmente "Si el valor es nulo, devuélvalo, de lo contrario, procéselo". Normalmente, hacemos algo si el valor NO es nulo, como el operador elvis, pero aquí hay una lógica "invertida". ¿Hay una mejor solución para esto?
Dando un paso atrás, si hace que esta sea una función de extensión con un parámetro no nulo, conduce a un uso más natural en su sitio de llamada.
fun SomeObject.calculateFoo(): ReturnObject = performCalculation(this) val nullable: SomeObject? = ... val result = nullable?.calculateFoo() Creo que es mejor para la claridad del código que una función no devuelva simplemente nulo para un argumento nulo, porque enmascara la nulabilidad en el sitio de la llamada, donde un ?. call sería suficiente y mantendría el código claro sobre el posible valor de retorno nulo. La semántica de su función tal cual permite que se pase un argumento inútil para un resultado inútil.
De acuerdo, entiendo que su ejemplo es artificial, y hay casos en los que hay varios argumentos o en los que un argumento nulo solo conduce a un resultado inútil en determinadas circunstancias, en cuyo caso la respuesta ?.let sería más apropiada.
Puedes usar el ?. operador en combinación con let .
fun calculateFoo(parameter: SomeObject?): ReturnObject? = parameter?.let { performCalculation(it) }