Try with in Ocaml
Il costrutto try with nel linguaggio Ocaml mi permette di eseguire un'espressione o una funzione assegnando un valore predefinito alla risposta quando si verifica un determinato errore.
try espressione with errore -> valore
Dopo try indico l'espressione o la funzione da seguire.
Dopo with indico il codice dell'errore che voglio intercettare e il valore da assegnare alla risposta se si verifica.
In questo modo posso gestire le eccezioni a seconda dei casi.
Un esempio pratico
Questo script definisce un errore FattorialeNegativo e una funzione fattoriale(n) per calcolare il fattoriale di un numero.
exception FattorialeNegativo;;
let rec fattoriale(n) =
match n with
0 -> 1
| _ -> if n<0 then raise FattorialeNegativo
else n*fattoriale(n-1)
La funzione ricorsiva fattoriale(n) calcola il fattoriale soltanto se l'argomento n è un numero non negativo.
fattoriale(4);;
- : int = 24
Se l'argomento è un numero negativo (n<0) la funzione solleva l'eccezione FattorialeNegativo tramite l'istruzione raise.
fattoriale(-4);;
Exception: FattorialeNegativo
Per evitare che si sollevi l'eccezione, posso richiamare la funzione usando il costrutto try with
try fattoriale(-4) with FattorialeNegativo -> 0;;
In questo modo, quando si verifica l'eccezione FattorialeNegativo la funzione restituisce 0
Dove zero è il valore che ho assegnato alla funzione tramite la clausola with FattorialeNegativo -> 0
- : int = 0
Ovviamente, il costrutto try with interviene solo se si verifica il codice di quell'eccezione.
Se si verificano altri errori, questi non sono intercettati.
Ad esempio, se richiamo lo stesso costrutto passando come argomento 4/0
try fattoriale(-4) with FattorialeNegativo -> 0;;
exception: Division_by_zero
La funzione va in errore Division_by_zero
E così via.