Custom Exceptions তৈরি এবং থ্রো করা

Error Handling (এরর হ্যান্ডলিং) - এলিক্সির (Elixir) - Computer Programming

297

Custom Exceptions তৈরি এবং থ্রো করা

Elixir তে exceptions বা ত্রুটি ব্যবস্থাপনা অত্যন্ত গুরুত্বপূর্ণ একটি কনসেপ্ট, বিশেষত যখন আপনার অ্যাপ্লিকেশনটির কার্যকারিতা এবং স্থিতিস্থাপকতা বজায় রাখতে হয়। Elixir তে আপনি custom exceptions তৈরি করতে পারেন, যা আপনার অ্যাপ্লিকেশনকে আরও নির্দিষ্ট এবং পেশাদারী ত্রুটি পরিচালনা করতে সাহায্য করে। এই custom exceptions গুলি সাধারণত throw বা raise এর মাধ্যমে তৈরি এবং থ্রো করা হয়।

1. Custom Exception তৈরি করা

Elixir তে custom exceptions তৈরি করতে, আপনি সাধারণত defexception ম্যাক্রো ব্যবহার করেন। এটি একটি নতুন exception তৈরি করতে সাহায্য করে, যা একটি নির্দিষ্ট ত্রুটির জন্য কাস্টম মেসেজ বা স্টেট প্রদান করতে পারে।

Custom Exception তৈরি করার উদাহরণ:

defmodule MyApp.Error do
  defexception message: "An error occurred"
end

এখানে, MyApp.Error একটি কাস্টম exception তৈরি করছে, যার ডিফল্ট মেসেজ "An error occurred"

  • defexception ম্যাক্রোটি একটি নতুন exception মডিউল তৈরি করতে ব্যবহৃত হয়।
  • message একটি ফিল্ড হিসেবে সেট করা হয়েছে, যেটি exception এর মধ্যে ধারণ করা মেসেজ।

Custom Exception ব্যবহারের উদাহরণ:

defmodule MyApp do
  def process_data(:ok) do
    IO.puts "Data processed successfully!"
  end

  def process_data(:error) do
    raise MyApp.Error, message: "Custom error: Invalid data"
  end
end

এখানে, MyApp.process_data/1 ফাংশনটি দুটি প্যারামিটার নেবে:

  • যদি :ok প্যারামিটার পাঠানো হয়, তাহলে একটি সফল বার্তা প্রিন্ট হবে।
  • যদি :error পাঠানো হয়, তবে MyApp.Error exception রেইজ (throw) করা হবে এবং কাস্টম মেসেজ "Custom error: Invalid data" প্রদর্শিত হবে।

ব্যবহার:

iex> MyApp.process_data(:ok)
Data processed successfully!

iex> MyApp.process_data(:error)
** (MyApp.Error) Custom error: Invalid data
    (elixir) lib/kernel/exit.ex:62: Exit.exception/1

2. Exception Throwing এবং Raising

Elixir তে exceptions থ্রো বা রেইজ করতে দুটি প্রধান ফাংশন রয়েছে: throw/1 এবং **raise/1**।

  • throw/1: সাধারণত অবিলম্বে একটি ফাংশন বা প্রসেস থেকে বের হয়ে যাওয়ার জন্য ব্যবহৃত হয়।
  • raise/2: এটি একটি exception রেইজ করে এবং প্রোগ্রামটি থামিয়ে দেয়, তবে এটি সাধারণত কাস্টম exceptions বা built-in exceptions দিয়ে ব্যবহৃত হয়।

throw ব্যবহার:

throw সাধারণত একটি কন্ট্রোল ফ্লো বের করার জন্য ব্যবহার করা হয়, বিশেষত যখন আপনি কোনো প্রক্রিয়া বা লুপ থেকে ত্রুটি সৃষ্টির পরে বের হয়ে যেতে চান।

defmodule MyApp do
  def check_value(x) do
    if x < 0 do
      throw :negative_value
    else
      IO.puts "Value is positive"
    end
  end
end

এখানে, যদি x একটি নেতিবাচক মান হয়, তবে throw ব্যবহার করে তা ত্রুটি হিসেবে থ্রো করা হবে। এর পরে, আপনি এটি একটি catch ব্লকে ধরতে পারেন।

ব্যবহার:

iex> MyApp.check_value(-5)
** :negative_value

catch ব্যবহার:

try do
  MyApp.check_value(-5)
catch
  :negative_value -> IO.puts "Caught a negative value!"
end

এখানে, throw এর মাধ্যমে প্রেরিত ত্রুটি একটি catch ব্লকে ধরে পরবর্তী ব্যবস্থা নেওয়া হচ্ছে।

raise ব্যবহার:

raise সাধারণত exception রেইজ করার জন্য ব্যবহৃত হয়। এটি exception তৈরি করে এবং এটি তখন থ্রো হয়ে যায়।

defmodule MyApp do
  def process_data(:ok) do
    IO.puts "Data processed successfully!"
  end

  def process_data(:error) do
    raise "An error occurred during processing!"
  end
end

এখানে raise ব্যবহার করে একটি সাধারণ exception তৈরি করা হয়েছে যা যখন :error প্রেরিত হয় তখন থ্রো হবে।

ব্যবহার:

iex> MyApp.process_data(:ok)
Data processed successfully!

iex> MyApp.process_data(:error)
** (RuntimeError) An error occurred during processing!
    (elixir) lib/kernel/exit.ex:62: Exit.exception/1

3. Exception Handling

Elixir তে exception গুলি try, catch, rescue ব্লক ব্যবহার করে handle করা যায়। try ব্লক একটি কোড ব্লক পরীক্ষা করে এবং যদি কোনো exception হয়, তা catch বা rescue দ্বারা ধরতে পারে।

rescue ব্যবহার:

rescue শুধুমাত্র error টাইপের exceptions ক্যাচ করতে ব্যবহৃত হয়।

defmodule MyApp do
  def risky_function do
    raise "Something went wrong"
  rescue
    exception in RuntimeError -> IO.puts "Caught an error: #{exception.message}"
  end
end

এখানে, risky_function তে একটি exception রেইজ করা হয়েছে এবং সেই exception কে rescue ব্লকে ধরা হয়েছে।

ব্যবহার:

iex> MyApp.risky_function
Caught an error: Something went wrong

সারসংক্ষেপ

  • Custom Exceptions তৈরি করার জন্য defexception ম্যাক্রো ব্যবহার করা হয়, যা আপনার প্রয়োজনীয় exception তৈরি করে।
  • throw/1 একটি সাধারণ প্রক্রিয়া থেকে বের হয়ে যাওয়ার জন্য ব্যবহার হয়, এবং raise/2 exception রেইজ করার জন্য ব্যবহৃত হয়।
  • Exception Handling Elixir তে try, catch, এবং rescue ব্লক ব্যবহার করে করা হয়, যা ত্রুটির পরিস্থিতি কনট্রোল করে এবং অ্যাপ্লিকেশনকে স্টেবল রাখে।

Fault Tolerance নিশ্চিত করতে Elixir তে custom exceptions এবং error handling এর মাধ্যমে আপনি আপনার সিস্টেমকে আরও নির্ভরযোগ্য এবং স্থিতিস্থাপক (self-healing) করতে পারেন।

Content added By
Promotion

Are you sure to start over?

Loading...