6.2 If else কন্ডিশন দিয়ে এরর হ্যান্ডেলিং

 

জাভাস্ক্রিপ্ট কোডের এরর হ্যান্ডেল করার একটি উপায় হলো কন্ডিশনাল স্টেটমেন্ট অর্থাৎ ইফ এলস ব্যবহার করা। ইফ এলস স্টেটমেন্ট দিয়ে আমরা সাধারণত বিভিন্ন ধরনের শর্ত চেক করি এবং সেই অনুযায়ী প্রোগ্রাম-কে নির্দেশনা দেই।এক্ষেত্রে একটু চিন্তা করলেই বোঝা যাবে যে আমরা যদি আমাদের একটি নির্দিষ্ট ব্লকের কোডের জন্য কি ধরনের এরর আসতে পারে সেটি আগে থেকে ধারনা করতে পারি তাহলে সেই অনুযায়ী কন্ডিশন চেক করে সেটি হ্যান্ডেল করে ফেলতে পারবো। একটি উদাহরণ দেখে সেটি ব্যাখ্যা করা যাক।

function convertToInteger(input) {
   let result = Number.parseInt(input);
   if (!result){
     return "This data can't be converted to integer."
   } else {
     return result;
   }
}

let result = convertToInteger('25');
console.log(result);                   // 25

result = convertToInteger('String');
console.log(result);                  // This data can't be converted to integer.

এখানে convertToInteger ফাংশন টির কাজ হলো যেকোনো টাইপের ইনপুট নিয়ে সেটিকে ইন্টেজার এ রূপান্তর করার চেষ্টা করা। কিন্তু Number.parseInt() ফাংশন কিন্তু সব ধরনের ডাটা-কে ইন্টেজারে রূপান্তর করতে পারেনা। যেসব ক্ষেত্রে পারেনা সেসব ক্ষেত্রে NaN রিটার্ন করে। অর্থাৎ জাভাস্ক্রিপ্ট কিন্তু এখানে আমাদের জন্য কোনো এরর থ্রো করছেনা বরং অন্য একটি ডাটা টাইপ সেইভ করে রাখছে যেটি আমাদের কাম্য না। এই পরিস্থিতিতে আমাদের যেহেতু আমাদের জানা আছে যে এধরনের এরর হতে পারে, আমরা এখানে কন্ডিশনাল স্টেটমেন্ট ব্যবহার করতে পারি। এই কাজটিই উপরে করা হয়েছে যেখানে ইফ স্টেটমেন্টে রেজাল্টের ভ্যালু চেক করে একটি এরর মেসেজ রিটার্ন করা হচ্ছে।

এভাবেই আমরা ইফ এলস স্টেটমেন্টের সাহায্যে এরর হ্যান্ডেল করে ফেলতে পারি। কিন্তু আমাদের মাথায় রাখা প্রয়োজন যে কন্ডিশনাল স্টেটমেন্টগুলো এরর হ্যান্ডেল করার জন্য বানানো হয়নি। এরর হ্যান্ডেল করার জন্য জাভাস্ক্রিপ্ট আমাদের এর চেয়ে আরো ভালো উপায় দিয়েছে যেটি নিয়ে লেখার পরবর্তী অংশে আলোচনা হবে।

উদাহরন
  • উদাহরন ১ঃ
    function add(a, b) {
      return a + b;
    }
    
    function addition(a, b) {
      if (typeof a !== "number" || typeof b !== "number") {
        return "This data not an integer";
      } else {
        return a + b;
      }
    }
    
    console.log(add("3", "2")); // 32
    console.log(addition("3", "2")); // This data not an integer
    console.log(addition(3, 2)); // 5

    উপরের add ফাংশনটি দুইটি সংখ্যা যোগ করে যোগফল return দেয়, কিন্তু যদি দুইটি সংখ্যার পরিবর্তে দুইটি স্ট্রিং প্যারামিটার হিসেবে পাস করি তবে তা দুইটি স্ট্রিংকে concat করে ৩২ রেজাল্ট দেয়। সেক্ষেত্রে আময়াদের চেক করে নিতে হবে প্যারামিটার হিসেবে সে দুটি ভ্যালু পাঠানো হয়েছে তা সংখ্যা কিনা। যদি সংখ্যা না হয় তবে এরর ম্যাসেস দিবে।

  • উদাহরন ২ঃ
    function convertToInt(num) {
      const result = Number.parseInt(num);
    
      if (!result) {
        return "Please provide a valid value";
      } else {
        return result;
      }
    }
    
    console.log(convertToInt("45.54434sd")); // 45
    console.log(convertToInt("sdsadasd45.54434sd")); // Please provide a valid value

    আবার যদি কোন ভ্যালুকে ইন্টিজারে কনভার্ট করতে চাই তাহলে আমরা সেই ভ্যালুটি valid/invalid কিনা তা if/else এর মাধ্যমে চেক করতে পারি।

  • উদাহরন ৩ঃ
    async function getData() {
      const response = await fetch("https://jsonplaceholder.typicode.com/todos/1");
    
      if (response.status === 200) {
        const result = await response.json();
        console.log(result);
      } else {
        console.log("Failed to load Data");
      }
    }
    
    getData();

    উপরের getData() ফাংশনটিতে একটি asynchronous মেথড কল করা হয়েছে এবং সার্ভার থেকে ডাটা নিয়ে আসতেও পারে নাও আসতে পার ,এক্ষেত্রে আমরা if/else দিয়ে চেক করে error হ্যান্ডিলিং করতে পারি।

  • উদাহরন ৪ঃ
    async function getData() {
      const response = await fetch("https://jsonplaceholder.typicode.com/todos/1");
    
      if (response.status === 200) {
        const result = await response.json();
    
        const id = result.id;
        const albumsRes = await fetch(
          `https://jsonplaceholder.typicode.com/albums?userId=${id}`
        );
        if (albumsRes.status === 200) {
          const albums = await albumsRes.json();
          console.log(albums);
        } else {
          console.log("Failed to load Data");
        }
      } else {
        console.log("Failed to load Data");
      }
    }
    
    getData();

    অনেক সময় আমাদের মাল্টিপল রিকোয়েস্ট নিয়ে কাজ করতে হতে পারে,সেক্ষেত্রে আমাদের প্রথম রিকোয়েস্টের আইডি নিয়ে পরের রিকোয়েস্টে পাস করতে হতে পারে ,যদি প্রথম রিকোয়েস্ট যদি আমরা না হেন্ডেল করি তবে পুরো কোডটিই আমাদের ইরর দিবে এজন্য ইরর হ্যান্ডেলিং করাটা আবশ্যক।

এসো নিজে করি
  • একটি ফাংশন বানান, যা দুইটি পজিটিভ সংখ্যা প্যারামিটার হিসেবে নেয় এবং তাদের যোগফল return করে।
  • একটি asynchronous ফাংশনে API কল করে ,যদি status Code ২০০ হয় তবে ডাটা কনসোলে দেখান।

API Endpoint : https://jsonplaceholder.typicode.com/posts