কোনো প্রোগ্রাম বা কোডের অংশে ভুল বা অপ্রত্যাশিত কিছু ঘটলে তা জানানোর জন্য এরর কাজে লাগে।
এগুলো JavaScript অবজেক্ট।
এই অবজেক্টের প্রধান প্রপার্টি হলো message:
const error = new Error('Oops, something went wrong');
console.log(error.message);
// => "Oops, something went wrong"
throw সিনট্যাক্স ব্যবহার করে আপনি একটি এরর থ্রো করতে পারেন।
throw new Error('Oops');
কোনো এরর থ্রো করা হলে বর্তমান এক্সিকিউশন থেমে যায় এবং কল স্ট্যাকের প্রথম ক্যাচ ব্লকে আবার শুরু হয়।
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');
}
}
এলেনা একটি সংবাদপত্র কারখানার নতুন কোয়ালিটি ম্যানেজার। কোম্পানিতে এইমাত্র যোগ দেওয়ায় তিনি কারখানার কিছু প্রক্রিয়া খতিয়ে দেখে বুঝতে চান কোথায় কী উন্নতি করা যায়। তিনি দেখতে পান, টেকনিশিয়ানরা হাতে করে অনেক কোয়ালিটি চেক করছেন। এতে অটোমেশনের ভালো একটি সুযোগ আছে বলে তিনি মনে করেন এবং আপনাকে, একজন ফ্রিল্যান্স ডেভেলপারকে, কিছু মেশিন মনিটর করার একটি সফটওয়্যার বানাতে বলেন।
আপনার প্রথম কাজ হলো উৎপাদন কক্ষের আর্দ্রতার মাত্রা মনিটর করার একটি সফটওয়্যার লেখা। কোম্পানির সফটওয়্যারের সাথে আগে থেকেই একটি সেন্সর যুক্ত আছে, যা নিয়মিত ঘরটির আর্দ্রতার শতকরা হার রিটার্ন করে।
সফটওয়্যারটিতে আপনাকে এমন একটি ফাংশন লিখতে হবে, যা আর্দ্রতার শতকরা হার বেশি হলে একটি এরর থ্রো করবে।
ফাংশনটির নাম হবে checkHumidityLevel এবং এটি প্যারামিটার হিসেবে আর্দ্রতার শতকরা হার নেবে।
শতকরা হার 70% ছাড়িয়ে গেলে আপনি একটি এরর থ্রো করবেন (মেসেজটি গুরুত্বপূর্ণ নয়)।
checkHumidityLevel(60);
// => undefined
checkHumidityLevel(100);
// Throws an error
এলেনা আপনার প্রথম কাজটিতে খুব খুশি হয়ে মেশিনগুলোর তাপমাত্রা মনিটর করার দায়িত্ব দেন। একজন টেকনিশিয়ান গ্রেগের সাথে কথা বলার সময় আপনি জানতে পারেন, কোনো মেশিনের তাপমাত্রা 500°C ছাড়িয়ে গেলে টেকনিশিয়ানরা অতিরিক্ত গরম হওয়া নিয়ে চিন্তা শুরু করেন।
মেশিনটিতে একটি সেন্সর লাগানো আছে, যা এর ভেতরের তাপমাত্রা মাপে। জেনে রাখুন, সেন্সরটি খুব সংবেদনশীল এবং প্রায়ই নষ্ট হয়ে যায়। এমন হলে টেকনিশিয়ানদের এটি বদলাতে হবে।
আপনার কাজ হলো reportOverheating নামে একটি ফাংশন লেখা, যা প্যারামিটার হিসেবে তাপমাত্রা নেবে এবং সেন্সর নষ্ট হলে বা মেশিন অতিরিক্ত গরম হতে শুরু করলে একটি এরর থ্রো করবে।
যেহেতু পরে এররভেদে আলাদা আলাদাভাবে প্রতিক্রিয়া জানাতে হবে, তাই দুই ধরনের এরর আলাদা করার একটি উপায় দরকার।
আপনি এরর মেসেজের উপর ভরসা করতে পারেন, কিন্তু তাতে আপনার কোডটি ভঙ্গুর হয়ে যাবে, কারণ মেসেজ আপডেট হলে কোড ভেঙে পড়বে।
তাই এটি সঠিকভাবে করার জন্য আপনি ভিন্ন ভিন্ন এরর ক্লাসের ইনস্ট্যান্স থ্রো করবেন।
null।
এক্ষেত্রে আপনার একটি ArgumentError থ্রো করা উচিত।OverheatingError থ্রো করা উচিত।
এই এরর ক্লাসটি তাপমাত্রা আর্গুমেন্ট দিয়ে ইনস্ট্যান্টিয়েট করা হবে।
আপনার থ্রো করা OverheatingError-টিতে যেন একটি temperature প্রপার্টি যুক্ত থাকে, তা নিশ্চিত করুন।reportOverheating(null);
// Throws an ArgumentError
reportOverheating(800);
// Throws an OverheatingError
এখন যেহেতু আপনার মেশিন এরর শনাক্ত করতে পারে, তাই এবার আপনি এমন একটি ফাংশন লিখবেন যা সেই এররগুলোতে ভিন্ন ভিন্নভাবে প্রতিক্রিয়া জানায় :
monitorTheMachine নামে একটি ফাংশন লিখুন, যা আর্গুমেন্ট হিসেবে actions নেয়।
actions হলো এমন একটি অবজেক্ট যার ৪টি প্রপার্টি আছে :
| property | description |
|---|---|
check |
একটি ফাংশন। মেশিনের তাপমাত্রা চেক করে। এটি বিভিন্ন ধরনের এরর থ্রো করতে পারে। |
alertDeadSensor |
একটি ফাংশন। তাপমাত্রার সেন্সরটি নষ্ট হয়ে গেছে বলে একজন টেকনিশিয়ানকে সতর্ক করে। |
alertOverheating |
একটি ফাংশন। মেশিনে একটি ওয়ার্নিং লাইট জ্বালাবে। |
shutdown |
একটি ফাংশন। মেশিনটি বন্ধ করে দেবে। |
monitorTheMachine(actions) ফাংশনটি অভ্যন্তরীণভাবে check() কল করবে।
সেটি ঠিকঠাক পার হলে ফাংশনটি কিছুই রিটার্ন করবে না।
সেটি কোনো এরর throw করলে ভিন্ন আচরণ প্রত্যাশিত:
| exception | expected behaviour |
|---|---|
ArgumentError |
alertDeadSensor ফাংশনটি কল করুন। |
OverheatingError |
অতিরিক্ত গরম হওয়ার প্রোটোকল কার্যকর করুন। |
| (anything else) | এররটি আবার থ্রো করুন |
অতিরিক্ত গরম হওয়ার প্রোটোকল
তাপমাত্রা 600 °C-এর কম হলে alertOverheating ফাংশনটি কল করে ওয়ার্নিং লাইটটি জ্বালান।
তাপমাত্রা 600 °C ছাড়িয়ে গেলে পরিস্থিতি সংকটপূর্ণ, তাই shutdown ফাংশনটি কল করুন।
monitorTheMachine({
check,
alertDeadSensor,
alertOverheating,
shutdown,
});
Exercism-এ সাইন আপ করুন, JavaScript ট্র্যাকের 37টি কনসেপ্ট159টি অনুশীলনী আর সত্যিকারের মানুষের মেন্টরিং দিয়ে শিখুন ও দক্ষ হয়ে উঠুন, সম্পূর্ণ বিনামূল্যে।