# Tractament d'excepcions

En informàtica i programació informàtica, el tractament d'excepcions és el procés de resposta a l'ocurrència d'excepcions (condicions anòmales o excepcionals que requereixen un processament especial) durant l'execució d'un programa. En general, una excepció trenca el flux normal d'execució i executa un controlador d'excepcions preregistrat; els detalls de com es fa depenen de si es tracta d'una excepció de maquinari o programari i de com s'implementa l'excepció de programari. El maneig d'excepcions, si s'ofereix, es facilita mitjançant construccions de llenguatge de programació especialitzats, mecanismes de maquinari com les interrupcions o instal·lacions de comunicació entre processos (IPC) del sistema operatiu (SO) com els senyals. Algunes excepcions, especialment les de maquinari, es poden gestionar amb tanta gràcia que l'execució es pugui reprendre allà on es va interrompre.

## Definició

La definició d'excepció es basa en l'observació que cada procediment té una condició prèvia, un conjunt de circumstàncies per les quals finalitzarà "normalment". Un mecanisme de gestió d'excepcions permet al procediment generar una excepció si es viola aquesta precondició, per exemple si el procediment s'ha cridat amb un conjunt anormal d'arguments. Aleshores, el mecanisme de gestió d'excepcions gestiona l'excepció. La condició prèvia, i la definició d'excepció, és subjectiva. El programador defineix completament el conjunt de circumstàncies "normals", per exemple, el programador pot considerar que la divisió per zero no està definida, per tant, una excepció, o idear algun comportament com retornar zero o un valor especial de "DIVISIÓ ZERO" (eludint la necessitat per excepcions). Les excepcions habituals inclouen un argument no vàlid (per exemple, el valor està fora del domini d'una funció), un recurs no disponible (com ara un fitxer que falta, un error del disc dur o errors sense memòria) o que la rutina tingui detectat una condició normal que requereix un tractament especial, per exemple, atenció, final de fitxer.
El maneig d'excepcions resol el problema dels semipredicats, ja que el mecanisme distingeix els valors de retorn normals dels erronis. En idiomes sense maneig d'excepcions integrat, com ara C, les rutines haurien de senyalitzar l'error d'una altra manera, com ara el codi de retorn comú i el patró d'errno. Tenint una visió àmplia, els errors es poden considerar un subconjunt adequat d'excepcions, i els mecanismes d'error explícits com errno es poden considerar formes (verboses) de maneig d'excepcions. El terme "excepció" es prefereix a "error" perquè no implica que res estigui malament - una condició vista com un error per un procediment o programador pot no ser vista d'aquesta manera per un altre. Fins i tot el terme "excepció" pot ser enganyós perquè la seva connotació típica de "outlier" indica que s'ha produït alguna cosa poc freqüent o inusual, quan de fet plantejar l'excepció pot ser una situació normal i habitual al programa. Per exemple, suposem que una funció de cerca per a una matriu associativa llança una excepció si la clau no té cap valor associat. Depenent del context, aquesta excepció de "clau absent" pot ocórrer molt més sovint que una cerca correcta.
Una influència important en l'abast i l'ús de les excepcions és la pressió social, és a dir, "exemples d'ús, que normalment es troben a les biblioteques principals, i exemples de codi en llibres tècnics, articles de revistes i fòrums de discussió en línia, i en els estàndards de codi d'una organització".

## Excepcions de maquinari

No hi ha un consens clar sobre el significat exacte d'una excepció pel que fa al maquinari. Des del punt de vista de la implementació, es gestiona de manera idèntica a una interrupció: el processador atura l'execució del programa actual, busca el controlador d'interrupcions a la taula de vectors d'interrupció per a aquesta excepció o condició d'interrupció, desa l'estat i canvia el control.

## En llenguatges de programació

En la programació d'ordinadors, existeixen diversos mecanismes de llenguatge per al maneig d'excepcions. El terme excepció s'utilitza normalment per indicar una estructura de dades que emmagatzema informació sobre una condició excepcional. Un mecanisme per transferir el control, o plantejar una excepció, es coneix com a llançament; es diu que es llança l'excepció. L'execució es transfereix a una captura (catch).

## A les interfícies d'usuari

Els marcs de desenvolupament web de front-end, com React i Vue, han introduït mecanismes de gestió d'errors on els errors es propaguen per la jerarquia de components de la interfície d'usuari (UI), d'una manera anàloga a com els errors es propaguen per la pila de trucades en l'execució del codi. Aquí el mecanisme de límit d'error serveix com a anàleg al típic mecanisme d'intent-catch. Per tant, un component pot assegurar-se que els errors dels seus components secundaris es detectin i gestionen, i no es propaguen als components pare.

## Referències

* 1 2 Cristian, Flaviu Proc. 10th Int. Symp. On Fault Tolerant Computing, 6, 1980, pàg. 531–540. DOI: 10.1109/TC.1982.1676035. OCLC: 1029229019.
* ↑ Goodenough, 1975b, p. 683-684.
* ↑ Goodenough, 1975b, p. 684.
* ↑ Black, 1982, p. 13-15.
* 1 2 Lang, Jun; Stewart, David B. ACM Transactions on Programming Languages and Systems, 20, 2, 01-03-1998, pàg. 276. DOI: 10.1145/276393.276395. «Perhaps the most common form of exception-handling method used by software programmers is the “return-code” technique that was popularized as part of C and UNIX.»
* ↑ Levin, 1977, p. 5.
* ↑ Liskov, B.H.; Snyder, A. IEEE Transactions on Software Engineering, SE-5, 6, 01-11-1979, pàg. 546–558. DOI: 10.1109/TSE.1979.230191 [Consulta: 19 desembre 2021].
* ↑ Levin, 1977, p. 4.
* ↑ Kiniry, J. R.. «Exceptions in Java and Eiffel: Two Extremes in Exception Design and Application». A: Advanced Topics in Exception Handling Techniques (en anglès). 4119, 2006, p. 288–300 (Lecture Notes in Computer Science). DOI 10.1007/11818502_16. ISBN 978-3-540-37443-5.
* ↑ Hyde, Randall. «Art of Assembly: Chapter Seventeen» (en anglès). www.plantation-productions.com. [Consulta: 22 desembre 2021].
* ↑ «Error Boundaries» (en anglès). React. [Consulta: 10 desembre 2018].
* ↑ «Vue.js API» (en anglès). Vue.js. [Consulta: 10 desembre 2018].

## Bibliografia

* (tesi). OCLC 123311492.
* (2008) "A Pattern of Language Evolution" a LISP50: Celebrating the 50th Anniversary of Lisp. : 1–10. DOI:10.1145/1529966.1529967
* Goodenough, John B. (1975a). "Structured exception handling" a Proceedings of the 2nd ACM SIGACT-SIGPLAN symposium on Principles of programming languages - POPL '75. : 204–224. DOI:10.1145/512976.512997
* Goodenough, John B. «Exception handling: Issues and a proposed notation». Communications of the ACM, 18, 12, 1975, pàg. 683–696. DOI: 10.1145/361227.361230.
* (tesi). ADA043449.
* Stroustrup, Bjarne. The design and evolution of C++. 1st. Reading, Mass.: Addison-Wesley, 1994. ISBN 0-201-54330-3.
* White, Jon L (May 1979). "NIL - A Perspective" a Proceedings of the 1979 Macsyma User's Conference.