कई भाषाओं की तरह Ruby में भी एक्सेप्शन अचानक होने वाली घटनाओं से निपटने का तरीका देते हैं। जब आप अपने प्रोग्राम को क्रैश होने से बचाना चाहते हैं, तो एक्सेप्शन को ठीक से संभालना ज़रूरी होता है।
जब कोई एक्सेप्शन उत्पन्न होता है, चाहे आपने उसे स्पष्ट रूप से उत्पन्न किया हो या Ruby इंटरप्रेटर ने, तो प्रोग्राम अपना सामान्य काम छोड़ देता है और अंत में एक एरर संदेश के साथ बंद हो जाता है:
raise ArgumentError.new("Something went wrong!")
=> Traceback (most recent call last):
.
.
ArgumentError (Something went wrong!)
1/0
=> Traceback (most recent call last):
.
.
ZeroDivisionError (divided by 0)
अगर हम चाहते हैं कि प्रोग्राम इस तरह बंद न हो, तो हमें उस एक्सेप्शन पर प्रतिक्रिया देनी होगी। इसी को किसी एक्सेप्शन को "rescue" करना कहते हैं:
begin
# ...any code that raises an exception
rescue
puts 'Got an exception'
end
यह प्रोग्राम क्रैश नहीं होगा और "Got an exception" छापेगा। बंद होने के बजाय Ruby rescue ब्लॉक के अंदर का कोड चलाता है, जो एक संदेश छापता है।
Ruby में बाकी सब चीज़ों की तरह एक्सेप्शन भी ऑब्जेक्ट होते हैं, और उनमें आम तौर पर उस एक्सेप्शन से जुड़ी जानकारी रहती है। इस तरह हम एक्सेप्शन ऑब्जेक्ट पा सकते हैं:
begin
# ...any code that raises an exception
rescue => e
puts "Exception class: #{ e.class.name }"
puts "Exception Message:#{e.message}"
end
Ruby में आप अपने खुद के एक्सेप्शन भी उत्पन्न कर सकते हैं। उदाहरण के लिए:
begin
raise ArgumentError.new("Invalid argument")
rescue ArgumentError => e
puts e.message
end
पिछला एक्सेप्शन Ruby में पहले से मौजूद एक्सेप्शन में से एक है, लेकिन कस्टम एक्सेप्शन बनाकर उन्हें उत्पन्न करना भी संभव है:
class CustomError < StandardError
end
raise CustomError.new("Something went wrong")
इस अभ्यास में आप एक साधारण कैलकुलेटर के लिए एरर हैंडलिंग बनाएँगे।
इसका उद्देश्य यह है कि आप एक ऐसा कैलकुलेटर बनाएँ जो आर्गुमेंट 16, 51 और + मिलने पर इस पैटर्न वाली स्ट्रिंग लौटाए: 16 + 51 = 67.
SimpleCalculator.calculate(16, 51, "+")
# => "16 + 51 = 67"
SimpleCalculator.calculate(32, 6, "*")
# => "32 * 6 = 192"
SimpleCalculator.calculate(512, 4, "/")
# => "512 / 4 = 128"
calculate मेथड के अंदर एरर दे सकने वाला कोड लिखिएइस टास्क में आपको मुख्य रूप से क्लास मेथड SimpleCalculator.calculate() बनाना है।
यह तीन आर्गुमेंट लेता है।
पहले दो आर्गुमेंट वे संख्याएँ हैं जिन पर ऑपरेशन किया जाएगा।
तीसरा आर्गुमेंट स्ट्रिंग टाइप का है, और इस अभ्यास में आपको ये ऑपरेशन लागू करने हैं:
+ स्ट्रिंग की मदद से जोड़ना* स्ट्रिंग की मदद से गुणा करना/ स्ट्रिंग की मदद से भाग देनाSimpleCalculator.calculate() मेथड को बदलिए ताकि अज्ञात ऑपरेशन चिह्नों के लिए यह UnsupportedOperation एक्सेप्शन दे।
SimpleCalculator.calculate(1, 2, '-')
# => Raises an UnsupportedOperation
इस अभ्यास में आपसे अपेक्षा है कि आप UnsupportedOperation एक्सेप्शन को किसी खास स्कोप के अंदर परिभाषित करें।
SimpleCalculator.calculate() मेथड को बदलिए ताकि अमान्य आर्गुमेंट टाइप के लिए यह ArgumentError एक्सेप्शन दे।
SimpleCalculator.calculate(1, '2', '*')
# => Raises an ArgumentError
SimpleCalculator.calculate() को बदलिए ताकि यह ZeroDivisionError एक्सेप्शन संभाल सके।
संभालने वाले कोड को Division by zero is not allowed. वाली स्ट्रिंग लौटानी चाहिए।
इसके अलावा SimpleCalculator.calculate() मेथड को कोई और एक्सेप्शन संभालना नहीं चाहिए।
SimpleCalculator.calculate(512, 0, "/")
# => returns "Division by zero is not allowed."
Exercism पर साइन अप कीजिए और Ruby को 21 कॉन्सेप्ट121 अभ्यास तथा असली इंसानों से मिलने वाली मेंटरिंग के साथ सीखिए और उसमें महारत हासिल कीजिए, वह भी बिल्कुल मुफ्त।