Skill Development

এক্সেপশন হ্যান্ডলিং

সি# এ এক্সেপশন হ্যান্ডলিং কোডের ত্রুটি ও অপ্রত্যাশিত সমস্যাগুলো দক্ষভাবে হ্যান্ডল করার প্রক্রিয়া। এক্সেপশন হ্যান্ডলিং ব্যবহার করে কোড রানটাইমে সুরক্ষিত রাখা এবং ব্যবহারকারীকে পরিষ্কার ত্রুটির বার্তা দেওয়া সম্ভব। নিচে সি# এক্সেপশন হ্যান্ডলিং এর মূল অংশগুলো নিয়ে আলোচনা করা হলো।

সি# এ এক্সেপশন হ্যান্ডলিং এর মূল অংশগুলো:

  1. try ব্লক - যেখানে এক্সেপশন ঘটতে পারে এমন কোড রাখা হয়।
  2. catch ব্লক - এক্সেপশন ধরা এবং হ্যান্ডল করার জন্য।
  3. finally ব্লক - এক্সেপশন ঘটুক বা না ঘটুক সবশেষে চালানোর জন্য।
  4. throw কিওয়ার্ড - কাস্টম বা নির্দিষ্ট এক্সেপশন ছাড়ার জন্য।

১. try এবং catch ব্লক

try ব্লকে এমন কোড থাকে যেখানে এক্সেপশন ঘটতে পারে। try ব্লকের কোনো কোডে এক্সেপশন ঘটলে, সেটি catch ব্লকে চলে আসে, এবং সেখানে এক্সেপশনটি হ্যান্ডল করা হয়।

try
{
    int result = 10 / 0; // এটি Division by zero exception ঘটাবে
}
catch (DivideByZeroException ex)
{
    Console.WriteLine("Division by zero is not allowed: " + ex.Message);
}
catch (Exception ex)
{
    Console.WriteLine("An error occurred: " + ex.Message);
}

উপরের উদাহরণে, প্রথম catch ব্লকটি DivideByZeroException এক্সেপশন ধরার জন্য ব্যবহৃত হয়েছে, এবং দ্বিতীয় catch ব্লকটি জেনেরিক এক্সেপশন ধরার জন্য।

২. finally ব্লক

finally ব্লক ব্যবহার করা হয় এমন কিছু কোড রাখার জন্য, যা try এবং catch ব্লক শেষে অবশ্যই চালানো হবে। এটি প্রায়শই রিসোর্স মুক্ত করতে ব্যবহৃত হয়, যেমন ডেটাবেস কানেকশন বা ফাইল বন্ধ করা।

try
{
    int[] numbers = {1, 2, 3};
    Console.WriteLine(numbers[5]); // Array index out of bounds exception
}
catch (IndexOutOfRangeException ex)
{
    Console.WriteLine("Array index is out of bounds: " + ex.Message);
}
finally
{
    Console.WriteLine("This block is always executed.");
}

উপরের কোডে, try ব্লকে IndexOutOfRangeException ধরা হবে এবং finally ব্লক সর্বদা চালানো হবে।

৩. throw কিওয়ার্ড

কাস্টম এক্সেপশন তৈরি বা নির্দিষ্ট এক্সেপশন ছাড়ার জন্য throw কিওয়ার্ড ব্যবহার করা হয়। নিচের উদাহরণে একটি কাস্টম এক্সেপশন ফাংশন ব্যবহার করে ছাড়া হয়েছে।

public void ValidateAge(int age)
{
    if (age < 18)
    {
        throw new ArgumentException("Age must be 18 or older.");
    }
}

এখানে, ValidateAge মেথডে যদি age ১৮ এর কম হয়, তাহলে ArgumentException ছোড়া হবে।

একটি সম্পূর্ণ উদাহরণ

public class Program
{
    public static void Main()
    {
        try
        {
            int[] numbers = { 1, 2, 3 };
            Console.WriteLine(numbers[5]); // Index out of bounds exception
        }
        catch (IndexOutOfRangeException ex)
        {
            Console.WriteLine("Array index is out of bounds: " + ex.Message);
        }
        catch (Exception ex)
        {
            Console.WriteLine("An error occurred: " + ex.Message);
        }
        finally
        {
            Console.WriteLine("Execution completed.");
        }
    }
}

উপরের উদাহরণে, try ব্লকের মধ্যে একটি ইনডেক্স আউট অফ বাউন্ড এক্সেপশন ঘটলে সেটি catch ব্লকে হ্যান্ডল করা হবে এবং finally ব্লক সর্বদা চালানো হবে।

সংক্ষেপে

সি# এ এক্সেপশন হ্যান্ডলিং:

  • try ব্লকে সন্দেহজনক কোড রাখা হয়।
  • catch ব্লকে এক্সেপশন হ্যান্ডল করা হয়।
  • finally ব্লক ব্যবহার করা হয় সবশেষে কিছু কোড চালানোর জন্য।
  • throw কিওয়ার্ড দিয়ে নির্দিষ্ট বা কাস্টম এক্সেপশন ছাড়া হয়।

এইভাবে, এক্সেপশন হ্যান্ডলিং কোডকে আরও নিরাপদ এবং নির্ভরযোগ্য করে তোলে।

Content added By

এক্সেপশন কী এবং কেন দরকার

এক্সেপশন (Exception) হলো একটি বিশেষ ইভেন্ট যা প্রোগ্রাম রানটাইমে ঘটে এবং প্রোগ্রামের স্বাভাবিক কার্যক্রমে বিঘ্ন ঘটায়। এক্সেপশন বিভিন্ন কারণে ঘটতে পারে, যেমন:

  • ডিভিশন বাই জিরো বা শূন্য দিয়ে ভাগ করার চেষ্টা
  • ইনডেক্স আউট অফ বাউন্ড (যেমন, একটি অ্যারের বাইরে থাকা ইনডেক্সে অ্যাক্সেস করার চেষ্টা)
  • নাল রেফারেন্স (যেমন, নাল বা শূন্য ভ্যালুতে অপারেশন করার চেষ্টা)
  • ফাইল না পাওয়া
  • ডেটাবেস কানেকশন ব্যর্থ হওয়া
  • অবৈধ ইনপুট বা ডেটা টাইপ

এগুলো ছাড়াও প্রোগ্রামিংয়ে অনেক রকম ত্রুটি হতে পারে যা স্বাভাবিক প্রোগ্রাম ফ্লোতে বাধা দেয় এবং প্রোগ্রামকে নির্দিষ্ট ভাবে চালানো কঠিন করে তোলে। এসব ক্ষেত্রে এক্সেপশন হ্যান্ডলিং ব্যবহৃত হয়।

এক্সেপশন কিভাবে কাজ করে?

এক্সেপশন ঘটে গেলে প্রোগ্রামটি নিজে থেকে চলতে অক্ষম হয় এবং ত্রুটি নির্ণয়কারী সিস্টেম এটি শনাক্ত করে। ত্রুটি যখন শনাক্ত হয়, তখন প্রোগ্রামের catch ব্লক (যদি থাকে) সেই এক্সেপশনটি ধরে এবং প্রোগ্রামকে নির্দিষ্ট নির্দেশনা দেয়, অর্থাৎ প্রোগ্রামকে জানায় কিভাবে ওই ত্রুটি সামাল দিতে হবে।

সি# এ এক্সেপশন হ্যান্ডলিং এর উপাদানসমূহ

এক্সেপশন হ্যান্ডলিংয়ের জন্য সি# এ বিশেষ কিছু কীওয়ার্ড ব্যবহৃত হয়, যেমন try, catch, finally এবং throw

১. try ব্লক

try ব্লকে এমন কোড রাখা হয় যা এক্সেপশন ঘটাতে পারে বলে মনে করা হয়। এটি প্রোগ্রামের সেই অংশকে পরীক্ষা করে যেখানে ত্রুটি ঘটতে পারে।

try
{
    int result = 10 / 0; // Division by zero exception ঘটাবে
}

২. catch ব্লক

try ব্লকের কোনো কোডে যদি এক্সেপশন ঘটে, তাহলে এটি catch ব্লকে চলে আসে, যেখানে এক্সেপশনটি হ্যান্ডল করা হয়। catch ব্লকে এক্সেপশনের ধরন অনুযায়ী কোড রাখা হয়, যাতে নির্দিষ্ট ত্রুটি হলে সেটি কিভাবে হ্যান্ডল করতে হবে তা নির্ধারিত থাকে।

try
{
    int result = 10 / 0;
}
catch (DivideByZeroException ex)
{
    Console.WriteLine("Division by zero is not allowed: " + ex.Message);
}
catch (Exception ex)
{
    Console.WriteLine("An error occurred: " + ex.Message);
}

৩. finally ব্লক

finally ব্লক এমন কোড রাখার জন্য ব্যবহৃত হয়, যা try বা catch ব্লকের পরে অবশ্যই চালানো হবে। এটি বিশেষ করে তখন কার্যকরী হয় যখন প্রোগ্রামে রিসোর্স মুক্ত করতে হয়, যেমন, ফাইল বা ডেটাবেস কানেকশন বন্ধ করা।

try
{
    int[] numbers = {1, 2, 3};
    Console.WriteLine(numbers[5]); // Array index out of bounds exception
}
catch (IndexOutOfRangeException ex)
{
    Console.WriteLine("Array index is out of bounds: " + ex.Message);
}
finally
{
    Console.WriteLine("Execution completed, cleaning up resources.");
}

৪. throw কিওয়ার্ড

throw কিওয়ার্ড ব্যবহার করে কাস্টম বা নির্দিষ্ট এক্সেপশন ছাড়া হয়। এটি কোনো নির্দিষ্ট শর্তে নতুন একটি এক্সেপশন তৈরি করতে ব্যবহার করা হয় বা কাস্টম মেসেজ সহ এক্সেপশন নিক্ষেপ করা হয়।

public void ValidateAge(int age)
{
    if (age < 18)
    {
        throw new ArgumentException("Age must be 18 or older.");
    }
}

এক্সেপশন হ্যান্ডলিং কেন প্রয়োজন?

এক্সেপশন হ্যান্ডলিংয়ের কিছু গুরুত্বপূর্ণ কারণ রয়েছে, যা একটি প্রোগ্রামকে আরও কার্যকর, নির্ভরযোগ্য এবং ব্যবহারকারী-বান্ধব করে তোলে:

১. বাগ সনাক্তকরণ ও সমাধান

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

২. প্রোগ্রামের স্থায়িত্ব ও ধারাবাহিকতা

একটি প্রোগ্রাম চলাকালীন একটি এক্সেপশন ঘটলে সেটি যদি হ্যান্ডল করা না হয়, তাহলে পুরো প্রোগ্রামটি হঠাৎ করে বন্ধ হয়ে যেতে পারে। এক্সেপশন হ্যান্ডলিং করার মাধ্যমে এই ধরণের ত্রুটিগুলি স্বাভাবিকভাবে সামাল দেওয়া যায়, এবং প্রোগ্রামটি ক্র্যাশ হওয়া থেকে রক্ষা করা যায়।

৩. ব্যবহারকারী অভিজ্ঞতা উন্নয়ন

এক্সেপশন হ্যান্ডলিংয়ের মাধ্যমে প্রোগ্রামে এমন বার্তা দেখানো সম্ভব যা ব্যবহারকারীর জন্য বোধগম্য এবং সহায়ক। এর মাধ্যমে ব্যবহারকারীর কাছে ত্রুটির স্পষ্ট কারণ ও করণীয় জানানো যায়, যা প্রোগ্রামটি ব্যবহারে তাদের স্বাচ্ছন্দ্য দেয়।

৪. রিসোর্স ম্যানেজমেন্ট এবং মেমরি লিক প্রতিরোধ

প্রোগ্রামে ফাইল, ডেটাবেস, নেটওয়ার্ক কানেকশন প্রভৃতি রিসোর্সের ব্যবহার হতে পারে, যেগুলো সবসময় রিলিজ করা উচিত। finally ব্লক ব্যবহার করে এসব রিসোর্স হ্যান্ডল করা সম্ভব, যা প্রোগ্রামের কার্যকারিতা বৃদ্ধি করে এবং মেমরি লিক প্রতিরোধ করে।

৫. সহজ ডিবাগিং ও জটিল কোড সহজ করা

এক্সেপশন হ্যান্ডলিং ব্যবহারের মাধ্যমে প্রোগ্রামের জটিলতা কমানো যায়। নির্দিষ্ট এক্সেপশন ক্যাচ করে কোডকে সুসংগঠিত ও কার্যকরী রাখা যায়। এক্সেপশন ধরার মাধ্যমে সহজে কোড ডিবাগ করা যায় এবং প্রোগ্রামের লজিক সম্পর্কে স্পষ্ট ধারণা পাওয়া যায়।

উদাহরণ

নিচে একটি বাস্তব উদাহরণ দেওয়া হলো, যেখানে ফাইল অপেন করার সময় কোনো ত্রুটি ঘটলে সেটি হ্যান্ডল করা হয়েছে এবং সর্বদা ফাইল বন্ধ করা হয়েছে:

using System;
using System.IO;

public class FileReader
{
    public void ReadFile(string filePath)
    {
        StreamReader reader = null;
        try
        {
            reader = new StreamReader(filePath);
            Console.WriteLine(reader.ReadToEnd());
        }
        catch (FileNotFoundException ex)
        {
            Console.WriteLine("File not found: " + ex.Message);
        }
        catch (IOException ex)
        {
            Console.WriteLine("Error reading file: " + ex.Message);
        }
        finally
        {
            if (reader != null)
            {
                reader.Close();
                Console.WriteLine("File closed.");
            }
        }
    }
}

এখানে, try ব্লকে ফাইল পড়ার কোড রয়েছে। যদি ফাইল না পাওয়া যায়, তবে FileNotFoundException ক্যাচ করে বার্তা দেখানো হয়। যদি অন্য কোনো ইনপুট/আউটপুট ত্রুটি ঘটে, তবে IOException ক্যাচ হয়। অবশেষে, finally ব্লকে ফাইল ক্লোজ করার কোড দেওয়া আছে যাতে কোনো অবস্থায় ফাইল খোলা না থাকে।

সংক্ষেপে

এক্সেপশন হ্যান্ডলিং প্রোগ্রামের ত্রুটি হ্যান্ডল করার একটি গুরুত্বপূর্ণ প্রক্রিয়া। এটি ত্রুটিগুলো শনাক্ত করতে, ব্যবস্থাপনা করতে এবং নির্দিষ্ট বার্তা দেখাতে সাহায্য করে। এর ফলে প্রোগ্রাম ক্র্যাশ না করে সঠিকভাবে কাজ করতে পারে এবং ব্যবহারকারীর জন্য একটি ভালো অভিজ্ঞতা প্রদান করতে পারে।

Content added By

সি# এ try, catch, এবং finally ব্লক ব্যবহার করে এক্সেপশন হ্যান্ডলিং প্রক্রিয়াটি আরও বিশদে বুঝিয়ে দেওয়া হলো। এটি প্রোগ্রাম চালানোর সময় যেকোনো ত্রুটি বা অপ্রত্যাশিত ঘটনার সাথে সঠিকভাবে মোকাবিলা করতে সাহায্য করে। এই ব্লকগুলো ব্যবহারের মাধ্যমে প্রোগ্রামের ক্র্যাশ হওয়া থেকে রক্ষা পেতে পারি এবং ব্যবহারকারীদের স্পষ্ট ও সহায়ক বার্তা দেখাতে পারি।

try ব্লক

try ব্লক এমন কোড ধারণ করে যেটি এক্সেপশন ঘটাতে পারে। আপনি যেকোনো ধরনের সন্দেহজনক কোড try ব্লকের মধ্যে রাখেন, যাতে সেই কোড থেকে এক্সেপশন ঘটলে এটি catch ব্লকে নিয়ে যায়। যদি try ব্লকের কোড কোনো এক্সেপশন তৈরি না করে, তাহলে catch ব্লক এড়িয়ে যায় এবং সরাসরি finally ব্লকে চলে যায়।

উদাহরণস্বরূপ:

try
{
    int number = 10;
    int result = number / 0; // এখানে Division by zero exception ঘটবে
}

উপরের উদাহরণে, try ব্লকের কোডে একটি সংখ্যা শূন্য দিয়ে ভাগ করার চেষ্টা করা হয়েছে, যা একটি DivideByZeroException সৃষ্টি করে।

catch ব্লক

catch ব্লক ত্রুটি হ্যান্ডল করে এবং এটি এক বা একাধিক catch ব্লক ব্যবহার করে নির্দিষ্ট এক্সেপশন ধরতে পারে। প্রতিটি catch ব্লক নির্দিষ্ট ধরনের এক্সেপশন ধরার জন্য ব্যবহার করা হয়। নির্দিষ্ট প্রকারের এক্সেপশন আগে এবং সাধারণ (Generic) এক্সেপশন পরে রাখতে হয়, কারণ সি# প্রথম পাওয়া catch ব্লকেই চলে যাবে।

উদাহরণ

try
{
    int[] numbers = { 1, 2, 3 };
    Console.WriteLine(numbers[5]); // Array index out of bounds exception
}
catch (IndexOutOfRangeException ex)
{
    Console.WriteLine("Error: Array index is out of bounds. " + ex.Message);
}
catch (DivideByZeroException ex)
{
    Console.WriteLine("Error: Division by zero occurred. " + ex.Message);
}
catch (Exception ex)
{
    Console.WriteLine("An unexpected error occurred: " + ex.Message);
}

ব্যাখ্যা

  • প্রথম catch ব্লক IndexOutOfRangeException ধরার জন্য। এটি অ্যারে ইনডেক্স আউট অফ বাউন্ড এক্সেপশন হ্যান্ডল করে।
  • দ্বিতীয় catch ব্লকটি DivideByZeroException ধরার জন্য।
  • তৃতীয় catch ব্লকটি জেনেরিক Exception ধরার জন্য, যা অন্যান্য যেকোনো এক্সেপশন ধরতে সক্ষম।

প্রতিটি catch ব্লক:

  • নির্দিষ্ট এক্সেপশন ধরলে কোডের বিশদ ত্রুটি বার্তা দেখানো যায়। উদাহরণস্বরূপ, ex.Message এক্সেপশনের বিশদ বার্তা প্রদান করে।
  • আপনি চাইলে catch ব্লকে লগ ফাইল বা ডাটাবেজে ত্রুটি বার্তা সংরক্ষণ করতে পারেন।

finally ব্লক

finally ব্লক try এবং catch ব্লকের পর সর্বদা চালানো হয়, এক্সেপশন ঘটুক বা না ঘটুক। সাধারণত, এটি রিসোর্স রিলিজ (যেমন, ডেটাবেস কানেকশন বা ফাইল হ্যান্ডেল) নিশ্চিত করার জন্য ব্যবহৃত হয়। এটি খুবই গুরুত্বপূর্ণ, কারণ এর মাধ্যমে কোডের নির্ভরযোগ্যতা এবং স্থিতিশীলতা বজায় রাখা সম্ভব হয়।

উদাহরণ

try
{
    // এখানে কিছু কোড লেখা হবে
}
catch (Exception ex)
{
    Console.WriteLine("An error occurred: " + ex.Message);
}
finally
{
    Console.WriteLine("The 'finally' block is always executed.");
}

এখানে finally ব্লক সব সময় চালানো হবে। উদাহরণস্বরূপ, ডেটাবেস কানেকশন বন্ধ করা বা ফাইল বন্ধ করা নিশ্চিত করতে পারেন যাতে তা লিক না হয়।

throw কিওয়ার্ড

throw কিওয়ার্ড দিয়ে একটি নির্দিষ্ট এক্সেপশন তৈরি বা কাস্টম এক্সেপশন ছাড়ার কাজ করা যায়। এটি এমন কোনো পরিস্থিতিতে ব্যবহার করা হয় যেখানে আপনার নিজের কাস্টম এক্সেপশন ছাড়ার প্রয়োজন হয়।

উদাহরণ

public void ValidateAge(int age)
{
    if (age < 18)
    {
        throw new ArgumentException("Age must be 18 or older.");
    }
}

এখানে, ValidateAge মেথডে যদি age ১৮ এর কম হয়, তাহলে এটি ArgumentException ছাড়বে। এই ধরনের কাস্টম এক্সেপশন তৈরি করার মাধ্যমে আপনি আপনার প্রোগ্রামের জন্য নির্দিষ্ট চেকিং এবং নিয়ন্ত্রণ তৈরি করতে পারেন।

পূর্ণ উদাহরণ

using System;

public class Program
{
    public static void Main()
    {
        try
        {
            Console.WriteLine("Enter a number:");
            int number = int.Parse(Console.ReadLine());

            if (number < 0)
            {
                throw new ArgumentOutOfRangeException("Number cannot be negative.");
            }

            Console.WriteLine("Result: " + (100 / number));
        }
        catch (DivideByZeroException ex)
        {
            Console.WriteLine("Error: Division by zero is not allowed. " + ex.Message);
        }
        catch (ArgumentOutOfRangeException ex)
        {
            Console.WriteLine("Error: " + ex.Message);
        }
        catch (FormatException ex)
        {
            Console.WriteLine("Error: Input is not a valid number. " + ex.Message);
        }
        catch (Exception ex)
        {
            Console.WriteLine("An unexpected error occurred: " + ex.Message);
        }
        finally
        {
            Console.WriteLine("Thank you for using the program!");
        }
    }
}

ব্যাখ্যা

  • ব্যবহারকারী সংখ্যা ইনপুট করে। যদি সংখ্যা শূন্য হয় তবে DivideByZeroException ঘটবে এবং catch ব্লক হ্যান্ডল করবে।
  • যদি ব্যবহারকারী একটি নেতিবাচক সংখ্যা ইনপুট করে, তাহলে ArgumentOutOfRangeException থ্রো হবে এবং catch ব্লকে হ্যান্ডল হবে।
  • ইনপুটে যদি সংখ্যা ছাড়া অন্য কিছু দেওয়া হয়, তবে FormatException ধরা হবে।
  • finally ব্লক সব সময় "Thank you for using the program!" দেখাবে, ত্রুটি ঘটুক বা না ঘটুক।

সংক্ষেপে

  • try: যেখানে এক্সেপশন ঘটতে পারে এমন কোড রাখা হয়।
  • catch: নির্দিষ্ট এবং সাধারণ এক্সেপশন হ্যান্ডল করতে ব্যবহৃত হয়।
  • finally: সবশেষে চালানো হয়, এক্সেপশন ঘটুক বা না ঘটুক।
  • throw: কাস্টম বা নির্দিষ্ট এক্সেপশন তৈরি করতে ব্যবহৃত হয়।

এভাবে try, catch, এবং finally ব্লক ব্যবহার করে সি# প্রোগ্রামে ত্রুটি হ্যান্ডলিং করতে পারি, যা কোডের স্থিতিশীলতা ও নির্ভরযোগ্যতা বৃদ্ধি করে।

Content added By

কাস্টম এক্সেপশন তৈরি

সি# এ কাস্টম এক্সেপশন তৈরি করার জন্য, আপনি একটি নতুন ক্লাস তৈরি করবেন, যা Exception ক্লাস থেকে ইনহেরিট করবে। কাস্টম এক্সেপশন ব্যবহার করে প্রোগ্রামে নির্দিষ্ট ধরনের ত্রুটি বা অবস্থার জন্য বিশেষ বার্তা ও লজিক যোগ করা যায়, যা সাধারণ এক্সেপশন দিয়ে বোঝানো কঠিন।

কাস্টম এক্সেপশন তৈরি করার ধাপসমূহ

ধাপ ১: একটি নতুন ক্লাস তৈরি করা

প্রথমে, একটি নতুন ক্লাস তৈরি করুন, যা Exception ক্লাস থেকে ইনহেরিট করবে।

ধাপ ২: কনস্ট্রাক্টর যোগ করা

Exception ক্লাসে থাকা কনস্ট্রাক্টরগুলো কাস্টম এক্সেপশন ক্লাসে ব্যবহার করতে পারেন, যাতে কাস্টম বার্তা বা ইনফরমেশন পাঠানো যায়।

উদাহরণ

নিচে একটি কাস্টম এক্সেপশন ক্লাসের উদাহরণ দেওয়া হলো যেখানে InvalidAgeException নামের কাস্টম এক্সেপশন তৈরি করা হয়েছে।

using System;

public class InvalidAgeException : Exception
{
    // ডিফল্ট কনস্ট্রাক্টর
    public InvalidAgeException() : base("Invalid age. Age must be 18 or older.")
    {
    }

    // কাস্টম বার্তার জন্য কনস্ট্রাক্টর
    public InvalidAgeException(string message) : base(message)
    {
    }

    // কনস্ট্রাক্টর যা মেসেজ ও ইননার এক্সেপশন নেয়
    public InvalidAgeException(string message, Exception innerException) : base(message, innerException)
    {
    }
}

এই উদাহরণে InvalidAgeException নামে একটি কাস্টম এক্সেপশন তৈরি করা হয়েছে, যা বয়স যাচাইয়ের সময় ব্যবহৃত হবে।

কাস্টম এক্সেপশন ব্যবহার করা

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

public class AgeValidator
{
    public void ValidateAge(int age)
    {
        if (age < 18)
        {
            throw new InvalidAgeException("Age must be 18 or older to register.");
        }
        else
        {
            Console.WriteLine("Age is valid for registration.");
        }
    }
}

কাস্টম এক্সেপশন হ্যান্ডল করা

এখন আমরা try-catch ব্লকের মাধ্যমে কাস্টম এক্সেপশন হ্যান্ডল করব।

public class Program
{
    public static void Main()
    {
        AgeValidator validator = new AgeValidator();

        try
        {
            validator.ValidateAge(15); // এখানে বয়স ১৫ দেওয়া হয়েছে, যা `InvalidAgeException` ছোড়ে।
        }
        catch (InvalidAgeException ex)
        {
            Console.WriteLine("Custom Exception Caught: " + ex.Message);
        }
        catch (Exception ex)
        {
            Console.WriteLine("An error occurred: " + ex.Message);
        }
    }
}

ব্যাখ্যা

১. InvalidAgeException ক্লাস: এই ক্লাসটি Exception ক্লাস থেকে ইনহেরিট করে, এবং আমরা এতে কাস্টম বার্তা প্রদান করার জন্য কয়েকটি কনস্ট্রাক্টর তৈরি করেছি। ২. ValidateAge মেথড: এখানে বয়স যাচাই করা হয়েছে, এবং যদি বয়স ১৮-এর কম হয়, তবে InvalidAgeException ছোড়া হবে। ৩. try-catch ব্লক: InvalidAgeException ক্যাচ করে এবং প্রোগ্রামটি ক্র্যাশ না করেই একটি বার্তা দেখায়।

সংক্ষেপে

কাস্টম এক্সেপশন তৈরি করার মাধ্যমে প্রোগ্রামে নির্দিষ্ট ধরনের ত্রুটি চিহ্নিত এবং হ্যান্ডল করা সহজ হয়। এটি ত্রুটি বার্তাকে আরও অর্থপূর্ণ করে এবং ডিবাগিং সহজতর করে।

Content added By

সি# এ throw কীওয়ার্ড মূলত একটি এক্সেপশন তৈরি বা পুনরায় ছাড়ার জন্য ব্যবহৃত হয়। এটি বিশেষ করে এমন পরিস্থিতিতে সহায়ক যেখানে আপনি চান, নির্দিষ্ট শর্তপূরণ না হলে কোড একটি কাস্টম এক্সেপশন ছুঁড়ে দেবে বা কোনো নির্দিষ্ট ত্রুটি প্রদর্শন করবে। throw কীওয়ার্ড প্রোগ্রামের এক্সেপশন হ্যান্ডলিং কাঠামোকে আরও কার্যকরী করে তোলে।

throw কীওয়ার্ড ব্যবহার

১. একটি নতুন এক্সেপশন তৈরি করা
যখন আপনি নির্দিষ্ট শর্তে কোডকে একটি কাস্টম ত্রুটি (Exception) ছুঁড়ে দিতে চান, তখন throw কীওয়ার্ড ব্যবহার করতে পারেন।

উদাহরণ

public void ValidateAge(int age)
{
    if (age < 18)
    {
        throw new ArgumentException("Age must be 18 or older.");
    }
}

এখানে, ValidateAge মেথডে যদি age ১৮-এর কম হয়, তাহলে throw কীওয়ার্ড ArgumentException ছুঁড়ে দেবে। এর ফলে প্রোগ্রাম এই ত্রুটিকে হ্যান্ডল করতে পারবে বা ব্যবহারকারীকে একটি নির্দিষ্ট বার্তা দেখাতে পারবে।

২. এক্সেপশন পুনরায় ছাড়ার জন্য (throw কেবল)
কখনও কখনও catch ব্লকে একটি এক্সেপশন ধরার পরেও সেটিকে পুনরায় ছাড়ার প্রয়োজন হতে পারে, যাতে উপরের স্তরের (higher level) কোড সেই এক্সেপশন হ্যান্ডল করতে পারে। এই ক্ষেত্রে শুধুমাত্র throw ব্যবহার করা হয়।

উদাহরণ

try
{
    int result = Divide(10, 0);
}
catch (DivideByZeroException ex)
{
    Console.WriteLine("Handling in catch block: " + ex.Message);
    throw; // এখানে পুনরায় এক্সেপশন ছাড়া হলো
}

public int Divide(int a, int b)
{
    if (b == 0)
    {
        throw new DivideByZeroException("Cannot divide by zero.");
    }
    return a / b;
}

এখানে Divide মেথড DivideByZeroException ছাড়ছে যদি বিভাজক 0 হয়। catch ব্লক সেটি প্রথমে হ্যান্ডল করে এবং তারপর throw দিয়ে আবার ছুঁড়ে দেয়, যা উপরের লেভেল বা কলিং মেথডে হ্যান্ডল করতে পারে।

৩. কাস্টম এক্সেপশন তৈরি করা
কখনও কখনও সাধারণ এক্সেপশন যথেষ্ট নয় এবং আপনাকে একটি কাস্টম এক্সেপশন ক্লাস তৈরি করতে হতে পারে।

উদাহরণ

public class InvalidAgeException : Exception
{
    public InvalidAgeException(string message) : base(message) { }
}

public void CheckAge(int age)
{
    if (age < 18)
    {
        throw new InvalidAgeException("Custom Exception: Age must be 18 or older.");
    }
}

এখানে একটি কাস্টম InvalidAgeException তৈরি করা হয়েছে, যা কেবলমাত্র ১৮-এর কম বয়স হলে ছাড়া হবে।

সংক্ষেপে

  • নতুন এক্সেপশন তৈরি: throw new ExceptionType("Message");
  • পুনরায় ছাড়া: throw;
  • কাস্টম এক্সেপশন: নিজের এক্সেপশন ক্লাস তৈরি করে throw এর মাধ্যমে নির্দিষ্ট পরিস্থিতিতে ছাড়া।

এইভাবে throw কীওয়ার্ড ব্যবহার করে সি# এ এক্সেপশন হ্যান্ডলিং প্রক্রিয়াকে আরও কার্যকরী ও নিয়ন্ত্রণযোগ্য করা যায়।

Content added By

আরও দেখুন...

Promotion