Introduction
সফটওয়্যার ডেভেলপমেন্টে ভুল বা 'Error' হওয়াটা খুবই স্বাভাবিক একটা বিষয়। কিন্তু একেকটি ল্যাঙ্গুয়েজ এই ভুলগুলোকে একেকভাবে সামলায়। Rust প্রোগ্রামিং ল্যাঙ্গুয়েজে এরর হ্যান্ডলিং করার পদ্ধতি অন্য সব ল্যাঙ্গুয়েজ (যেমন: Java বা JavaScript) থেকে একটু আলাদা। Rust মূলত দুই ধরনের এরর নিয়ে কাজ করে: Recoverable (যা ঠিক করা সম্ভব) এবং Unrecoverable (যা ঠিক করা সম্ভব নয়)। আজকের এই আলোচনায় আমরা মূলত Unrecoverable Errors এবং Rust-এর বিশেষ অস্ত্র panic! ম্যাক্রো নিয়ে সহজ ভাষায় জানবো।
১. এরর হ্যান্ডলিং-এর ধারণা (Error Handling Concepts)
ভিডিও রেফারেন্স: [00:22]
প্রোগ্রামিং করার সময় আমাদের কোডে দুই ধরণের সমস্যা হতে পারে:
-
Recoverable Errors: ধরুন আপনি একটি ফাইল খুলতে চাইলেন কিন্তু ফাইলটি নেই। এক্ষেত্রে প্রোগ্রাম ক্রাশ না করে ইউজারকে বলা যেতে পারে যে ফাইলটি খুঁজে পাওয়া যায়নি।
-
Unrecoverable Errors: এটি এমন একটি সমস্যা যেখানে প্রোগ্রাম আর সামনে এগোতে পারে না। যেমন: একটি এরে (Array)-তে ৩টি আইকন আছে কিন্তু আপনি ১০০ নম্বর আইকনটি দেখতে চাইছেন। এটি একটি 'Bug', যা ঠিক না করলে প্রোগ্রাম চালানো সম্ভব নয়।
আমার ভাবনা: অনেক ল্যাঙ্গুয়েজে try-catch ব্যবহার করে সব ধরণের ভুলকে একসাথে সামলানো হয়, কিন্তু Rust আপনাকে শুরুতেই বলে দেয় কোন ভুলটি আপনি ঠিক করতে পারবেন আর কোনটি পারবেন না। এতে কোড অনেক বেশি শক্তিশালী (Robust) হয়।
২. panic! ম্যাক্রো কী? (What is panic! Macro?)
ভিডিও রেফারেন্স: [02:45]
যখন Rust-এ এমন কোনো সমস্যা হয় যেখান থেকে আর ফিরে আসার উপায় নেই, তখন Rust panic! ম্যাক্রো ব্যবহার করে। এটি কল হওয়ার সাথে সাথে প্রোগ্রামটি তৎক্ষণাৎ বন্ধ হয়ে যায় এবং একটি এরর মেসেজ দেখায়।
সহজ ভাষায় ব্যাখ্যা:
-
Panic: এর অর্থ হলো প্রোগ্রামটি 'আতঙ্কিত' হয়ে পড়েছে এবং সে আর কাজ করতে পারছে না, তাই সে নিজেকে বন্ধ করে দিচ্ছে।
-
Macro: Rust-এ যেগুলোর শেষে
!চিহ্ন থাকে (যেমন:println!,panic!), সেগুলোকে ম্যাক্রো বলা হয়। এগুলো সাধারণ ফাংশনের চেয়ে একটু বেশি শক্তিশালী।
৩. প্যানিক করার উপায় এবং কোড উদাহরণ (Ways to Panic)
ভিডিও রেফারেন্স: [04:53]
আমরা দুইভাবে প্যানিক ঘটাতে পারি:
-
নিজে থেকে কল করে: যখন আমরা জানি যে এখানে সমস্যা হতে পারে।
-
ভুল অ্যাকশন নিলে: যেমন এরে-র সীমানার বাইরে কিছু অ্যাক্সেস করা।
কোড উদাহরণ ১ (সরাসরি প্যানিক):
Rust
fn main() {
println!("Hello, World!");
// সরাসরি প্যানিক কল করা
panic!("এইখানে একটি বড় সমস্যা হয়েছে!");
// নিচের লাইনটি কখনোই কাজ করবে না
println!("এই লাইনটি প্রিন্ট হবে না।");
}
ব্যাখ্যা: এই কোডটি রান করলে প্রথমে "Hello, World!" প্রিন্ট হবে, তারপর panic! লাইনটিতে এসে প্রোগ্রাম ক্রাশ করবে এবং পরের প্রিন্ট লাইনটি আর কাজ করবে না।
কোড উদাহরণ ২ (ইন্ডেক্স আউট অফ বাউন্ড):
Rust
fn main() {
let v = vec![1, 2, 3]; // এখানে ৩টি উপাদান আছে
// ৯৯ নম্বর ইন্ডেক্স ধরার চেষ্টা করছি যা নেই
println!("উপাদানটি হলো: {}", v[99]);
}
ব্যাখ্যা: যেহেতু ভেক্টরটিতে মাত্র ৩টি উপাদান আছে, ৯৯ নম্বর উপাদান খুঁজতে গেলে Rust স্বয়ংক্রিয়ভাবে panic! করবে কারণ এটি মেমরির জন্য নিরাপদ নয়।
৪. স্ট্যাক আনওয়াইন্ডিং বনাম অ্যাবোর্টিং (Unwinding vs Aborting)
ভিডিও রেফারেন্স: [03:29]
যখন প্যানিক হয়, Rust ডিফল্টভাবে Unwinding শুরু করে। এর মানে হলো সে প্রোগ্রামের মেমরিগুলো ধীরে ধীরে পরিষ্কার করে তারপর বন্ধ হয়। কিন্তু আপনি চাইলে সরাসরি Abort করতে পারেন, অর্থাৎ কোনো পরিষ্কার ছাড়াই সাথে সাথে বন্ধ। এটি করলে প্রোগ্রামের সাইজ ছোট হয়।
কঠিন শব্দের সহজ অর্থ:
-
Stack Unwinding: প্রোগ্রাম বন্ধ হওয়ার আগে সবকিছু গুছিয়ে রাখা।
-
Abort: কোনো কিছু না গুছিয়ে সরাসরি বের হয়ে যাওয়া।
বিশ্লেষণ ও শেষ কথা
Rust-এর এই panic! সিস্টেমটি তৈরিই করা হয়েছে যাতে ডেভেলপাররা ভুল কোড লিখে পার না পায়। পিয়ুশ গর্গ এই ভিডিওতে চমৎকারভাবে বুঝিয়েছেন যে কীভাবে অনিরাময়যোগ্য ভুলগুলো হ্যান্ডেল করতে হয়।
আমার বিশ্লেষণ: বাস্তব জীবনে আমরা যখন কোড করি, তখন সবসময় panic! ব্যবহার করা উচিত নয়। এটি শুধুমাত্র তখনই ব্যবহার করা উচিত যখন কোনো লজিক্যাল বাগ থাকে যা প্রোগ্রামের জন্য বিপজ্জনক। সাধারণ ভুলের জন্য (যেমন ভুল ইউজার ইনপুট) আমাদের Result টাইপ ব্যবহার করা উচিত, যা নিয়ে পরবর্তী পর্বে আলোচনা করা হবে।
পরামর্শ: আপনি যদি কোনো লাইব্রেরি তৈরি করেন, তবে panic! কম ব্যবহার করার চেষ্টা করুন। কারণ আপনার লাইব্রেরি ব্যবহারকারী হয়তো চাইবেন না তার পুরো অ্যাপ আপনার একটি ভুলের জন্য ক্রাশ করুক। পরিবর্তে তাকে এরর মেসেজ দিন যাতে সে নিজেই সিদ্ধান্ত নিতে পারে সে কী করবে।
বিকল্প: যদি আপনি চান এরে অ্যাক্সেস করার সময় প্রোগ্রাম ক্রাশ না করুক, তবে .get() মেথড ব্যবহার করতে পারেন যা প্যানিক করার বদলে Option রিটার্ন করে।
[
Unrecoverable Errors with panic! | Rust Book
Piyush Garg · 1.6K views
](http://www.youtube.com/watch?v=z-gg_q6MsF0)

মন্তব্যসমূহ
একটি মন্তব্য পোস্ট করুন
আপনার সমস্যাটি কমেন্ট করে আমাদের জানান :-d