সরাসরি প্রধান সামগ্রীতে চলে যান

Rust-এ Structs ব্যবহার করে সহজ প্রোগ্রাম তৈরি এবং ডিবাগিং করার নিয়ম

আজকের এই আলোচনায় আমরা শিখব কীভাবে Rust প্রোগ্রামিং ল্যাঙ্গুয়েজে Structs ব্যবহার করে কোডকে আরও গোছানো এবং সুন্দর করা যায়। সাধারণত যখন আমরা কোনো ডেটা নিয়ে কাজ করি, তখন অনেকগুলো এলোমেলো ভেরিয়েবল ব্যবহার না করে সেগুলোকে একটি নির্দিষ্ট কাঠামোর মধ্যে আনাই হলো Structs-এর আসল কাজ। আমরা একটি আয়তক্ষেত্রের (Rectangle) ক্ষেত্রফল বের করার উদাহরণের মাধ্যমে এটি সহজভাবে বুঝব।


১. সাধারণ ফাংশন থেকে Struct-এর দিকে যাত্রা

ভিডিও রেফারেন্স: [00:45]

শুরুতে আমরা যদি একটি আয়তক্ষেত্রের ক্ষেত্রফল বের করতে চাই, তবে সাধারণত দুটি আলাদা ভেরিয়েবল (প্রস্থ বা width এবং উচ্চতা বা height) ব্যবহার করি।

কোড উদাহরণ:

Rust

fn calculate_area(width: u32, height: u32) -> u32 {
    width * height
}

fn main() {
    let w = 100;
    let h = 200;
    let area = calculate_area(w, h);
    println!("আয়তক্ষেত্রের ক্ষেত্রফল হলো: {}", area);
} 

ব্যাখ্যা: এই কোডটি কাজ করলেও এতে একটি সমস্যা আছে। width এবং height সম্পূর্ণ আলাদা দুটি ভেরিয়েবল। এদের মধ্যে যে কোনো সম্পর্ক আছে, তা কোড দেখে বোঝা কঠিন। এছাড়া ফাংশনে ভুল করে উল্টোপাল্টা ভ্যালু দেওয়ার সম্ভাবনা থাকে।

  • সহজ কথা: যখন অনেকগুলো তথ্য মিলে একটি নির্দিষ্ট জিনিস বোঝায় (যেমন- নাম, বয়স, আইডি মিলে একজন ছাত্র), তখন সেগুলোকে আলাদা না রেখে একসাথে রাখাই বুদ্ধিমানের কাজ।

২. Struct ব্যবহার করে কোডকে গোছানো

ভিডিও রেফারেন্স: [05:28]

এখন আমরা Rectangle নামে একটি Struct তৈরি করব। এটি মূলত একটি কাস্টম ডেটা টাইপ, যেখানে আমরা বলে দেব যে একটি আয়তক্ষেত্রের মধ্যে কী কী থাকবে।

কোড উদাহরণ:

Rust

struct Rectangle {
    width: u32,
    height: u32,
}

fn calculate_area(rect: &Rectangle) -> u32 {
    rect.width * rect.height
}

fn main() {
    let rect1 = Rectangle {
        width: 100,
        height: 200,
    };
    
    let area = calculate_area(&rect1);
    println!("Struct ব্যবহার করে ক্ষেত্রফল: {}", area);
} 

ব্যাখ্যা: - এখানে struct Rectangle লিখে আমরা একটি কাঠামো তৈরি করেছি।

  • ফাংশনের ভেতর এখন আমরা আলাদা ভেরিয়েবল না পাঠিয়ে সরাসরি পুরো Rectangle-কে পাঠিয়েছি।

  • Borrowing (&): লক্ষ্য করুন ফাংশনে আমরা &Rectangle ব্যবহার করেছি। এর মানে হলো আমরা শুধু আয়তক্ষেত্রের তথ্যগুলো "ধার" নিচ্ছি, এর মালিকানা (Ownership) কেড়ে নিচ্ছি না। ফলে পরে আমরা rect1 আবার ব্যবহার করতে পারব।


৩. Struct-এর তথ্য প্রিন্ট করা এবং Debug Trait

ভিডিও রেফারেন্স: [09:00]

আমরা যদি সাধারণ println! দিয়ে একটি Struct প্রিন্ট করতে চাই, তবে Rust আমাদের এরর দেখাবে। কারণ Rust জানে না আপনি এই কাঠামোটি কীভাবে স্ক্রিনে দেখাতে চান। এর জন্য আমাদের Debug Trait ব্যবহার করতে হয়।

কঠিন শব্দ: Trait (ট্রেট) - এটি অনেকটা কিছু নিয়মের সমষ্টির মতো। যেমন কোনো স্ট্রাক্টকে যদি প্রিন্ট করতে হয়, তবে তাকে "Debug" ট্রেট মানতে হয়।

কোড উদাহরণ:

Rust

#[derive(Debug)] // এই লাইনটি ডিবাগিং সুবিধা চালু করে
struct Rectangle {
    width: u32,
    height: u32,
}

fn main() {
    let rect1 = Rectangle {
        width: 30,
        height: 50,
    };

    // {:?} ব্যবহার করা হয় ডিবাগ ফরম্যাটে প্রিন্ট করার জন্য
    println!("আমাদের আয়তক্ষেত্রটি হলো: {:?}", rect1);
    
    // আরও সুন্দর করে দেখতে {:#?} ব্যবহার করুন
    println!("সুন্দর ফরম্যাটে: {:#?}", rect1);
} 

ব্যাখ্যা:

  • #[derive(Debug)] লাইনটি Rust-কে বলে দেয় যে এই Struct-টি ডিবাগ করার জন্য তৈরি।

  • {:?} বা {:#?} ব্যবহার করে আমরা পুরো ডাটা স্ট্রাকচারটি একসাথে দেখতে পারি, যা কোডিংয়ের ভুল ধরতে খুব সাহায্য করে।


৪. DBG! ম্যাক্রো ব্যবহার করা

ভিডিও রেফারেন্স: [13:00]

Rust-এ প্রিন্ট করার আরেকটি চমৎকার উপায় হলো dbg! ম্যাক্রো। এটি শুধু ভ্যালু প্রিন্ট করে না, বরং কোডের কোন ফাইলে এবং কত নম্বর লাইনে এই প্রিন্টটি হচ্ছে তাও জানিয়ে দেয়।

কোড উদাহরণ:

Rust

let rect1 = Rectangle {
    width: dbg!(30 * 2), // এখানে ডিরেক্ট ক্যালকুলেশন ডিবাগ করা যায়
    height: 50,
};

dbg!(&rect1); // পুরো স্ট্রাক্টটি ডিবাগ করবে 

আমার বিশ্লেষণ ও চিন্তাভাবনা (Analysis & Perception)

কন্টেন্ট ক্রিয়েটর পিয়ুষ গর্গ এখানে বোঝাতে চেয়েছেন যে, প্রোগ্রামিং শুধু কাজ করার জন্য নয়, বরং কোডকে পঠনযোগ্য (Readable) করার জন্যও শিখতে হয়। সাধারণ ভেরিয়েবল থেকে Struct-এ আসার যাত্রাটি আসলে কোডকে আরও শক্তিশালী করার একটি ধাপ।

বাস্তবতা ও সাজেশন:

  • কেন Struct ব্যবহার করবেন? আপনি যখন বড় কোনো প্রোজেক্টে কাজ করবেন, তখন শত শত ভেরিয়েবল মনে রাখা সম্ভব নয়। Struct ব্যবহার করলে ডেটার মধ্যে একটি গ্রুপিং থাকে, যা ভুল হওয়ার সম্ভাবনা কমায়।

  • বিকল্প: অনেকে 'Tuples' ব্যবহার করতে পারেন, কিন্তু টাপলে ডেটার কোনো নাম থাকে না (যেমন index 0, index 1)। তাই প্রফেশনাল কাজে Struct-ই সেরা পছন্দ।

  • পরামর্শ: সবসময় Struct ডিফাইন করার সময় #[derive(Debug)] ব্যবহার করার অভ্যাস করুন। এটি আপনার ডেভেলপমেন্ট সময় অনেক কমিয়ে দেবে।

পরবর্তী ধাপে এই Struct-এর সাথেই কীভাবে ফাংশন যুক্ত করা যায় (যাকে Method বলা হয়), তা শিখলে Rust-এ আপনার দখল আরও বাড়বে।

[

Defining and Instantiating Structs | Rust Book

Piyush Garg · 2.9K views

](http://www.youtube.com/watch?v=OZ93b2PH7nU)

মন্তব্যসমূহ

এই ব্লগটি থেকে জনপ্রিয় পোস্টগুলি

সিজ্জিন (Sijjin) vs ইল্লিয়িন (Illiyin) পার্থক্য Difference

Sijjin (سِجِّين) এবং Illiyin (عِلِّيِّين) —এ দুটি শব্দ কুরআনে এসেছে এবং দুটোই মানুষের আমলনামা সংরক্ষণ সম্পর্কিত স্থানকে নির্দেশ করে। ১. সিজ্জিন (Sijjin) সিজ্জিন হলো পাপীদের (কাফের, মুনাফিক ও দুরাচারীদের) আমলনামা সংরক্ষণের স্থান। এটি সাত তলদেশের নীচে এক কারাগার বা অন্ধকার জগতে অবস্থিত বলে উল্লেখ রয়েছে। সূরা আল-মুতাফফিফীন (৮৩:৭-৯) তে বলা হয়েছে: "كَلَّا إِنَّ كِتَابَ الْفُجَّارِ لَفِي سِجِّينٍ ۝ وَمَا أَدْرَاكَ مَا سِجِّينٌ ۝ كِتَابٌ مَرْقُومٌ" অর্থ: "না, পাপীদের আমলনামা সিজ্জিনে সংরক্ষিত। তুমি কি জানো, সিজ্জিন কী? এটি এক লিখিত দলিল।" সিজ্জিনকে একটি কারাগার, সংকীর্ণ স্থান, বা নিচের স্তরে অবস্থিত এক অন্ধকার দুনিয়া হিসেবে ব্যাখ্যা করা হয়। ২. ইল্লিয়িন (Illiyin) ইল্লিয়িন হলো সৎকর্মশীলদের (মুমিন ও নেককারদের) আমলনামা সংরক্ষণের স্থান । এটি সপ্তম আসমানের ওপরে সংরক্ষিত এক সম্মানিত স্থান। সূরা আল-মুতাফফিফীন (৮৩:১৮-২১) তে বলা হয়েছে: "كَلَّا إِنَّ كِتَابَ الْأَبْرَارِ لَفِي عِلِّيِّينَ ۝ وَمَا أَدْرَاكَ مَا عِلِّيُّونَ ۝ كِتَابٌ مَرْقُومٌ ۝ يَش...

তারাবিহ সমগ্র - প্রথম আলো

রামাদান ২০২৪ উপলক্ষে প্রথম আলোর নিয়মিত আয়োজন - খতমে তারাবিহ'র সূরা গুলো নিয়ে সংক্ষিপ্ত আলোচনা'র লিংক  নিচে দেওয়া হলো।  লিংকে ক্লিক করলেই আপনাকে আলোচনা তে নিয়ে যাবে। তারাবিহ: ১ | একটি খুন ও গাভি নিয়ে বনি ইসরাইলের বাড়াবাড়ি তারাবিহ: ২ | নারীর মর্যাদা ও অধিকার এবং অলৌকিক তিন ঘটনা তারাবিহ: ৩ | যে ১৪ নারীকে বিয়ে করা হারাম তারাবিতে: ১২ | মহানবী (সা.)–এর আকাশভ্রমণ এবং আসহাবে কাহাফের কাহিনি

রেডমি নোট ৯ এর বিস্তারিত | Redmi Note 9 in Bangla

৩০ এপ্রিল, ২০২০ এ শাওমির ঘোষনা আসে এই ফোনটি নিয়ে। কিন্তু ফোনটি মার্কেটে আসে মে মাসের শেষের দিকে৷ করোনার কারনে ফোনটি বাংলাদেশে আসতে আরো সময় নেয়। বর্তমানে বাংলাদেশে আন অফিশিয়াল ভাবে ফোনটি পাওয়া যাচ্ছে৷ বাংলাদেশে অফিশিয়াল ভাবে এখনো ফোনটি আসার তথ্য নেয়৷ চলুন ফোনটি নিয়ে বিস্তারিত আলোচনা করা যাক। শাওমি নোট সিরিজের ফোন বের করে এদের রেডমি নামে সাব ব্যান্ড৷ এদের কাজ হল এই নোট সিরিজ নিয়ে কাজ করা৷ প্রতিবছর নোট সিরিজের ১/২ টা ফোন বাজারে আসে। সাথে সেই ফোন গুলার বিভিন্ন ভার্সন (যেমন - র‍্যাম ও রমের ভিত্তিতে) বাজারে আসে। এই বছরও তারা রেডমি সিরিজের নোট ৯ বাজারে আনে। এই বছর হয়তো এই সিরিজের আরো ফোন বাজারে আসবে। ডিস্পলেঃ ফোনটির ডিসপ্লে সাইজ ৬.৫৩ ইঞ্চি। এতে আইপিএস এলসিডি ডিসপ্লে ব্যবহার করা হয়েছে। এই ফোনের ডিসপ্লে প্রটেকশন হিসেবে আছে গরিলা গ্লাস ফাইভ। স্ক্রিন আর ফোনের বডির অনুপাত প্রায় ৮৩.৫%। এই ফোনের ডিসপ্লে ফুলএইচডি মানে ১০৮০পি। এই ডিস্পলের দৈর্ঘ্য ১৯.৫ একক এবং প্রস্থ হল ৯ একক। এত বড় ফোনের কারনে এই ফোনের পিপি আই ডেনসিটি ৩৯৫। যা একটু কম। প্লাটফর্মঃ এই ফোনের অপারেটিং সিস্টেম এন্ড্রয়েড ১০ এবং এর...