La gestió d'excepcions és una part fonamental de la programació orientada a objectes (POO) en Delphi/Object Pascal. Les excepcions permeten manejar errors de manera controlada i elegant, millorant la robustesa i la mantenibilitat del codi. En aquest tema, aprendrem com utilitzar les excepcions en el context de la POO.

Conceptes Clau

  1. Excepcions: Són esdeveniments que interrompen el flux normal d'execució d'un programa. Es poden produir per errors de programació, problemes de recursos, o altres situacions inesperades.
  2. Try...Except: Estructura utilitzada per capturar i manejar excepcions.
  3. Raise: Paraula clau utilitzada per generar una excepció.
  4. Classes d'Excepció: Classes especials que representen diferents tipus d'errors.

Estructura Try...Except

L'estructura try...except s'utilitza per capturar i manejar excepcions. La sintaxi bàsica és la següent:

try
  // Codi que pot generar una excepció
except
  on E: Exception do
    // Maneig de l'excepció
end;

Exemple Pràctic

procedure TForm1.Button1Click(Sender: TObject);
var
  Num, Denom, Resultat: Integer;
begin
  Num := 10;
  Denom := 0;
  try
    Resultat := Num div Denom;
  except
    on E: EDivByZero do
      ShowMessage('Error: Divisió per zero!');
  end;
end;

En aquest exemple, intentem dividir un nombre per zero, cosa que genera una excepció EDivByZero. L'excepció és capturada i es mostra un missatge d'error.

Generar Excepcions amb Raise

La paraula clau raise s'utilitza per generar una excepció de manera explícita. Això és útil quan volem indicar un error específic en el nostre codi.

Exemple Pràctic

procedure TForm1.ValidateAge(Age: Integer);
begin
  if Age < 0 then
    raise Exception.Create('L''edat no pot ser negativa');
end;

procedure TForm1.Button2Click(Sender: TObject);
begin
  try
    ValidateAge(-5);
  except
    on E: Exception do
      ShowMessage('Error: ' + E.Message);
  end;
end;

En aquest exemple, la funció ValidateAge genera una excepció si l'edat és negativa. L'excepció és capturada i es mostra un missatge d'error.

Classes d'Excepció

Delphi proporciona diverses classes d'excepció predefinides, com Exception, EDivByZero, EAccessViolation, etc. També podem crear les nostres pròpies classes d'excepció per manejar errors específics.

Exemple de Creació d'una Classe d'Excepció Personalitzada

type
  EInvalidAge = class(Exception);

procedure TForm1.ValidateAge(Age: Integer);
begin
  if Age < 0 then
    raise EInvalidAge.Create('L''edat no pot ser negativa');
end;

procedure TForm1.Button3Click(Sender: TObject);
begin
  try
    ValidateAge(-5);
  except
    on E: EInvalidAge do
      ShowMessage('Error: ' + E.Message);
  end;
end;

En aquest exemple, hem creat una classe d'excepció personalitzada EInvalidAge per manejar errors d'edat no vàlida.

Exercicis Pràctics

Exercici 1: Maneig d'Excepcions Bàsiques

Escriu una funció que llegeixi un nombre enter des de l'entrada de l'usuari i mostri un missatge d'error si l'entrada no és un nombre vàlid.

Solució

procedure TForm1.Button4Click(Sender: TObject);
var
  Input: string;
  Number: Integer;
begin
  Input := InputBox('Entrada', 'Introdueix un nombre enter:', '');
  try
    Number := StrToInt(Input);
    ShowMessage('El nombre és: ' + IntToStr(Number));
  except
    on E: EConvertError do
      ShowMessage('Error: Entrada no vàlida. Si us plau, introdueix un nombre enter.');
  end;
end;

Exercici 2: Excepcions Personalitzades

Crea una classe d'excepció personalitzada EInvalidTemperature i utilitza-la per generar una excepció si la temperatura és fora del rang -50 a 50 graus Celsius.

Solució

type
  EInvalidTemperature = class(Exception);

procedure TForm1.ValidateTemperature(Temp: Integer);
begin
  if (Temp < -50) or (Temp > 50) then
    raise EInvalidTemperature.Create('Temperatura fora del rang permès (-50 a 50)');
end;

procedure TForm1.Button5Click(Sender: TObject);
var
  Temp: Integer;
begin
  Temp := StrToInt(InputBox('Entrada', 'Introdueix una temperatura:', ''));
  try
    ValidateTemperature(Temp);
    ShowMessage('La temperatura és: ' + IntToStr(Temp));
  except
    on E: EInvalidTemperature do
      ShowMessage('Error: ' + E.Message);
  end;
end;

Resum

En aquesta secció, hem après com manejar excepcions en Delphi/Object Pascal utilitzant l'estructura try...except i la paraula clau raise. També hem vist com crear classes d'excepció personalitzades per manejar errors específics. La gestió d'excepcions és una eina poderosa per millorar la robustesa i la mantenibilitat del nostre codi. En el proper tema, explorarem les funcions avançades de Delphi.

Curs de Programació Delphi/Object Pascal

Mòdul 1: Introducció a Delphi/Object Pascal

Mòdul 2: Estructures de Control i Procediments

Mòdul 3: Treballant amb Dades

Mòdul 4: Programació Orientada a Objectes

Mòdul 5: Funcions Avançades de Delphi

Mòdul 6: Desenvolupament d'Interfícies Gràfiques amb VCL i FMX

Mòdul 7: Desenvolupament Web i Mòbil

Mòdul 8: Millors Pràctiques i Patrons de Disseny

Mòdul 9: Projecte Final

© Copyright 2024. Tots els drets reservats