6.4 জাভাস্ক্রিপ্টের এরর কিভাবে থ্রোও করব
ট্রাই-ক্যাচ ব্লক নিয়ে কাজ করতে হলে প্রথমে এরর থ্রো করা শিখতে হবে। জাভাস্ক্রিপ্টে কিভাবে এরর থ্রো করতে হয় এটা নিয়ে আলোচনার আগে আমাদের বোঝা উচিত যে এখানে ‘এরর থ্রো’ করা বলতে আসলে কি বোঝানো হচ্ছে। কোনো প্রোগ্রামিং ল্যাংগুয়েজ যখন এমন একটি কিছুর মুখোমুখি হয় যেটাকে সে আর প্রসেস করতে পারছেনা, তখন ল্যংগুয়েজ-টি আমাদের-কে একটি ‘এরর’ পাঠিয়ে জানান দেয়। এরর থ্রো করা বলতে আসলে আমরা এই ব্যাপারটিকেই বুঝি। সাধারণত এরর থ্রো করার এই কাজটি ইঞ্জিনকে করতে হয়। কিন্তু আমরা ডেভেলপার-রাও কিন্তু চাইলে নিজেদের ইচ্ছেমতো এরর বানিয়ে সেটিকে থ্রো করতে পারি। ট্রাই-ক্যাচ-ফাইনালি ব্লক নিয়ে কাজ করার সময় আমরা নিজ থেকে এরর থ্রো করে ক্যাচ ব্লকে সেটা ধরতে পারি। এই কাজটি করার জন্য জাভাস্ক্রিপ্ট আমাদের “throw” স্টেটমেন্ট দিয়েছে।
এবার একটি সহজ উদাহরণ দেখা যাকঃ
এখানে ট্রাই ব্লকে ইফ এলস স্টেটমেন্টের সাহায্যে দেখা হচ্ছে যে input এর মানটি ১০ এর চেয়ে ছোট কিনা। ছোট হলে too small লিখে একটি স্ট্রিং থ্রো করা হয়েছে এবং মান ২০ এর চেয়ে বেশি হলে too big লিখে একটি স্ট্রিং থ্রো করা হয়েছে। এখন প্রশ্ন হলো এই থ্রো করা স্ট্রিং দিয়ে কি লাভ আমাদের। এখানেই আসে ক্যাচ ব্লকের কাজ। থ্রো করার পরবর্তীতে ক্যাচ ব্লকে এসে ওই স্ট্রিং গুলো একেকটা এরর অবজেক্ট হিসেবে ধরা দিচ্ছে। এই error টিই কিন্তু আমাদের ট্রাই ব্লক থেকে থ্রো করা হয়েছিলো। অর্থাৎ থ্রো স্টেটমেন্ট ব্যবহার করার কারনে নতুন একটি এরর অবজেক্ট তৈরি হয়েছে।
এখানে লক্ষনীয় ব্যপারটি হলো জাভাস্ক্রিপ্ট ইঞ্জিন কিছু না বলা সত্ত্বেও আমরা ডেভেলপার-রা আমাদের প্রোগ্রামের প্রয়োজন অনুযায়ী এরর বানিয়ে থ্রো করলাম এবং এরর পাওয়া গেলে প্রোগ্রাম কি আচরণ করবে সেই ব্যবস্থা আগে থেকেই করে রাখলাম। এই প্রোগ্রামটি রান করলে যে এরর টি কনসোলে প্রিন্ট হবে সেটি হলো too big কারণ input এর মান এখানে ২০ এর চেয়ে বড়। এবং সবশেষে কনসোলে ফাইনালি ব্লকের লেখাটি প্রিন্ট হবে।
আশা করছি ট্রাই-ক্যাচ-ফাইনালি ব্লক নিয়ে সবার এখন ভালো ধারনা হয়েছে এবং এখন থেকে আমরা সবাই জাভাস্ক্রিপ্টে যেকোনো ধরনের এরর হ্যান্ডেল করে ফেলতে পারবো।
- Error Handling Examples
- Error Handling Practices
- Error Handling Interview Questions
- উদাহরন ১ঃ
function div(a, b) {try {if (b <= 0) {throw new Error(“Cannot divided by zero”);} else {console.log(a / b);}} catch (error) {console.log(error.message);}}div(1, 1);
- উদাহরন ২ঃ
function getRectArea(width, height) {if (isNaN(width) || isNaN(height)) {throw “Parameter is not a number!”;}}try {getRectArea(3, “A”);} catch (e) {console.error(e);// expected output: “Parameter is not a number!”}
- উদাহরন ৩ঃ
async function getData() {try {const response = await fetch(“https://jsonplaceholder.typicode.com/todos/1”);if (response.status === 200) {const result = await response.json();console.log(result);} else {throw new Error(“Failed to load Data”);}} catch (error) {console.error(error);console.error(“Server Error”);}}getData();
- উদাহরন ৪ঃ
async function getData() {try {const response = await fetch(“https://jsonplaceholder.typicode.com/todos/1”);if (response.status === 200) {const result = await response.json();const id = result.userId;const albumsRes = await fetch(`https://jsonplaceholder.typicode.com/albums?userId=${id}`);if (albumsRes.status === 200) {const albums = await albumsRes.json();console.log(albums);} else {throw new Error(“Failed to load albums data”);}} else {throw new Error(“Failed to load Todo data”);}} catch (error) {console.log(error.message);console.log(“Server Error”);}}getData();
- উদাহরন ৫ঃ
try {throw 52; // throws an exception with a numeric value} catch (e) {if (e <= 50) {// statements to handle exceptions 1-50} else {// cannot handle this exception, so rethrowthrow e;}}
- একটি ফাংশন প্যারামিটার হিসেবে একটি integer নেয় , এবং
- যদি খালি প্যারামিটার হয় তবে ইরর দিবে is Empty
- যদি Not a Number হয় তবে ইরর দিবে not a number ,
- যদি ১০ এর থেকে বড় হয় তবে ইরর দিবে too high
- যদি ৫ এর নিচে হয় তবে এরর দিবে too low
- যদি ৫-১০ এর মধ্যে হয় তবে return দিবে Perfect match
- একটি API কল করতে হবে যদি success হয় তবে success ম্যাসেজ দেখাতে হবে আর যদি success না হয় তবে Failed to load data দেখাতে হবে এবং যদি success হয় কিন্তু কোন ডাটা না থাকে তবে Empty Data দেখাতে হবে।