La gestió d'excepcions és una part fonamental de la programació en Ada, ja que permet als programes manejar errors i situacions inesperades de manera controlada. En aquest tema, aprendrem com definir, llançar i capturar excepcions en Ada.
Conceptes Clau
- Excepcions Predefinides: Ada proporciona diverses excepcions predefinides per manejar errors comuns.
- Definició d'Excepcions: Els programadors poden definir les seves pròpies excepcions.
- Llançament d'Excepcions: Com llançar una excepció quan es detecta una condició d'error.
- Captura d'Excepcions: Com capturar i manejar excepcions utilitzant blocs
begin-exception
.
Excepcions Predefinides
Ada inclou diverses excepcions predefinides que cobreixen errors comuns, com ara:
Constraint_Error
: Llançada quan es viola una restricció de tipus.Program_Error
: Llançada quan es detecta un error en el programa.Storage_Error
: Llançada quan no hi ha prou memòria disponible.Tasking_Error
: Llançada quan es produeix un error relacionat amb les tasques.
Definició d'Excepcions
Els programadors poden definir les seves pròpies excepcions per manejar situacions específiques. Això es fa utilitzant la paraula clau exception
.
Llançament d'Excepcions
Per llançar una excepció, es fa servir la instrucció raise
.
Captura d'Excepcions
Les excepcions es capturen utilitzant blocs begin-exception
. Aquí teniu un exemple:
procedure Handle_Exception is begin -- Codi que pot llançar una excepció raise My_Exception; exception when My_Exception => Put_Line("My_Exception ha estat capturada!"); when Constraint_Error => Put_Line("S'ha produït un Constraint_Error!"); when others => Put_Line("S'ha produït una excepció desconeguda!"); end Handle_Exception;
Exemple Pràctic
A continuació, es mostra un exemple complet que il·lustra la definició, el llançament i la captura d'excepcions.
with Ada.Text_IO; use Ada.Text_IO; procedure Exception_Example is My_Exception : exception; begin Put_Line("Abans de llançar l'excepció."); raise My_Exception; Put_Line("Aquest missatge no es mostrarà."); exception when My_Exception => Put_Line("My_Exception ha estat capturada!"); when others => Put_Line("S'ha produït una excepció desconeguda!"); end Exception_Example;
Explicació del Codi
- Definició de l'Excepció:
My_Exception
es defineix com una excepció. - Llançament de l'Excepció:
raise My_Exception;
llança l'excepció. - Captura de l'Excepció: El bloc
exception
capturaMy_Exception
i imprimeix un missatge.
Exercicis Pràctics
Exercici 1: Definir i Llançar una Excepció
- Defineix una nova excepció anomenada
Custom_Exception
. - Escriu un procediment que llança
Custom_Exception
si una variableX
és negativa. - Captura l'excepció i imprimeix un missatge.
with Ada.Text_IO; use Ada.Text_IO; procedure Custom_Exception_Example is Custom_Exception : exception; X : Integer := -5; begin if X < 0 then raise Custom_Exception; end if; exception when Custom_Exception => Put_Line("Custom_Exception ha estat capturada perquè X és negativa!"); end Custom_Exception_Example;
Exercici 2: Captura d'Excepcions Predefinides
- Escriu un procediment que divideixi dos nombres enters.
- Captura l'excepció
Constraint_Error
si es produeix una divisió per zero.
with Ada.Text_IO; use Ada.Text_IO; procedure Division_Example is A, B, Result : Integer; begin A := 10; B := 0; Result := A / B; exception when Constraint_Error => Put_Line("Error: Divisió per zero!"); end Division_Example;
Resum
En aquesta secció, hem après com gestionar excepcions en Ada. Hem vist com definir, llançar i capturar excepcions, així com treballar amb excepcions predefinides. La gestió d'excepcions és essencial per escriure programes robustos i fiables que puguin manejar errors de manera controlada.
Curs de Programació en Ada
Mòdul 1: Introducció a Ada
Mòdul 2: Conceptes Bàsics
- Variables i Tipus de Dades
- Operadors i Expressions
- Estructures de Control
- Bucles en Ada
- Subprogrames: Procediments i Funcions
Mòdul 3: Tipus de Dades Avançats
Mòdul 4: Programació Modular
Mòdul 5: Concurrència i Programació en Temps Real
Mòdul 6: Temes Avançats
Mòdul 7: Millors Pràctiques i Optimització
- Estil de Codi i Millors Pràctiques
- Depuració i Proves
- Optimització del Rendiment
- Consideracions de Seguretat