Ruby:
การจัดการกับข้อผิดพลาด

วิธีการ:

Ruby ใช้ begin, rescue, ensure, และ end ในการจัดการข้อผิดพลาด คุณห่อโค้ดที่เสี่ยงด้วย begin และ end หากเกิดข้อผิดพลาด, rescue จะเริ่มทำงาน

begin
  # โค้ดที่เสี่ยงต่อการผิดพลาดไปที่นี่
  puts 10 / 0
rescue ZeroDivisionError => e
  puts "โอ๊ะ! คุณทำอะไรนั้นไม่ได้: #{e.message}"
ensure
  puts "สิ่งนี้จะทำงานเสมอ, ไม่ว่าจะมีข้อผิดพลาดหรือไม่"
end

ผลลัพธ์ตัวอย่าง:

โอ๊ะ! คุณทำอะไรนั้นไม่ได้: หารด้วย 0
สิ่งนี้จะทำงานเสมอ, ไม่ว่าจะมีข้อผิดพลาดหรือไม่

การศึกษาลึก

โดยประวัติศาสตร์, การจัดการข้อผิดพลาดในภาษาโปรแกรมมิ่งได้พัฒนาอย่างมาก โดยภาษาก่อนๆ มักมีกลไกที่หยาบคายหรือไม่มีเลย การจัดการข้อยกเว้นของ Ruby ได้รับแรงบันดาลใจจากภาษาเช่น Python และ Smalltalk

ทางเลือกอื่นๆ กับ begin-rescue ใน Ruby รวมถึงการใช้ rescue ในคำนิยามของวิธีการหรือการใช้ throw และ catch สำหรับการควบคุมการไหลที่ไม่ธรรมดา, ถึงแม้ว่าจะไม่ใช้สำหรับการจัดการข้อผิดพลาดทั่วไป

รายละเอียดที่น่าสนใจหนึ่งข้อ: ข้อยกเว้นของ Ruby เป็นวัตถุ (อินสแตนซ์ของคลาส Exception และลูกหลาน), ดังนั้นคุณจึงสามารถกำหนดคลาสข้อผิดพลาดของคุณเองและทำมากกว่าเพียงแค่บันทึกข้อผิดพลาด — คุณสามารถพกพาสถานะที่หนาแน่นไปรอบๆ โปรแกรมเพื่อการจัดการข้อผิดพลาดที่แข็งแกร่งยิ่งขึ้น

ดูเพิ่มเติม

  • เอกสาร Ruby เกี่ยวกับข้อยกเว้นและการจัดการข้อผิดพลาด: ruby-doc.org
  • คู่มือละเอียดเกี่ยวกับแนวทางปฏิบัติที่ดีที่สุดในการจัดการข้อผิดพลาดของ Ruby: thoughtbot.com