ภาษาส่วนใหญ่ มักจัดการกับปัญหาที่คาดไม่ถึง ด้วย exception เมื่อโปรแกรมมีปัญหาแทนที่จะออกจากโปรแกรมไปเลย ถ้านักพัฒนาเขียน exception ไว้โปรแกรมจะก็จะมาเรียก exception แทนที่จะออกจากโปรแกรมไป
ruby ไม่มี exception :p
เราจะใช้ begin/rescue ในการ catch exceptions แทน
begin
quotient = 1/0 #Boom!
rescue
puts('Something bad happen')
end
ในกรณีข้างต้น แทนที่โปรแกรมจะแสดง error
ZeroDivisionError: divided by 0
from (irb):1:in `/'
from (irb):1
โปรแกรมจะแสดงคำว่า “Something bad happen”
ถ้าเราต้องการแสดงผลให้ตรงกับปัญหาที่เกิดขึ้นเราสามารถ กำหนดได้ว่าปัญหาแบบไหนที่ให้ rescue
begin
quotient = 1/0 #Boom!
rescue ZeroDivisionError
puts('You tried to divide by zero')
end
ในตัวอย่างข้างต้นถ้าปัญหาที่เกิดไม่ได้เป็นการหารด้วยศูนย์ โปรแกรมจะแสดง error ตามปกติโดยไม่เข้า rescue
ถ้าเรารู้อยู่แล้วว่า method ของเรามีโอกาศ error แทนที่จะรอให้เกิด error ก่อน เราสามารถตรวจสอบแล้วส่งไป rescue ได้เลย
if denominator == 0
raise ZeroDivisionError
end
return numerator/denominator
ในกรณีที่เราต้องการสร้าง exception ของตนเอง ruby มีทางลัดให้
>>> raise 'You did it wrong'
RuntimeError: You did it wrong
ruby จะสร้าง Object RuntimeException ขึ้นมาแล้วใช้ ‘You did it wrong’ เป็นข้อความแนบไปกับ exception ที่เกิดขึ้น ในกรณีนี้เราไม่ต้องใช้ rescue เลย