مدیریت استثناها در روبی

begin/rescue/ensure/raise برای مدیریت خطاها و استثناها در روبی

استثنا (Exception) چیست؟

استثنا خطایی است که هنگام اجرای برنامه رخ می‌دهد. با begin/rescue می‌توان آن را مدیریت کرد.

ساختار پایه

begin
  # کدی که ممکن است خطا دهد
  result = 10 / 0
rescue => e
  puts "خطا رخ داد: #{e.message}"
end

rescue با نوع خطای خاص

begin
  result = 10 / 0
rescue ZeroDivisionError => e
  puts "تقسیم بر صفر!"
rescue TypeError => e
  puts "خطای نوع!"
end

raise — ایجاد خطا

def check_age(age)
  raise ArgumentError, "سن نمی‌تواند منفی باشد" if age < 0
  "سن: #{age}"
end

begin
  puts check_age(-5)
rescue ArgumentError => e
  puts "خطا: #{e.message}"
end

ensure — همیشه اجرا می‌شود

begin
  puts "شروع"
  raise "خطا!"
rescue => e
  puts "گرفته شد: #{e.message}"
ensure
  puts "این همیشه اجرا می‌شود"  # مثل finally
end

retry — تلاش مجدد

retries = 0
begin
  puts "تلاش #{retries + 1}"
  raise "خطا!" if retries < 2
  puts "موفق!"
rescue
  retries += 1
  retry if retries < 3
  puts "رد شد"
end

ساخت استثنای سفارشی

class MyError < StandardError; end

raise MyError, "خطای سفارشی من!"

خلاصه

کلمه کلیدیتوضیح
begin/rescuetry/catch
raiseایجاد خطا
ensureهمیشه اجرا (finally)
retryتلاش مجدد
rescue => eگرفتن خطا در متغیر

این مبحث بخشی از دوره آموزش کامل روبی است.

ابزارهای مرتبط