Title: Linguaggi di Programmazione Secondo Semestre / 06 - Eccezzioni

Q: Eccezzioni
A: Le eccezzioni sono usate nei linguaggi di programmazione per dare una chiarezza alla gestione degli errrori:
- terminare prima una parte di computazione
- e gestire chiaramente errori
Infatti viene dichiarato una area protetta nella quale è associato un gestiore di eccezzioni, e un modo per definire e lanciare le eccezzioni.
Se l'eccezzione non è gestita dalla routine corrente si propaga nella catena dinamica finchè nel caso non si incotrino gestori viene gestita dal gestore di default.
Mentre si propaga nella catena dinamica gli rda vengono toliti

Q: Eccezzioni come tipi
A: I programmi devono poter esprimere sia che ci potrebbe essere una eccezzione, e una struttura per dare le informazioni sull'eccezzione.
Tipi per definire l'eccezzioni tramite tipi di risultato:
- Result, aiutano ad essere espliciti, ma quando diventano molto annidati è complicato
- Valori eccezzinali: è limitante poiché, ad esempio, confondiamo le chiamate legittime e quelle che falliscono, e poi non è molto esplicito nel linguaggio
- Inversione del controllo: il chiamante passa una funzione in caso di fallimento, rende più complesso il ragionamento sul flusso dei programmi
Eccezzione: trasferimento diretto del controllo a un gestore di eccezioni definito in qualche punto dello stack di chiamate del programma.
Alcuni linguaggi come java forniscono construtti di gestione delle eccezzioni che legano lessicalmente i gesotri di eccezzioni a blocchi di codice, molte volte con il try-catch che è utilie perchè utilizza le regole dei blocchi.
In generale, per strutturare la gestione delle eccezioni, i blocchi catch specificano le eccezioni che intercettano tramite nomi, che spesso i linguaggi consolidano coi simboli del sistema di tipi.
Java, gli sviluppatori raramente definiscono sottotipi diretti del tipo Throwable, ma utilizzano sottotipi dei due sottotipi di Throwable Error ed Exception. C'è una differenza tra Error e Exception, gli Error non sono controllati da try e catch perchè sono errori della jvm.