সি# এ 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

আরও দেখুন...

Promotion