A煤n no tienes acceso a esta clase

Crea una cuenta y contin煤a viendo este curso

Try Catch

19/37
Recursos

Aportes 11

Preguntas 1

Ordenar por:

驴Quieres ver m谩s aportes, preguntas y respuestas de la comunidad? Crea una cuenta o inicia sesi贸n.

Estoy empezando con los estudios en programaci贸n, pero no entend铆 la Excepci贸n de Try Catch, me toco ir a YouTube para ver otra forma de explicarlo y realmente hay Tutores que dan ejemplos mas sencillos para entenderlo

fun main(args: Array<String>) {

var nombre : String? = null

// En kotlin, esto regresar铆a null, 
// pero la propiedad length nunca la ejecutara.
print(nombre?.length)

// Simular una excepi贸n, tratar de evitar el !!
try {
	nombre!!.length
	// Lanzar una exepci贸n NullPointerException
	//throw NullPointerException("Ha ocurrido un error")
} catch (exception : NullPointerException ) {
	println("Ha ocurrido un error")
} finally {
	println("Finalmente ha ocurrido un error.. Cerrando aplicaci贸n")
}


val primerValor = 10
val segundoValor = 0

// Asignando el valor que regresa un try/catch
val resultado : Int = try { primerValor / segundoValor } catch  (exception: Exception) { 0 }
print(resultado)
}

Yo considero que cada vez que se pueda usar el try para evitar un excepcion y que la aplicacion falle se debe usar no lo considero un abuso de la herramienta mas bien para eso se invento.




OJO: CON EL FINALLY

Dentro de un:

try {
	code...
}

Tu c贸digo correr谩 a menos que alguna l铆nea dentro del try genere una excepci贸n, lo que lanzar谩 el catch. Cambe mencionar que a esta parte del c贸digo se le asigna un scope especifico, por lo que si tratas de usar una variable que fue definida dentro de este scope, no podr谩s usarla dentro de tu catch.

try { 
	code...
} catch(ex : Exception)  { 
	println(ex.message);
	run_exception_code();
} 

El catch solo correr谩 si se genera una excepci贸n, y normalmente lo usamos como medio de validaci贸n donde podemos generar un LOG del evento, asignar un valor por defecto o mandar tu propia excepcion, para ser manejada m谩s adelante.

try { 
	code...
} catch(ex : Exception)  { 
	println(ex.message);
	moreCode...
}  finally {
	finalCode
}

Esta parte del c贸digo siempre correra, ya sea que corra bien tu try o haya habido una excepci贸n鈥 incluso correr谩 si haces un return o tiras una excepci贸n鈥 por lo que normalmente se usa para cerrar recursos que o conexiones que se hayan abierto鈥

var nom: String? = null
    try {
        throw NullPointerException("Referencia null")
    }catch (exepcion: NullPointerException){
        println("Ha ocurrido un error")
    }finally {
        println("Cerrando aplicacion")
    }

    val primerVal = 10
    val segundoVal= 0
    val resultado : Int = try {primerVal / segundoVal} catch (exp : Exception){ 0 }
    println(resultado)

El 煤ltimo comentario del v铆deo no lo entend铆 bien, 驴a que se refer铆a con que se debe utilizar lo menos posible? 驴el try/catch? porque realmente un buen c贸digo tiene que tener un buen manejo de errores y es fundamental tambi茅n para tener un c贸digo seguro; por eso no entend铆 muy bien ese comentario, quiz谩 se refer铆a a otra cosa y no capt茅 la idea; espero que alguien pueda aclararme esa duda.

Hola Comunidad.
Con respecto al comentario: no se debe de abusar de los manejos de errores.

Puede sonar controversial pero comparto el siguiente enlace:
https://elizarov.medium.com/kotlin-and-exceptions-8062f589d07

Esta en ingles pero tiene un ejemplo bastante claro.

Ojo!

  • Tu no puedes tener un catch o finally sin un try
  • Tu no puedes poner codigo entre el try y el catch, o el catch y el finally.
    por ejemplo:
try { callRiskyCode( ) }
x = 7
catch(e: Bad Exception) {}
  • un try puede estar seguido de un catch o un finally
  • Un try puede tener multiples catch blocks.

Esta explicacion esta en el libro Head First Kotlin en la pagina 244. Un gran libro en ingles que recomiendo mucho!

Code desarrollado en la clase:

OJO: Es una mala pr谩ctica y debes limitar su uso al m谩ximo.

fun main(args: Array<String>) {
    
    var nombre : String? = null
    try {
        throw NullPointerException("Null reference")
    } catch (excepcion : NullPointerException){
        println("Ha ocurrido un error")
    } finally {
        println("Finalmente ha ocurrido un error... Cerrando aplicacion")
    }

    val primerValor = 10
    val segundoValor = 0
    val resultado : Int = try {
        primerValor/segundoValor
    } catch (excepcion : Exception) {
        0
    }
    println(resultado)
}

Muy util el try catch