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

  1. Excepcions Predefinides: Ada proporciona diverses excepcions predefinides per manejar errors comuns.
  2. Definició d'Excepcions: Els programadors poden definir les seves pròpies excepcions.
  3. Llançament d'Excepcions: Com llançar una excepció quan es detecta una condició d'error.
  4. 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.

My_Exception : exception;

Llançament d'Excepcions

Per llançar una excepció, es fa servir la instrucció raise.

if some_condition then
    raise My_Exception;
end if;

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

  1. Definició de l'Excepció: My_Exception es defineix com una excepció.
  2. Llançament de l'Excepció: raise My_Exception; llança l'excepció.
  3. Captura de l'Excepció: El bloc exception captura My_Exception i imprimeix un missatge.

Exercicis Pràctics

Exercici 1: Definir i Llançar una Excepció

  1. Defineix una nova excepció anomenada Custom_Exception.
  2. Escriu un procediment que llança Custom_Exception si una variable X és negativa.
  3. 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

  1. Escriu un procediment que divideixi dos nombres enters.
  2. 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.

© Copyright 2024. Tots els drets reservats