La gestió d'excepcions és una part fonamental de la programació, ja que permet als desenvolupadors manejar errors de manera controlada i evitar que el programa es bloquegi inesperadament. En aquest tema, aprendrem com gestionar les excepcions en Ruby, utilitzant les estructures begin
, rescue
, ensure
i raise
.
Continguts
Què és una Excepció?
Una excepció és un esdeveniment que interromp el flux normal d'execució d'un programa. En Ruby, les excepcions són objectes que es creen quan es produeix un error. Aquestes excepcions poden ser capturades i gestionades per evitar que el programa es bloquegi.
Gestió Bàsica d'Excepcions
En Ruby, podem gestionar les excepcions utilitzant els blocs begin
i rescue
. Aquí teniu un exemple bàsic:
begin # Codi que pot generar una excepció result = 10 / 0 rescue ZeroDivisionError => e # Codi per gestionar l'excepció puts "S'ha produït un error: #{e.message}" end
Explicació del Codi
begin
: Inicia un bloc de codi que pot generar una excepció.rescue
: Captura l'excepció especificada (en aquest cas,ZeroDivisionError
) i executa el codi per gestionar-la.e
: És la variable que conté l'objecte de l'excepció capturada.
Blocs begin
, rescue
, ensure
i else
A més dels blocs begin
i rescue
, Ruby també proporciona els blocs ensure
i else
per a una gestió més completa de les excepcions.
Bloc ensure
El bloc ensure
s'executa sempre, independentment de si s'ha produït una excepció o no. És útil per a netejar recursos, com ara tancar fitxers o connexions de xarxa.
begin # Codi que pot generar una excepció file = File.open("example.txt", "r") # ... treballar amb el fitxer ... rescue => e # Gestionar l'excepció puts "S'ha produït un error: #{e.message}" ensure # Netejar recursos file.close if file end
Bloc else
El bloc else
s'executa només si no s'ha produït cap excepció.
begin # Codi que pot generar una excepció result = 10 / 2 rescue ZeroDivisionError => e # Gestionar l'excepció puts "S'ha produït un error: #{e.message}" else # Executar si no hi ha excepcions puts "El resultat és #{result}" end
Creació d'Excepcions Personalitzades
Podem crear les nostres pròpies excepcions personalitzades heretant de la classe StandardError
.
class MyCustomError < StandardError end begin # Generar una excepció personalitzada raise MyCustomError, "Això és un error personalitzat" rescue MyCustomError => e # Gestionar l'excepció personalitzada puts "S'ha produït un error personalitzat: #{e.message}" end
Exercicis Pràctics
Exercici 1: Divisió Segura
Escriu un mètode safe_divide
que prengui dos arguments i retorni el resultat de la divisió. Si es produeix una divisió per zero, el mètode ha de retornar nil
i imprimir un missatge d'error.
def safe_divide(a, b) # El teu codi aquí end # Prova el mètode puts safe_divide(10, 2) # Ha de retornar 5 puts safe_divide(10, 0) # Ha de retornar nil i imprimir un missatge d'error
Solució
def safe_divide(a, b) begin result = a / b rescue ZeroDivisionError puts "Error: No es pot dividir per zero." return nil end result end # Prova el mètode puts safe_divide(10, 2) # Ha de retornar 5 puts safe_divide(10, 0) # Ha de retornar nil i imprimir un missatge d'error
Exercici 2: Lectura Segura de Fitxers
Escriu un mètode safe_read_file
que prengui un nom de fitxer com a argument i retorni el contingut del fitxer. Si el fitxer no existeix, el mètode ha de retornar nil
i imprimir un missatge d'error.
def safe_read_file(filename) # El teu codi aquí end # Prova el mètode puts safe_read_file("existent_file.txt") # Ha de retornar el contingut del fitxer puts safe_read_file("non_existent_file.txt") # Ha de retornar nil i imprimir un missatge d'error
Solució
def safe_read_file(filename) begin content = File.read(filename) rescue Errno::ENOENT puts "Error: El fitxer no existeix." return nil end content end # Prova el mètode puts safe_read_file("existent_file.txt") # Ha de retornar el contingut del fitxer puts safe_read_file("non_existent_file.txt") # Ha de retornar nil i imprimir un missatge d'error
Conclusió
La gestió d'excepcions és una habilitat essencial per a qualsevol programador. En aquest tema, hem après com utilitzar els blocs begin
, rescue
, ensure
i else
per gestionar les excepcions en Ruby. També hem vist com crear excepcions personalitzades i hem practicat amb alguns exercicis. Amb aquests coneixements, estàs preparat per gestionar errors de manera efectiva en els teus programes Ruby.
Curs de Programació en Ruby
Mòdul 1: Introducció a Ruby
Mòdul 2: Conceptes Bàsics de Ruby
Mòdul 3: Treballant amb Col·leccions
Mòdul 4: Programació Orientada a Objectes en Ruby
- Classes i Objectes
- Variables i Mètodes d'Instància
- Variables i Mètodes de Classe
- Herència
- Mòduls i Mixins
Mòdul 5: Conceptes Avançats de Ruby
- Blocs, Procs i Lambdas
- Metaprogramació
- Gestió d'Excepcions
- Entrada/Sortida de Fitxers
- Expressions Regulars
Mòdul 6: Introducció a Ruby on Rails
- Què és Ruby on Rails?
- Configuració de l'Entorn Rails
- Creació d'una Aplicació Simple en Rails
- Arquitectura MVC
- Rutes
Mòdul 7: Proves en Ruby
- Introducció a les Proves
- Proves Unitàries amb Minitest
- Desenvolupament Basat en Comportament amb RSpec
- Mocking i Stubbing
Mòdul 8: Millors Pràctiques en Ruby
- Estil de Codi i Convencions
- Refactorització
- Optimització del Rendiment
- Millors Pràctiques de Seguretat