try, catch, rescue, and after in Elixir
Elixir তে error handling এবং exception management করার জন্য try, catch, rescue, এবং after ব্যবহৃত হয়। এগুলি exception handling প্রক্রিয়াকে আরও পরিষ্কার, সহজ, এবং কার্যকরী করে তোলে। চলুন, এগুলি কীভাবে কাজ করে এবং কিভাবে ব্যবহার করা যায় তা দেখে নেব।
1. try - Try Block
try ব্লকটি ব্যবহৃত হয় যেখানে আপনি কোডের একটি অংশ পরীক্ষা করতে চান এবং সেখানে কোন ত্রুটি ঘটলে সেটা catch বা rescue দ্বারা ধরতে চান। এটি exception handling প্রক্রিয়ায় প্রথম স্তর হিসেবে কাজ করে। আপনি try ব্লকের মধ্যে এমন কোড রাখতে পারেন যা ত্রুটি (error) সৃষ্টি করতে পারে।
Syntax:
try do
# Some code that may raise an exception
end2. rescue - Handling Exceptions
rescue ব্লকটি try এর সাথে ব্যবহার করা হয় এবং এটি ত্রুটি বা এক্সসেপশন (exception) হ্যান্ডেল করার জন্য ব্যবহৃত হয়। যখন try ব্লকের মধ্যে কোন ত্রুটি ঘটে, তখন সেই ত্রুটিটি rescue ব্লকে ধরা হয় এবং আপনি সেখানে ত্রুটির ধরন বা ত্রুটির মেসেজ ব্যবহার করে হ্যান্ডল করতে পারেন।
Syntax:
try do
# Code that might raise an exception
rescue
exception -> IO.puts("An error occurred: #{exception}")
endউদাহরণ:
try do
1 / 0 # Division by zero will cause an error
rescue
ArithmeticError -> IO.puts("Cannot divide by zero!")
endএখানে, 1 / 0 কোডটি ArithmeticError তৈরি করবে, এবং সেই ত্রুটিটি rescue ব্লক দ্বারা ধরা হবে, যেখানে "Cannot divide by zero!" প্রিন্ট হবে।
3. catch - Catching Throwed Values
catch ব্লকটি ব্যবহৃত হয় throw দ্বারা উত্পন্ন throw values ধরতে। Elixir তে throw ব্যবহার করা হয় কিছু নির্দিষ্ট মান বা অবস্থা "throw" করার জন্য, এবং catch সেই মান গুলো গ্রহণ করে। এটি সাধারণত ব্যবহার হয় কিছু বিশেষ অবস্থার জন্য, যেখানে ত্রুটি ফেলে ফেরানো হয়।
Syntax:
try do
throw(:error) # Throwing an error
catch
:error -> IO.puts("Caught an error")
endউদাহরণ:
try do
throw(:some_value)
catch
:some_value -> IO.puts("Caught the value!")
endএখানে, throw(:some_value) কোটে একটি throw করা হচ্ছে এবং catch ব্লকে সেটি some_value হিসেবে ধরা হচ্ছে।
4. after - Always Executing Code
after ব্লকটি ব্যবহার করা হয় এমন কোড লেখার জন্য যা সবসময় try ব্লকের পর কার্যকর হবে, কোন ত্রুটি ঘটুক বা না ঘটুক। এটি ব্যবহারকারীর জন্য একটি উপকারী বৈশিষ্ট্য, যাতে কোড ব্লক শেষে কিছু টাস্ক, যেমন ক্লিনআপ বা রিসোর্স রিলিজ, করা যায়।
Syntax:
try do
# Some code that may raise an exception
after
# Code that will always execute
IO.puts("This will always execute!")
endউদাহরণ:
try do
IO.puts("This will run")
1 / 0 # This will raise an exception
rescue
ArithmeticError -> IO.puts("Caught error!")
after
IO.puts("This will always run, regardless of an error")
endএখানে:
IO.puts("This will run")প্রথমে প্রিন্ট হবে।1 / 0এর ফলে একটি ত্রুটি ঘটবে এবংrescueব্লক সক্রিয় হবে।- তারপর
afterব্লকের কোড, "This will always run, regardless of an error" সর্বদা প্রিন্ট হবে, কোনো ত্রুটি ঘটুক বা না ঘটুক।
অন্তর্ভুক্ত উদাহরণ:
এখন, পুরো প্রক্রিয়াটি একসাথে ব্যবহার করে দেখি।
try do
IO.puts("Attempting to divide")
1 / 0 # Will cause an ArithmeticError
rescue
ArithmeticError -> IO.puts("Cannot divide by zero!")
catch
:error -> IO.puts("Caught a thrown error!")
after
IO.puts("This will always be executed, regardless of success or failure.")
endআউটপুট:
Attempting to divide
Cannot divide by zero!
This will always be executed, regardless of success or failure.এখানে:
- প্রথমে কোডটি "Attempting to divide" প্রিন্ট করবে।
- তারপর
1 / 0একটিArithmeticErrorতৈরি করবে এবংrescueব্লকটি চলে যাবে। afterব্লকটি সর্বদা চালিত হবে, "This will always be executed..." বার্তা দেখানোর মাধ্যমে।
সারসংক্ষেপ
try: ব্যবহার হয় কোডের একটি অংশ পরীক্ষা করার জন্য এবং তার মধ্যে ত্রুটি বা এক্সসেপশন ঘটলে সেটিcatchবাrescueব্লক দ্বারা ধরা হয়।rescue: এটি exception বা ত্রুটি ধরার জন্য ব্যবহৃত হয় এবং কোডে ত্রুটি ঘটলে সেই ত্রুটির জন্য নির্দিষ্ট কর্মপদ্ধতি নেওয়া হয়।catch: throw করা মান বা ত্রুটিগুলি ধরা হয়, যাtryব্লকের মধ্যে throw করা হয়।after: এটি কোডের সেই অংশ যা সর্বদা কার্যকর হবে, তা কোনো ত্রুটি ঘটুক বা না ঘটুক।
Elixir তে এই চারটি বৈশিষ্ট্য একটি শক্তিশালী ত্রুটি এবং এক্সসেপশন হ্যান্ডলিং ব্যবস্থা প্রদান করে, যা প্রোগ্রামটির স্থিতিস্থাপকতা (fault tolerance) বাড়ায় এবং কোডের কার্যকারিতা উন্নত করে।
Read more