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