
"try" এবং "catch" শব্দগুলো বর্ণনা করে কী করতে হয় যখন একটি প্রোগ্রাম কোড বা ডেটা সমস্যা কারণে একটি এক্সেপশন সম্মুখীন হয়। এক্সেপশনগুলো একটি try ব্লক কোডে হ্যান্ডেল করা হয়। Catch ব্লকগুলো try ব্লক থেকে এক্সেপশন খুঁজে বের করতে এবং হ্যান্ডেল করতে ব্যবহৃত হয়। অনেক প্রোগ্রামিং ভাষা, যার মধ্যে পাইথন, সি++, এবং জাভাস্ক্রিপ্ট, try-catch স্টেটমেন্ট অন্তর্ভুক্ত করে।
এই আর্টিকেলে একটি উদাহরণ দিয়ে দেখানো হয়েছে try-catch স্টেটমেন্ট কী এবং সি প্রোগ্রামিং-এ সেটি কীভাবে বাস্তবায়ন করা যায়।
Try Catch স্টেটমেন্ট কী?
try স্টেটমেন্ট একটি স্টেটমেন্ট সংগ্রহ ডিফাইন করে যা এক্সেপশন জেনারেট করতে পারে। যখন একটি নির্দিষ্ট ধরনের এক্সেপশন ঘটে, catch ব্লক হলো সেটি পাঠানো হয়। কম্পাইলার হয় একটি এরর নোটিশ আউটপুট করবে বা এক্সেপশন কল স্ট্যাকে উপরে চলে যাবে যতক্ষণ না সেটি হ্যান্ডেল হয় যদি try/catch ব্লক এটি হ্যান্ডেল করতে ব্যর্থ হয়।
try-catch স্টেটমেন্টের সাধারণ সিনট্যাক্স নিচে দেওয়া হলো:
try {
/*
Insert some code that will probably generate errors
*/
}
catch {
/*
Write a code for handling the generated errors.
*/
}
সি-তে Try-Catch স্টেটমেন্ট কী?
সি এক্সেপশন হ্যান্ডলিং সাপোর্ট করে না এবং বিল্ট-ইন মেকানিজম নেই এটি করতে। কিন্তু, আপনি কিছুটা এটি সিমুলেট করতে পারেন setjmp এবং longjmp কল ব্যবহার করে। একবার স্ট্যাক ভিজিট হয়ে গেলে মেমরি রিলিজ করার কোনো উপায় ছাড়া, এক্সেপশন-হ্যান্ডলিং মেকানিজম অদক্ষ এবং অনিরাপদ, এবং সি-তে গার্বেজ কलेক্টর নেই। র্যাম ফ্রি করার জন্য, আমাদের সম্ভবত কনটেক্সট ম্যানেজারও ইন্টিগ্রেট করতে হবে।
এখন, আমরা কোড উন্নতি করলে, আমরা ধীরে ধীরে একটি সমাধান নির্মাণ করব। setjmp.h হেডার ফাইল দ্বারা প্রদত্ত longjmp এবং setjmp, দুটি সি ফাংশন আমরা ব্যবহার করব। setjmp ফাংশন jmp_buf টাইপ ভেরিয়েবল গ্রহণ করে এবং সরাসরি কল করা হলে ০ রিটার্ন করে। যখন একই jmp_buf ভেরিয়েবল ব্যবহার করে longjmp দুই ভেরিয়েবল দিয়ে আহ্বান করা হয়, setjmp ফাংশন একটি ভ্যালু রিটার্ন করে যা longjmp-এর দ্বিতীয় আর্গুমেন্টের ভ্যালুর সাথে মেলে।
উপরোক্ত বাস্তবায়নের একটি উদাহরণ নিচে দেওয়া হলো:
#include <stdio.h>
#include <setjmp.h>
#define TRY do { jmp_buf buf_state; if ( !setjmp(buf_state)) {
#define CATCH } else {
#define ENDTRY }} while(0)
#define THROW longjmp(buf_state, 1)
int main()
{
TRY {
printf("Try statement testing\n");
THROW;
printf("Statement should not appear, as the THROW block has already thrown the exception \n");
}
CATCH {
printf("Got Exception \n");
}
ENDTRY;
return 0;
}
উপরোক্ত সি প্রোগ্রামে, ENDTRY ফাংশন do-while ব্লকের ক্লোজিং পার্ট প্রদান করার জন্য ব্যবহৃত হয়।

উপসংহার
যদি একটি প্রোগ্রাম রান করার সময় ডেটা বা কোডিং এরর কারণে একটি এক্সেপশন সম্মুখীন হয়, "try" এবং "catch" বর্ণনা করে কীভাবে সেটি ম্যানেজ করতে হয়। একটি try ব্লক কোডে এক্সেপশন ঘটে در حالی যে একটি catch ব্লক হলো try ব্লক থেকে এরর খুঁজে বের করা ও হ্যান্ডেল করার জায়গা। অনেক প্রোগ্রামিং ভাষা try-catch ব্লক সাপোর্ট করে কিন্তু সি নয়। এই গাইডে সি প্রোগ্রামিং-এ try-catch স্টেটমেন্ট ব্যবহারের একটি পদ্ধতি বর্ণনা করা হয়েছে।
লেখক সম্পর্কে

কমল বাতুল বাতুল
প্রযুক্তি ও নতুন ধারণা গবেষণায় জুনুনী হোনায় আমি লিনাক্সহিন্টে লিখতে এসেছি। আমার মূল ফোকাস প্রোগ্রামিং ভাষা ও কম্পিউটার সাইন্স সম্পর্কিত টপিক্সে লিখা।