जब किसी प्रोग्राम या कोड के किसी हिस्से में कुछ गलत या अनपेक्षित हो, तो उसकी जानकारी एरर के रूप में देना काम आता है।
ये JavaScript ऑब्जेक्ट होती हैं।
इस ऑब्जेक्ट की मुख्य प्रॉपर्टी message है:
const error = new Error('Oops, something went wrong');
console.log(error.message);
// => "Oops, something went wrong"
throw सिंटैक्स का इस्तेमाल करके आप एक एरर फेंक सकते हैं।
throw new Error('Oops');
जब कोई एरर फेंकी जाती है, तो वर्तमान निष्पादन रुक जाता है और कॉल स्टैक के पहले catch ब्लॉक से दोबारा शुरू होता है।
try {
throw new Error('Oops');
} catch (error) {
console.log(error.message);
// => "Oops"
}
इनहेरिटेंस क्लासों के बीच पैरेंट-चाइल्ड संबंध बनाने का एक तरीका है। चाइल्ड क्लास (जिसे कभी-कभी सबक्लास कहा जाता है) के पास पैरेंट क्लास (जिसे कभी-कभी सुपरक्लास कहा जाता है) द्वारा परिभाषित व्यवहार और डेटा तक पहुँच होती है।
class Pet {
constructor(name) {
this.name = name;
}
introduce() {
console.log(`This is my pet, ${this.name}.`);
}
}
class Dog extends Pet {}
const dog = new Dog('Otis');
dog.introduce();
// => This is my pet, Otis.
चाइल्ड क्लास के डिक्लेरेशन में extends कीवर्ड प्रोटोटाइप चेन के ज़रिए पैरेंट क्लास से संबंध बनाता है।
चाइल्ड क्लास का कंस्ट्रक्टर जो ऑब्जेक्ट बनाता है, उन सबके प्रोटोटाइप चेन में पैरेंट क्लास का प्रोटोटाइप होता है। इससे उन्हें पैरेंट द्वारा परिभाषित सभी मेथड और डेटा तक पहुँच मिलती है।
const dog = new Dog('Otis');
Dog.prototype.isPrototypeOf(dog); // => true
Pet.prototype.isPrototypeOf(dog); // => true
Pet.prototype.isPrototypeOf(Dog.prototype); // => true
Pet.prototype.hasOwnProperty('introduce'); // => true
Dog.prototype.hasOwnProperty('introduce'); // => false
dog.hasOwnProperty('introduce'); // => false
JavaScript की किसी भी क्लास की तरह, सबक्लास extends कीवर्ड का इस्तेमाल करके Error से इनहेरिट कर सकते हैं और कस्टम एरर बना सकते हैं।
instanceof सिंटैक्स यह जाँचता है कि पकड़ी गई एरर Error के किसी खास सबक्लास की इंस्टेंस है या नहीं।
class CustomError extends Error {}
try {
// ... Code that may throw an error
} catch (error) {
if (error instanceof CustomError) {
console.log('The error thrown is an instance of the CustomError');
}
}
Elena अखबार बनाने वाले एक कारखाने की नई क्वालिटी मैनेजर है। कंपनी में अभी-अभी पहुँचने के बाद उसने तय किया कि वह कारखाने की कुछ प्रक्रियाएँ देखेगी, ताकि पता चले कि क्या बेहतर किया जा सकता है। उसे पता चला कि टेक्नीशियन बहुत सारी क्वालिटी जाँचें हाथ से कर रहे हैं। उसे लगा कि ऑटोमेशन का अच्छा मौका है, और उसने आपसे, जो एक फ्रीलांस डेवलपर हैं, कुछ मशीनों की निगरानी के लिए एक सॉफ्टवेयर बनाने को कहा।
आपको पहले एक ऐसा सॉफ्टवेयर लिखना है जो उत्पादन कक्ष में नमी के स्तर पर नज़र रखे। कंपनी के सॉफ्टवेयर से पहले से एक सेंसर जुड़ा है, जो समय-समय पर कमरे की नमी का प्रतिशत बताता है।
आपको सॉफ्टवेयर में एक फंक्शन बनाना है, जो नमी का प्रतिशत बहुत ज़्यादा होने पर एक एरर फेंकेगा।
इस फंक्शन का नाम checkHumidityLevel होना चाहिए और इसे पैरामीटर के रूप में नमी का प्रतिशत लेना चाहिए।
अगर प्रतिशत 70% से ज़्यादा हो, तो आपको एक एरर फेंकना चाहिए (संदेश मायने नहीं रखता)।
checkHumidityLevel(60);
// => undefined
checkHumidityLevel(100);
// Throws an error
Elena आपके पहले काम से बहुत खुश है और आपसे मशीनों के तापमान की निगरानी करने को कहती है। एक टेक्नीशियन, Greg, से बात करते समय आपको बताया जाता है कि अगर किसी मशीन का तापमान 500°C से ज़्यादा हो जाए, तो टेक्नीशियन ज़्यादा गर्म होने की चिंता करने लगते हैं।
मशीन में एक सेंसर लगा है, जो उसका अंदरूनी तापमान मापता है। आपको पता होना चाहिए कि यह सेंसर बहुत संवेदनशील है और अक्सर खराब हो जाता है। ऐसी स्थिति में टेक्नीशियन को इसे बदलना पड़ता है।
आपको reportOverheating नाम का एक फंक्शन बनाना है, जो पैरामीटर के रूप में तापमान लेता है और तब एरर फेंकता है जब सेंसर खराब हो या मशीन ज़्यादा गर्म होने लगे।
आगे आपको हर एरर पर अलग-अलग तरीके से प्रतिक्रिया देनी होगी, इसलिए आपको दोनों तरह की एरर में फर्क करने का एक तरीका चाहिए।
आप एरर के संदेशों पर भरोसा कर सकते हैं, लेकिन इससे आपका कोड नाज़ुक बन जाएगा, क्योंकि संदेश बदलते ही वह टूट जाएगा।
इसलिए यह ठीक से करने के लिए आप अलग-अलग एरर क्लास के इंस्टेंस फेंकेंगे।
null होगा।
ऐसी स्थिति में आपको एक ArgumentError फेंकना चाहिए।OverheatingError फेंकना चाहिए।
यह एरर क्लास तापमान आर्गुमेंट के साथ बनाई जाएगी।
ध्यान रखिए कि आप जो OverheatingError फेंकते हैं, उसके साथ temperature नाम की एक प्रॉपर्टी जुड़ी होनी चाहिए।reportOverheating(null);
// Throws an ArgumentError
reportOverheating(800);
// Throws an OverheatingError
अब जब आपकी मशीन एरर पहचान सकती है, तो आप एक ऐसा फंक्शन बनाएँगे जो इन एररों पर अलग-अलग तरीकों से प्रतिक्रिया देगा :
एक फंक्शन monitorTheMachine बनाइए, जो actions नाम का एक आर्गुमेंट लेता है।
actions एक ऑब्जेक्ट है जिसमें 4 प्रॉपर्टियाँ हैं :
| प्रॉपर्टी | विवरण |
|---|---|
check |
एक फंक्शन. यह मशीन का तापमान जाँचता है। यह कई तरह की एरर फेंक सकता है। |
alertDeadSensor |
एक फंक्शन. यह टेक्नीशियन को चेतावनी देता है कि तापमान वाला सेंसर खराब हो गया है। |
alertOverheating |
एक फंक्शन. यह मशीन पर एक चेतावनी बत्ती जला देगा। |
shutdown |
एक फंक्शन. यह मशीन बंद कर देगा। |
monitorTheMachine(actions) फंक्शन को अंदर ही अंदर check() को कॉल करना चाहिए।
अगर वह ठीक चलता है, तो फंक्शन को कुछ भी नहीं लौटाना चाहिए।
अगर वह कोई एरर throw करता है, तो अलग व्यवहार की उम्मीद है:
| एक्सेप्शन | अपेक्षित व्यवहार |
|---|---|
ArgumentError |
alertDeadSensor फंक्शन को कॉल कीजिए। |
OverheatingError |
ज़्यादा गर्म होने का प्रोटोकॉल चलाइए। |
| (कुछ और) | एरर दोबारा फेंकिए। |
ज़्यादा गर्म होने का प्रोटोकॉल
अगर तापमान 600 °C से कम है, तो alertOverheating फंक्शन को कॉल करके चेतावनी बत्ती जला दीजिए।
अगर तापमान 600 °C से ज़्यादा है, तो स्थिति गंभीर है, इसलिए shutdown फंक्शन को कॉल कीजिए।
monitorTheMachine({
check,
alertDeadSensor,
alertOverheating,
shutdown,
});
Exercism पर साइन अप कीजिए और JavaScript को 37 कॉन्सेप्ट159 अभ्यास तथा असली इंसानों से मिलने वाली मेंटरिंग के साथ सीखिए और उसमें महारत हासिल कीजिए, वह भी बिल्कुल मुफ्त।