Kotlin: le eccezioni
In informatica le eccezioni (exception) rappresentano il presentarsi di problemi durante l’esecuzione di un programma che portano alla terminazione dello stesso. La terminazione del programma può essere conseguenza di un eccessivo consumo di memoria, di un accesso sbagliato alla stessa o di una divisione per zero. Per evitare ciò si applica la tecnica note come exception handling. Questa consiste nel cercare di mantenere il programma in esecuzione controllando la possibile eccezione. In Kotlin, tutte le eccezioni derivano da una unica classe chiamata Throwable. Al fine di gestire le eccezioni è possibile utilizzare quattro differenti keyword:
- try : permette di isolare ed eseguire un blocco di codice che potrebbe contenere un’eccezione. Deve essere seguito dalla keyword catch, finally o entrambe. Esempio di utilizzo: try { // codice } catch ( e : someException) { // codice } finally { // codice }
- catch : è un blocco di codice da eseguire nel caso in cui la porzione di codice contenuto in una try incontra un’eccezione. Esempio di utilizzo: try { // codice } catch ( e : someException) { // codice } finally { // codice }
- finally : è un blocco di codice da eseguire indipendentemente dal fatto che nella try ci sia verificata o meno un’eccezione. Esempio di utilizzo: try { // codice } catch ( e : someException) { // codice } finally { // codice }
- throw : viene usata per generare un’eccezione (someException) in modo esplicito in un determinato punto del codice. Esempio di utilizzo: throw someException().
In Kotlin esiste una classe di eccezioni dette unchecked exception che rappresentano le eccezioni dovuti ad errori nella scrittura del codice. Questa classe estende la classe RuntimeException. Alcuni esempi di unchecked exception sono:
- ArithmeticException : eccezione lanciata ogni qual volta si divide un numero per zero
- ArrayIndexOutOfBoundExceptions : eccezione lanciata ogni qual volta si accede ad un elemento errato di un array
- SecurityException : eccezione lanciata quando c’è una violazione di sicurezza del codice
- NullPointerException : eccezione lanciata quando si invoca un metodo o una proprietà di un oggetto null
In Kotlin non esistono delle checked exception ovvero eccezioni lanciate durante la fase di compilazione del codice. Queste però possono essere utilizzate nel caso in cui il codice scritto in Kotlin venga usato da del codice scritto in Java o Swift, linguaggi che supportano le checked exception. In questo caso consigliamo di visitare il sito https://kotlinlang.org/docs/exceptions.htm .
Nel caso in cui nel blocco try è possibile generare eccezioni di diverso tipo allora si rendono necessari più blocchi catch, uno per ogni diversa eccezione da gestire. Ovviamente solo un’eccezione verrà genereta dal blocco try (la prima delle tante possibili) e quindi un solo blocco catch verrà eseguito. Proprio per questo motivo c’è una regola per cui i blocchi catch devono andare dall’eccezione più specifica a quella più generale in modo da gestirle nel migliore dei modi. Kotlin ci aiuta a rispettare questa regola producendo warning in fase di compilazione.
In Kotlin è possibile anche annidare più blocchi try-catch ovvero in un blocco di una try troviamo un blocco try-catch. In questo caso la sintassi generale è:
try{ //codice try{ //codice } catch(e : SomeException) { //codice} } catch(e : SomeException) { //codice }
Commenti recenti