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.Errorexception রেইজ (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/12. 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_valuecatch ব্যবহার:
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/13. 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/2exception রেইজ করার জন্য ব্যবহৃত হয়।- Exception Handling Elixir তে
try,catch, এবংrescueব্লক ব্যবহার করে করা হয়, যা ত্রুটির পরিস্থিতি কনট্রোল করে এবং অ্যাপ্লিকেশনকে স্টেবল রাখে।
Fault Tolerance নিশ্চিত করতে Elixir তে custom exceptions এবং error handling এর মাধ্যমে আপনি আপনার সিস্টেমকে আরও নির্ভরযোগ্য এবং স্থিতিস্থাপক (self-healing) করতে পারেন।
Read more