No tienes acceso a esta clase

隆Contin煤a aprendiendo! 脷nete y comienza a potenciar tu carrera

Aprende todo un fin de semana sin pagar una suscripci贸n 馃敟

Aprende todo un fin de semana sin pagar una suscripci贸n 馃敟

Reg铆strate

Comienza en:

3D
15H
36M
15S

Try Catch

19/37
Recursos

Aportes 18

Preguntas 1

Ordenar por:

驴Quieres ver m谩s aportes, preguntas y respuestas de la comunidad?

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)
}

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鈥




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!

  • 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!

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.

El c贸digo try/catch/finally esta malo.
鈥渇inally鈥 no esta bien usado!!

var nombre : String? = null
El ? es que es nullable
nombre?.lenght es una SafeCard
KOTLIN te devuelve el null.


Para gestionarlo este tipo de errores:

Usamos los try catch.
try {
throw NullPointerException(鈥淩eferencia nula鈥)
} catch (exception : NullPointerException){
println(鈥淗a ocurrido un error鈥)
} finally {
println( 鈥淔inalmente ha ocurrido un error . . Cerrando aplicaci贸n鈥)
}


Ejemlo de uso de librer铆a matem谩tica

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


Se usa en ciertos casos de librer铆as espec铆ficas, no hay que abusar de ellas

Para quienes a煤n est谩n confundidos con el null-safety, les explico y les dejo un enlace de Android Developers que lo explica bastante bien:
https://developer.android.com/codelabs/basic-android-kotlin-compose-nullability?hl=es-419#0

En Kotlin, los valores de tipo _null _se pueden declarar tranquilamente as铆:

val miVariableNula = null 

Sin embargo, si queremos asignarle valores nulos a otro tipo de variables que no sean 煤nicamente null, lo puedes hacer. De este modo, estar铆amos expandiendo el rango de valores que puede tener la variable. Pero para ello, tenemos que usar ?.
El operador ? ampl铆a el dominio de una variable para que adem谩s acepte null, la convierte en tipo nullable. De esta forma, le dices a Kotlin 鈥淓y, esta variable podr铆a ser nula鈥, ya sea porque un usuario envi贸 un formulario vac铆o o no ha iniciado sesi贸n para acceder a tu aplicaci贸n, por ejemplo.

En ocasiones, vas a desear decirle a Kotlin que est谩s completamente seguro de que el valor que recibir谩 una variable no ser谩 null, y si lo es, es porque algo anda mal con el dise帽o de la aplicaci贸n. Para comunicarle esto a Kotlin, utilizas el operador double-bang !!. A partir de esa l铆nea de c贸digo, una variable que hab铆as declarado antes como nullable a trav茅s del operador ?, deja de serlo, lo cual ayuda a controlar bastante m谩s el comportamiento del programa de ah铆 en adelante. Si ocurre una excepci贸n de tipo NullPointerException en alg煤n punto del programa luego de que hayas declarado tu variable como non-nullable con el operador !!, es porque algo anda mal con esa variable que est谩 recibiendo un valor nulo sin que t煤 lo hayas permitido.
Esto es muy positivo porque es mejor que te des cuenta que algo anda mal con el programa en lugar de que presente errores sin que t煤 lo sepas por valores nulos que fueron reasignados a la variable que no quieres que los reciba.

Cuando te das cuenta que dicha variable est谩 recibiendo valores nulos sin tu permiso (es decir, se est谩 lanzando NullPointerException) puedes actuar en consecuencia. Puedes analizar el programa y entender por qu茅 tu variable est谩 recibiendo null y modificarlo. Tambi茅n puedes manejar la excepci贸n NullPointerException usando un bloque de try catch. O tambi茅n puedes evitar la nulidad en la declaraci贸n utilizando el operador _elvis _?: que intenta asignarle un valor a una variable, pero si dicho valor resulta ser nulo, entonces asigna otro valor por defecto.

Es por esto que se dice que Kotlin es un lenguaje con null-safety, es decir, que provee herramientas para un excelente control de las variables nulas.
Espero les haya servido.

Para quienes a煤n est谩n confundidos con el null-safety, les explico:

En Kotlin, los valores de tipo null se pueden declarar tranquilamente as铆:

val miVariableNula = null 

Sin embargo, si queremos asignarle valores nulos a otro tipo de variables que no sean 煤nicamente null, lo puedes hacer. De este modo, estar铆amos expandiendo el rango de valores que puede tener la variable. Pero para ello, tenemos que usar ?.
El operador ? ampl铆a el dominio de una variable para que adem谩s acepte null, la convierte en tipo nullable. De esta forma, le dices a Kotlin 鈥淓y, esta variable podr铆a ser nula鈥, ya sea porque un usuario envi贸 un formulario vac铆o o no ha iniciado sesi贸n para acceder a tu aplicaci贸n, por ejemplo.

En ocasiones, vas a desear decirle a Kotlin que est谩s completamente seguro de que el valor que recibir谩 una variable no ser谩 null, y si lo es, es porque algo anda mal con el dise帽o de la aplicaci贸n. Para comunicarle esto a Kotlin, utilizas el operador double-bang !!. A partir de esa l铆nea de c贸digo, una variable que hab铆as declarado antes como nullable a trav茅s del operador ?, deja de serlo, lo cual ayuda a controlar bastante m谩s el comportamiento del programa de ah铆 en adelante. Si ocurre una excepci贸n de tipo NullPointerException en alg煤n punto del programa luego de que hayas declarado tu variable como non-nullable con el operador !!, es porque algo anda mal con esa variable que est谩 recibiendo un valor nulo sin que t煤 lo hayas permitido.
Esto es muy positivo porque es mejor que te des cuenta que algo anda mal con el programa en lugar de que presente errores sin que t煤 lo sepas por valores nulos que fueron reasignados a la variable que no quieres que los reciba.

Cuando te das cuenta que dicha variable est谩 recibiendo valores nulos sin tu permiso (es decir, se est谩 lanzando NullPointerException) puedes actuar en consecuencia. Puedes analizar el programa y entender por qu茅 tu variable est谩 recibiendo null y modificarlo. Tambi茅n puedes manejar la excepci贸n NullPointerException usando un bloque de try catch. O tambi茅n puedes evitar la nulidad en la declaraci贸n utilizando el operador _elvis _?: que intenta asignarle un valor a una variable, pero si dicho valor resulta ser nulo, entonces asigna otro valor por defecto.

Es por esto que se dice que Kotlin es un lenguaje con null-safety, es decir, que provee herramientas para un excelente control de las variables nulas.
Espero les haya servido.

El bloque try-catch en Kotlin y Java se utiliza para el manejo de excepciones en el c贸digo. El bloque try encierra el c贸digo que puede lanzar una excepci贸n y el bloque catch se utiliza para manejar la excepci贸n. La excepci贸n se puede capturar en un bloque catch y se puede procesar de acuerdo a las necesidades. El bloque try debe estar seguido de un bloque catch o un bloque finally o ambos. Adem谩s, en Kotlin, el bloque try tambi茅n se puede usar como una expresi贸n que devuelve un valor.

try {
    int x = 10;
    int y = 0;
    int z = x / y;
    System.out.println("Resultado: " + z);
} catch (ArithmeticException e) {
    System.out.println("No se puede dividir entre cero!");
}

En este ejemplo, el bloque try intenta dividir un entero entre cero. Esto generar谩 una excepci贸n ArithmeticException, que se manejar谩 en el bloque catch. El resultado ser谩: 鈥淣o se puede dividir entre cero!鈥.

Es recomendable evitar los Try / Catch, puedes validar de otras maneras

var name:String? = null

if (name != null)
{
    println("Hello $name")
}
else
{
    println("name is null exit ")
    return
}
try {
        nombre!!.length;
    }catch (excepcion : NullPointerException){//Para ser mas especificos en la captura del error.
        println("Ha ocurrido un error");
    } finally {
        println("Agrega un valor a la variable: ");
        nombre = readln();
        println("Ahora la variable contiene el dato $nombre");
    }
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)

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.

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