Ruby:
Obsługa błędów

Jak to zrobić:

Ruby używa begin, rescue, ensure i end do obsługi błędów. Zawijasz ryzykowny kod w begin i end. Jeśli wystąpi błąd, włącza się rescue.

begin
  # Ryzykowny kod umieszczamy tutaj.
  puts 10 / 0
rescue ZeroDivisionError => e
  puts "O nie! Nie możesz tego zrobić: #{e.message}"
ensure
  puts "To zawsze się wykonuje, niezależnie od błędu czy nie."
end

Przykładowy wynik:

O nie! Nie możesz tego zrobić: divided by 0
To zawsze się wykonuje, niezależnie od błędu czy nie.

Pogłębienie

Historycznie obsługa błędów w językach programowania ewoluowała znacząco, gdzie wczesne języki często posiadały proste lub nie istniejące mechanizmy. Obsługa wyjątków w Ruby jest inspirowana językami takimi jak Python i Smalltalk.

Alternatywy dla begin-rescue w Ruby obejmują użycie rescue w definicjach metody lub wykorzystanie throw i catch do niestandardowego kontrolowania przepływu, chociaż nie są one używane do typowej obsługi błędów.

Jeden interesujący szczegół: wyjątki w Ruby są obiektami (instancjami klasy Exception i jej potomków), więc możesz definiować własne klasy błędów i robić więcej niż tylko rejestrować błędy — możesz przenosić bogaty stan wokół programu dla bardziej solidnej obsługi błędów.

Zobacz też

  • Dokumentacja Ruby na temat wyjątków i obsługi błędów: ruby-doc.org
  • Szczegółowy przewodnik po najlepszych praktykach obsługi błędów w Ruby: thoughtbot.com