Kotlin: llamada segura vacía y por qué debe tener cuidado al usarla | Autor: Jermaine Dilao | Cultura geek | Octubre de 2021
No se trata solo de deshacerse de los errores en el IDE
Trabajé durante un tiempo en una empresa de agencia de software con más de 30 desarrolladores de Android. Durante la revisión del código, encontré un uso incorrecto o «peligroso» de invocación segura vacía de Kotlin innumerables veces, como se muestra a continuación …
account?.let
imageView.loadImage(it.imageUrl)
Pocas personas se preocupan por este método …
Esto ocultará el error.
si cuenta Objetivo Se requiere este método o pantalla en particular, que oculta errores y es difícil de depurar. cuando. . .cuando cuenta Objetivo Se vacía accidentalmente cuando se ejecuta la aplicación y no mostrará información útil al usuario.
Una forma de evitar esto es manejarlo con elegancia. cuenta El objeto está vacío.
account?.let
imageView.loadImage(it.imageUrl)
?: showErrorMessage("some helpful message here")
De esta forma, el usuario final sabrá que hay un problema con la aplicación, no solo le mostrará una pantalla en blanco.
Esto dificulta la depuración
Considere que está trabajando con 2 o más desarrolladores para desarrollar esta aplicación en particular.Cuando hicieron cambios en la clase, inesperadamente cuenta Blanco. Otros desarrolladores quedarán en espera y tendrán que dedicar tiempo a depurar el código para ver qué salió mal.
Una forma de evitar esto es lanzar una excepción que indique claramente el mensaje.
fun displayAccount():
if (account == null)
throw IllegalStateException(
"Account is unexpectedly null. Make sure to call init() before calling this method."
)
...
// display account
De esta forma, facilitará que otros desarrolladores vean la causa del error.
Debemos tener cuidado al usar las llamadas seguras nulas de Kotlin, no podemos simplemente usarlas para eliminar los errores que se muestran en el IDE.
No renuncié por completo a la idea de usar la llamada segura nula de Kotlin. De hecho, estos son muy útiles, solo necesitamos saber cuándo usarlos adecuadamente.
Una cosa en la que puedo pensar es limpiar los recursos en ViewModel.
// ViewModel.ktfun onCleared()
...
account?.removeListeners()
posible cuenta El objeto no se ha inicializado y el usuario apaga inmediatamente la pantalla; aquí es cuando la llamada segura nula resulta útil. En este caso, no es necesario mostrar errores fáciles de usar ni lanzar excepciones.