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.

© Copyright 2024. Tots els drets reservats