"Trivial Programación en Android" Aplicación en Google Play Store

https://play.google.com/store/apps/details?id=com.trivial.upv.android&rdid=com.trivial.upv.android
LEER MÁS
Nuevos tutoriales sobre Volley añadidos en la unidad 10
Hemos dado comienzo a una nueva edición del curso Masivo Online Abierto (MOOC).
Todavía puedes apuntarte. Se imparte en la prestigiosa edX creada por las Universidades de Harvard y MIT.
Estamos muy orgullosos de haber sido admitidos en esta prestigiosa plataforma.
Apuntate en : https://www.edx.org/course/android-introduccion-a-la-programacion
Read morevideo[Tutorial] Tratamiento de null en Kotlin
Uno de los errores más comunes en programación es el odiado NullPointerException. Ocurre cuando el programador olvida inicializar algún objeto o este no ha podido hacerlo por algún tipo de problema. Para tratar de minimizar al máximo la aprición de este tipo de error Kotlin incorpora una serie de medidas, que vamos a tratar en este apartado.
Kotlin soporta la gestión de null de forma nativa, dándonos la posibilidad de definir si una variable puede ser nula o no. De este modo, el compilador puede detectar posibles errores del tipo NullPointerException en tiempo de compilación, reduciendo la posibilidad de que se produzcan en tiempo de ejecución. Por defecto, todas las variables en Kotlin son non-nullable. De este modo, si intentamos asignar un valor null a cualquier variable, el compilador lanzará un error:
var saludo: String = "Hola" saludo = null // Error compila-ción |
var saludoNullable: String? = "Ho-la" saludoNullable = null // Compila |
val nombreNullable: String? = "Juan" if (nobreNullable != null) { println("Hola, ${nombreNullable.toUpperCase()}.") println("Tu nombre tiene ${nombreNullable.length} caracteres.") } else { println("Hola, invitado") }Si intentamos acceder a una variable nullable sin esta verificación ocurre un error de compilación. Para que compile hemos de usar el código de la derecha.
val s: String? = "Hola" print(s.length) // No compila |
if (s != null) { print(s.length) // compila } |
nombre?.toUpperCase() |
if (nombre != null) nombre.toUpperCase() else null |
val ciudadActual: String? = usuario?.direccion?.ciudadEn el ejemplo, ciudadActual será null si usuario, direccion o ciudad son null.
nombre ?: "desconocido" |
if (nombre != null) nombre else "desconocido" |
val nombreMayuscula = nombre?.toUpperCase() ?: "DESCONOCIDO" val ciudadActual = usuario?.direccion?.ciudad ?: "desconocida"La complejidad de las expresiones a la izquierda del operador Elvis puede ser incluso mayor, como se muestra en el segundo ejemplo.
val n = nombreNullable ?: throw IllegalArgumentException("Nombre es null")Si además de devolver un valor necesitamos ejecutar múltiples operaciones a la derecha del operador elvis, será necesario incluirlas en un bloque de tipo run.
val a = b ?: run { val valorSiBEsNull = c.obtenValor() almacena(valorSiBEsNull) valorSiBEsNull }
val nombre: String? = null nombre!!.toUpperCase() // Produce un NullPointerExceptionSe utiliza en aquellas ocasiones en que nosotros como programadores es-tamos seguros de que una variable no va a ser nula, aun pudiendo contener dicho valor, y nos reafirmamos ante el compilador. Es bastante común su apari-ción cuando migramos código de Java a Kotlin, pero dado que su filosofía es contraria a lo que intentamos conseguir con Kotlin, debemos evitar su utiliza-ción en la medida de lo posible. Un poco más adelante se describen varias alternativas para eliminar este operador en caso de una migración desde Java.
public class Usuario { private final String nombre; public Usuario(String nombre) { this.nombre = nombre; } public String getNombre() { return nombre; } }Kotlin no conocerá la nulidad de la variable nombre, por lo que permitirá todo tipo de operaciones sobre la misma. Por lo tanto, como el compilador no va aplicar ningún tipo de restricción, podremos tratarla como non-nullable:
val usuarioJava = Usuario(null) println(usuarioJava.nombre.toUpperCase()) // Posible NullPointerException println(usuarioJava.nombre.length) // Posible NullPointerExceptiono como nullable:
val usuarioJava = Usuario(null) println(usuarioJava.nombre?.toUpperCase()) // Posible escritura de null println(usuarioJava.nombre?.length) // Posible escritura de null