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}"
endExplicació 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
endBloc 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}"
endCreació 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}"
endExercicis 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'errorExercici 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'errorSolució
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'errorConclusió
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
