- Arrojar excepciones en casos donde se requiera.
- manejar las excepciones para evitar parar el flujo.
- Terminar el Ejemplo 02
Se proponen dos ejercicios:
- Crear una función que divida dos Int, si el divisor es 0, habrá un error: utilizar try-catch como expresión para regresar un valor y en caso de error, regresar 0.
Solucion
fun divide(num1:Int,num2:Int): Int{
return try { num1/num2} catch (e : Exception){0}
}
codigo para probar
println(divide(10,0))
println(divide(10,2))
- Escribe una data Class con dos propiedades nullables (name y visitedCities) la última es una lista de nullable String, por defecto serán nulos
- Crea una instancia de Person y asigna valor a las dos propiedades de la clase person.
- Itera sobre cada uno de los elementos de la propiedad visitedCities de la instancia que acabas de crear, e imprime el contenido de cada elemento si es que no es nulo, si lo es lanza una excepción.
- En el comentario Second person crea una instancia de person con su contructor por defecto.
- Asigna el valor del nombre de la instancia de persona que acabas de crear a una variable usando el operador Elvis, si es nulo el nombre lanza una excepción pero por medio de una función, usando el tipo Nothing (Crea la función que retorne Nothing).
Solucion
Nuestra clase
clase Person
data class Person(
val name: String? = null,
val visitedCities: List<String?>? =null
)
Error de ciudades mediante operador elvis
val me = Person(
name = "My Name",
visitedCities = listOf("Mexico", null, "Brasil")
)
me.visitedCities?.forEach {
println("Cities -> ${it ?: throw IllegalArgumentException("Ciudad vacía")}")
}
funcion fail
fun fail(message: String): Nothing {
throw IllegalArgumentException(message)
}
Error de nombre
val you = Person()
val name = you.name ?: fail("No existe nombre")