- Comprender cómo es que kotlin evita las excepciones de tipos nulos.
- Implementar soluciones con tipos nulables.
- Haber visto el Ejemplo 01
- Tener conocimiento previo sobre tipos de datos y variables.
A continuación ponemos una serie de ejercicios:
Tenemos una lista de nombres
val names: List<String?> = listOf("Name One", null, "Name Three")
- Mediante el método forEach, imprimir unicamente los valores no nulos mediante comprobación de nulos en condiciones y por safe calls.
Solución
// Por Condiciones
names.forEach {
if (it != null) {
println(it)
}
}
// Por safe call
names.forEach { it?.let { println(it) } }
- Por medio del operador Elvis, imprimir todos los nombres anteriores. En caso de tener un nombre nulo, imprimir un mensaje notificando que la casilla esta vacía.
Solución
//imprimir las casillas nulas
names.forEach {
val printString = it ?: "No se encontró nombre en esta casilla"
println(printString)
}
- Crear una clase Person que su constructor tenga como parámetros nombre y apellido. El apellido es opcional y si no se setea, es nulo. implementar dos métodos: una que regrese el apellido y si es nulo, regresar un mensaje avisando la omisión: el segundo que regrese el nombre entero y si no, arrojar un error de argumento inválido. Utilizar el operador elvis.
Nota: el lado derecho del operador elvis puede servir para regresar valores o arrojar excepciones
la excepción arrojada podría ser la siguiente:
throw IllegalArgumentException("Necesitas apellidos")
Solución
class Person(
private val name:String,
private val lastName:String? = null){
fun getFullName(): String {
val lName = lastName ?: throw IllegalArgumentException("Necesitas apellidos")
return "$name $lName"
}
fun getLastName() : String {
val lName = lastName ?: return "No se encontró apellido"
return lName
}
}
- Probar la clase anterior con una persona con apellido, y la otra sin apellidos. Utilizar los dos métodos creados para ambos casos.