রাস্ট (Rust) ল্যাঙ্গুয়েজে বড় প্রজেক্ট তৈরি করার সময় কোড যেন অগোছালো না হয়ে যায়, সেজন্য প্যাকেজ, ক্রেট (Crates) এবং মডিউল ব্যবহার করা হয়। এই ভিডিওতে পিয়ুষ গর্গ খুব সহজভাবে বুঝিয়েছেন কীভাবে আপনার রাস্ট কোডকে বিভিন্ন পার্ট বা মডিউলে ভাগ করে সুন্দরভাবে সাজানো যায়। বিশেষ করে জাভাস্ক্রিপ্ট ব্যাকগ্রাউন্ড থেকে যারা এসেছেন, তাদের জন্য রাস্টের এই মডিউল সিস্টেম কিছুটা আলাদা মনে হতে পারে, কিন্তু একবার বুঝে গেলে এটি অত্যন্ত শক্তিশালী।
মডিউল সিস্টেমের মূল ধারণা (Introduction to Module System)
ভিডিও রেফারেন্স: [05:09]
যখন আমাদের কোড বড় হতে থাকে, তখন একটি ফাইলে সব কোড রাখা অসম্ভব হয়ে পড়ে। রাস্টের মডিউল সিস্টেম আমাদের কোডকে ছোট ছোট লজিক্যাল অংশে ভাগ করতে সাহায্য করে। এর মূল ৪টি উপাদান হলো:
-
Packages: এটি একটি কার্গো ফিচার যা আপনাকে আপনার কোড বিল্ড এবং শেয়ার করতে দেয়।
-
Crates: মডিউলের একটি গাছ (tree) যা থেকে লাইব্রেরি বা এক্সিকিউটেবল ফাইল তৈরি হয়।
-
Modules: এটি কোডের অর্গানাইজেশন এবং প্রাইভেসি কন্ট্রোল করে।
-
Paths: কোনো আইটেম (যেমন স্ট্রাক্ট বা ফাংশন) খুঁজে বের করার রাস্তা।
প্যাকেজ এবং ক্রেট (Packages and Crates)
ভিডিও রেফারেন্স: [06:01]
ক্রেট দুই ধরণের হতে পারে: ১. Binary Crate: এটি রান করা যায় (যেমন main.rs), যাতে একটি main ফাংশন থাকে। ২. Library Crate: এটি সরাসরি রান করা যায় না (যেমন lib.rs), এটি অন্য কোডে ব্যবহার করার জন্য তৈরি করা হয়।
সহজ ব্যাখ্যা: * Crate (ক্রেট): মনে করুন এটি একটি ছোট কাঠের বাক্স যার ভেতরে কিছু কাজের জিনিস আছে।
-
Binary Crate: এমন বাক্স যেটা সরাসরি চালু করলে কাজ শুরু করে দেয়।
-
Library Crate: এমন বাক্স যেটা নিজে নিজে কিছু করে না, কিন্তু অন্য কেউ সেখান থেকে টুলস নিয়ে ব্যবহার করতে পারে।
মডিউল এবং কোড অর্গানাইজেশন (Organizing Code with Modules)
ভিডিও রেফারেন্স: [13:50]
কোডকে বিভিন্ন অংশে ভাগ করার জন্য mod কিওয়ার্ড ব্যবহার করা হয়। উদাহরণস্বরূপ, একটি অথেন্টিকেশন সার্ভিসে ডেটাবেস কানেকশন এবং লগইন লজিক আলাদা মডিউলে রাখা ভালো।
কোড উদাহরণ:
Rust
// lib.rs ফাইলে মডিউল তৈরি
pub mod database {
pub enum Status {
Connected,
Interrupted,
}
pub fn connect_to_db() -> Status {
println!("Connecting to DB...");
Status::Connected
}
}
pub mod auth_utils {
pub fn login(user: String) {
println!("User {} logged in", user);
}
}
ব্যাখ্যা: এখানে আমরা database এবং auth_utils নামে দুটি মডিউল তৈরি করেছি। pub কিওয়ার্ডটি ব্যবহার করা হয়েছে যেন এই ফাংশন বা এনামগুলো মডিউলের বাইরে থেকেও ব্যবহার করা যায়। রাস্টে সবকিছু ডিফল্টভাবে Private থাকে, তাই বাইরে ব্যবহারের জন্য Public (pub) করতে হয়।
কোডকে বিভিন্ন ফাইলে ভাগ করা (Splitting Code into Multiple Files)
ভিডিও রেফারেন্স: [28:44]
সব মডিউল এক ফাইলে না রেখে আলাদা .rs ফাইলে রাখা যায়। যেমন: ১. src/lib.rs ফাইলে শুধু মডিউলের ঘোষণা থাকবে: pub mod database; ২. src/database.rs ফাইলে ডেটাবেসের আসল কোড থাকবে।
গুরুত্বপূর্ণ কথা: রাস্টের কম্পাইলার নিজে থেকে সব ফাইল পড়ে না। আপনাকে মেইন ফাইল বা লিবে mod দিয়ে বলে দিতে হবে যে অন্য একটি ফাইল আছে।
কঠিন শব্দের সহজ ব্যাখ্যা
-
Encapsulation (এনক্যাপসুলেশন): কোডের কিছু অংশ লুকিয়ে রাখা যেন বাইরের কেউ সেটা নষ্ট করতে না পারে।
-
Scope (স্কোপ): কোনো ভেরিয়েবল বা ফাংশন কোথায় কোথায় ব্যবহার করা যাবে তার সীমানা।
-
Path (পাথ): কোডের এক জায়গা থেকে অন্য জায়গার ফাংশন ডাকার ঠিকানা (যেমন:
crate::database::connect).
বিশ্লেষণ এবং আমার চিন্তা (Analysis & Perception)
কন্টেন্ট ক্রিয়েটর এখানে বোঝাতে চেয়েছেন যে, রাস্ট ল্যাঙ্গুয়েজ শুধু কোড লিখতেই শেখায় না, বরং কোডকে কীভাবে প্রফেশনাল উপায়ে ম্যানেজ করতে হয় তাও শেখায়।
আমার মতামত: ১. কেন এটি প্রয়োজন: বড় প্রজেক্টে যখন হাজার হাজার লাইন কোড হয়, তখন মডিউল ছাড়া কাজ করা অসম্ভব। ২. বিকল্প উপায়: রাস্টের পুরনো পদ্ধতিতে mod.rs ব্যবহার করা হতো, কিন্তু বর্তমানে ফাইল ভিত্তিক মডিউল সিস্টেম (যেমন database.rs) বেশি জনপ্রিয় এবং পরিষ্কার। ৩. পরামর্শ: আপনি যখন নতুন কোনো প্রজেক্ট শুরু করবেন, শুরুতেই সব কোড আলাদা ফাইলে না নিয়ে আগে একই ফাইলে মডিউল তৈরি করে দেখুন। কোড যখন ৫-৬টা মডিউলে পৌঁছে যাবে, তখন সেগুলোকে আলাদা ফাইলে সরিয়ে নিন। এতে কোড ম্যানেজ করা সহজ হবে।
রাস্টের এই মডিউল সিস্টেম শুরুতে একটু কঠিন মনে হতে পারে (বিশেষ করে pub কিওয়ার্ডের ব্যবহার), কিন্তু একবার অভ্যস্ত হয়ে গেলে আপনি আপনার কোডের ওপর পূর্ণ নিয়ন্ত্রণ পাবেন।
[
Packages and Crates | Rust Book
Piyush Garg · 3.4K views
](http://www.youtube.com/watch?v=SMcQ3kceDTo)

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