Custom Exceptions এবং তাদের প্রয়োগ

Error Handling এবং Debugging (এরর হ্যান্ডলিং এবং ডিবাগিং) - এরল্যাং (Erlang) - Computer Programming

281

Erlang-এ Custom Exceptions এবং তাদের প্রয়োগ

Erlang-এ exceptions (ত্রুটির অবস্থা) ব্যবহৃত হয় সিস্টেমের বিভিন্ন ব্যতিক্রমী পরিস্থিতি মোকাবেলা করতে। তবে Erlang-এ সাধারণভাবে exception handling অনেকটা ভিন্ন ধরনের, কারণ এটি process isolation এবং message passing মডেল ব্যবহার করে, যেখানে এক প্রক্রিয়ার ত্রুটি অন্য প্রক্রিয়াকে প্রভাবিত করে না। তবে, কখনও কখনও আপনি কাস্টম exceptions তৈরি করতে চাইতে পারেন, যাতে আপনার কোডের মধ্যে নির্দিষ্ট ত্রুটির পরিস্থিতি সঠিকভাবে হ্যান্ডল করা যায়।

Erlang-এ Custom Exceptions তৈরি করার জন্য আমরা exit/1, throw/1, বা error/1 ফাংশনগুলি ব্যবহার করে exceptions তৈরি করতে পারি এবং সেগুলির জন্য প্রক্রিয়াগুলিতে catch অথবা try-catch ব্লক ব্যবহার করা হয়।

1. Exception Handling Overview

Erlang-এ সাধারণত ৩ ধরনের ত্রুটি হ্যান্ডলিং রয়েছে:

  1. exit/1: এটি একটি প্রক্রিয়া ব্যর্থ হলে সিস্টেমে ত্রুটি সংকেত পাঠায়। এটি সাধারণত process failure বা crash এর জন্য ব্যবহৃত হয়।
  2. throw/1: এটি একটি exception নির্দেশ করে এবং সিস্টেমে exception রিটার্ন করার জন্য ব্যবহৃত হয়।
  3. error/1: এটি একটি প্রক্রিয়া বা কোড ব্লকের ভুলকে চিহ্নিত করে এবং তাকে exception হিসেবে পাঠায়।

2. Custom Exceptions (কাস্টম এক্সসেপশন)

কাস্টম এক্সসেপশন তৈরি করার জন্য আপনি সাধারণত একটি নতুন error বা throw সিগন্যাল তৈরি করতে পারেন যা সিস্টেমে বিশেষ ত্রুটি প্রতিনিধিত্ব করে। সাধারণভাবে কাস্টম এক্সসেপশনগুলো একটি নির্দিষ্ট type এবং message ধারণ করে থাকে, যা ত্রুটির কারণ এবং পরিস্থিতি বুঝতে সাহায্য করে।

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

-module(custom_exception).
-export([my_function/1]).

%% Custom error definition
-define(MY_ERROR, {my_error, "This is a custom error!"}).

%% Function that raises a custom exception
my_function(Arg) ->
    case Arg of
        1 -> io:format("Success!~n");
        _ -> exit(?MY_ERROR)  %% Raising a custom error
    end.

এখানে, my_function/1 ফাংশনে যদি ইনপুট 1 না হয়, তবে একটি কাস্টম ত্রুটি {my_error, "This is a custom error!"} exit ফাংশন দ্বারা উত্থাপন করা হয়।


3. Exception Handling with try-catch

Erlang-এ try-catch ব্লক ব্যবহার করে কাস্টম এক্সসেপশনগুলি হ্যান্ডল করা যায়। try-catch ব্লকটি exit/1, throw/1, এবং error/1 এর সকল ধরনের ত্রুটির ক্ষেত্রে কাজ করে।

try-catch উদাহরণ

-module(custom_exception).
-export([handle_error/1, my_function/1]).

%% Function to simulate custom exception
my_function(Arg) ->
    case Arg of
        1 -> io:format("Success!~n");
        _ -> exit({my_error, "This is a custom error!"}) %% Raising a custom error
    end.

%% Handling the custom exception with try-catch
handle_error(Arg) ->
    try
        my_function(Arg)
    catch
        exit:{my_error, Msg} -> io:format("Caught custom error: ~s~n", [Msg]);
        _:_ -> io:format("Unknown error occurred.~n")
    end.

টেস্টিং:

1> c(custom_exception).
{ok,custom_exception}
2> custom_exception:handle_error(1).
Success!
ok
3> custom_exception:handle_error(2).
Caught custom error: This is a custom error!
ok

এখানে:

  • my_function/1 ফাংশনটি ইনপুট 2 দিলে একটি কাস্টম exit সিগন্যাল তৈরি করে।
  • handle_error/1 ফাংশনটি try-catch ব্লক ব্যবহার করে কাস্টম এক্সসেপশনটি ধরেছে এবং সংশ্লিষ্ট ত্রুটির বার্তা প্রদর্শন করেছে।

4. Custom Exception with throw/1

Erlang-এ throw/1 ব্যবহার করে আপনি একটি exception তৈরি করতে পারেন, এবং এটি একটি কাস্টম ত্রুটি পরিস্থিতি প্রতিনিধিত্ব করে। যখন কোনো ভুল বা অপ্রত্যাশিত ঘটনা ঘটে, তখন আপনি throw ব্যবহার করে তা উত্থাপন করতে পারেন।

উদাহরণ:

-module(custom_throw).
-export([my_function/1]).

%% Function that throws a custom exception
my_function(Arg) ->
    case Arg of
        1 -> io:format("Success!~n");
        _ -> throw({my_custom_error, "Invalid input"})  %% Throwing custom error
    end.

এখানে, my_function/1 ফাংশনটি ইনপুট 1 দিলে সফলভাবে আউটপুট দিবে, কিন্তু অন্য যেকোনো ইনপুটে একটি কাস্টম throw ত্রুটি ঘটাবে।

Exception Handling with catch:

-module(custom_throw).
-export([handle_error/1, my_function/1]).

handle_error(Arg) ->
    try
        my_function(Arg)
    catch
        throw:{my_custom_error, Msg} -> io:format("Caught custom throw: ~s~n", [Msg]);
        _:_ -> io:format("Unknown error occurred.~n")
    end.

টেস্টিং:

1> c(custom_throw).
{ok,custom_throw}
2> custom_throw:handle_error(1).
Success!
ok
3> custom_throw:handle_error(2).
Caught custom throw: Invalid input
ok

এখানে:

  • my_function/1 ফাংশনটি ইনপুট 2 দিলে একটি কাস্টম throw তৈরি করবে।
  • handle_error/1 ফাংশনটি catch ব্লক ব্যবহার করে সেই কাস্টম এক্সসেপশনটি হ্যান্ডল করবে এবং সংশ্লিষ্ট বার্তা প্রদর্শন করবে।

5. Custom Errors with error/1

Erlang-এ error/1 ফাংশনটি সাধারণত কোনো ত্রুটি ঘটলে সেগুলিকে প্রকাশ করতে ব্যবহৃত হয়। এর মাধ্যমে আপনি কাস্টম ত্রুটি তৈরি করতে পারেন।

উদাহরণ:

-module(custom_error).
-export([my_function/1]).

%% Function that generates a custom error
my_function(Arg) ->
    case Arg of
        1 -> io:format("Success!~n");
        _ -> error({my_custom_error, "Invalid input"})  %% Raising a custom error
    end.

এখানে, my_function/1 ফাংশনটি ইনপুট 1 দিলে সাফল্য দেখাবে, কিন্তু অন্য যেকোনো ইনপুটে একটি কাস্টম error তৈরি করবে।

Exception Handling with catch:

-module(custom_error).
-export([handle_error/1, my_function/1]).

handle_error(Arg) ->
    try
        my_function(Arg)
    catch
        error:{my_custom_error, Msg} -> io:format("Caught custom error: ~s~n", [Msg]);
        _:_ -> io:format("Unknown error occurred.~n")
    end.

টেস্টিং:

1> c(custom_error).
{ok,custom_error}
2> custom_error:handle_error(1).
Success!
ok
3> custom_error:handle_error(2).
Caught custom error: Invalid input
ok

এখানে:

  • my_function/1 ফাংশনটি ইনপুট 2 দিলে একটি কাস্টম error সিগন্যাল তৈরি করে।
  • handle_error/1 ফাংশনটি catch ব্লক ব্যবহার করে সেই কাস্টম এক্সসেপশনটি হ্যান্ডল করে এবং সংশ্লিষ্ট বার্তা প্রদর্শন করে।

উপসংহার

  • Custom Exceptions: Erlang-এ কাস্টম এক্সসেপশন তৈরি করা অনেক সহজ। আপনি exit/1, throw/1, অথবা error/1 ফাংশন ব্যবহার করে নিজস্ব ত্রুটি তৈরি করতে পারেন।
  • Exception Handling: try-catch ব্লক বা catch ব্যবহারের মাধ্যমে আপনি কাস্টম এক্সসেপশন হ্যান্ডল করতে পারেন এবং নির্দিষ্ট ত্রুটির বার্তা বা আচরণ নির্ধারণ করতে পারেন।
  • Fault Tolerance: Erlang-এর শক্তিশালী process isolation এবং message passing মডেল এক্সসেপশনগুলোকে সহজভাবে হ্যান্ডল করতে সহায়তা করে, যা সিস্টেমের fault tolerance নিশ্চিত করে।

Erlang-এ কাস্টম এক্সস

েপশন তৈরি এবং ব্যবস্থাপনা করার মাধ্যমে, আপনি আপনার সিস্টেমের ত্রুটির পরিস্থিতি আরও কার্যকরভাবে মোকাবেলা করতে পারেন।

Content added By
Promotion

Are you sure to start over?

Loading...