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
- 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.
- Try...Except: Estructura utilitzada per capturar i manejar excepcions.
- Raise: Paraula clau utilitzada per generar una excepció.
- 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:
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
- Introducció a Delphi i Object Pascal
- Configuració de l'Entorn de Desenvolupament
- Primera Aplicació Delphi
- Sintaxi i Estructura Bàsiques
- Variables i Tipus de Dades
Mòdul 2: Estructures de Control i Procediments
- Declaracions Condicionals
- Bucles i Iteració
- Procediments i Funcions
- Abast i Durada de les Variables
- Gestió d'Errors i Depuració
Mòdul 3: Treballant amb Dades
- Arrays i Cadenes
- Registres i Conjunts
- Tipus Enumerats i Subrang
- Gestió d'Arxius
- Accés a Bases de Dades
Mòdul 4: Programació Orientada a Objectes
- Introducció a la POO
- Classes i Objectes
- Herència i Polimorfisme
- Interfícies i Classes Abstractes
- Gestió d'Excepcions en POO
Mòdul 5: Funcions Avançades de Delphi
- Generics i Col·leccions
- Multifil i Programació Paral·lela
- Desenvolupament Basat en Components
- Biblioteca d'Execució de Delphi (RTL)
- Tècniques Avançades de Depuració
Mòdul 6: Desenvolupament d'Interfícies Gràfiques amb VCL i FMX
- Introducció a VCL
- Creació de Formularis i Controls
- Programació Basada en Esdeveniments
- Introducció a FireMonkey (FMX)
- Desenvolupament Multiplataforma amb FMX
Mòdul 7: Desenvolupament Web i Mòbil
- Desenvolupament Web amb Delphi
- Serveis RESTful
- Desenvolupament Mòbil amb Delphi
- Desplegament d'Aplicacions Mòbils
- Integració amb Serveis Web
Mòdul 8: Millors Pràctiques i Patrons de Disseny
- Organització del Codi i Documentació
- Patrons de Disseny en Delphi
- Tècniques de Refactorització
- Proves Unitàries i Desenvolupament Basat en Proves
- Optimització del Rendiment
