¿Hay alguna forma de encadenar múltiples permisos para múltiples variables anulables en kotlin?
fun example(first: String?, second: String?) {
first?.let {
second?.let {
// Do something just if both are != null
}
}
}
Quiero decir, algo como esto:
fun example(first: String?, second: String?) {
first?.let && second?.let {
// Do something just if both are != null
}
}
Respuestas:
Si está interesado aquí hay dos de mis funciones para resolver esto.
Uso:
fuente
Aquí hay algunas variaciones, según el estilo que desee usar, si tiene todo de tipos iguales o diferentes, y si la lista tiene un número desconocido de elementos ...
Tipos mixtos, todos no deben ser nulos para calcular un nuevo valor
Para los tipos mixtos, puede crear una serie de funciones para cada recuento de parámetros que pueden parecer tontas, pero funcionan bien para los tipos mixtos:
Ejemplo de uso:
Ejecute bloque de código cuando la lista no tenga elementos nulos
Aquí hay dos opciones, la primera para ejecutar un bloque de código cuando una lista tiene todos los elementos no nulos, y la segunda para hacer lo mismo cuando una lista tiene al menos un elemento no nulo. Ambos casos pasan una lista de elementos no nulos al bloque de código:
Funciones:
Ejemplo de uso:
Un ligero cambio para que la función reciba la lista de elementos y realice las mismas operaciones:
Ejemplo de uso:
Estas variaciones podrían ser cambiado a tener valores de retorno como
let()
.Utilice el primer elemento no nulo (fusión)
Similar a una función de fusión SQL, devuelve el primer elemento no nulo. Dos sabores de la función:
Ejemplo de uso:
Otras variaciones
... Hay otras variaciones, pero con una mayor especificación, esto podría reducirse.
fuente
whenAllNotNull
con la desestructuración de este modo:listOf(a, b, c).whenAllNotNull { (d, e, f) -> println("$d $e $f")
.Puede escribir su propia función para eso:
fuente
Puedes crear una
arrayIfNoNulls
función:Luego puede usarlo para un número variable de valores con
let
:Si ya tiene una matriz, puede crear una
takeIfNoNulls
función (inspirada entakeIf
yrequireNoNulls
):Ejemplo:
fuente
Para el caso de simplemente verificar dos valores y no tener que trabajar con listas:
Ejemplo de uso:
fuente
En realidad, simplemente puedes hacer esto, ¿sabes? ;)
No hay nada de malo en usar un cheque nulo normal en Kotlin.
Y es mucho más legible para todos los que analizarán su código.
fuente
let
atajo para hacer estas verificacionesDe hecho, prefiero resolverlo usando las siguientes funciones auxiliares:
Y así es como debes usarlos:
fuente
Resolví esto creando algunas funciones que replican más o menos el comportamiento de with, pero toma múltiples parámetros y solo invoca la función de todos los parámetros que no es nula.
Entonces lo uso así:
El problema obvio con esto es que tengo que definir una función para cada caso (número de variables) que necesito, pero al menos creo que el código se ve limpio cuando los uso.
fuente
También podrías hacer esto
fuente
He actualizado un poco la respuesta esperada:
Esto hace esto posible:
fuente
Para cualquier cantidad de valores a comprobar, puede usar esto:
Y se usará así:
los elementos enviados al bloque están usando el comodín, debe verificar los tipos si desea acceder a los valores, si necesita usar solo un tipo, puede mutar esto a genéricos
fuente