মডিউল পাঠ (1/2)
কাঠামো সংজ্ঞায়িত এবং তাত্ক্ষণিককরণ
কাঠামো (বা স্ট্রাকচার) হল কাস্টম ডেটা প্রকার যা আপনাকে একাধিক সম্পর্কিত মান একসাথে গোষ্ঠীবদ্ধ করতে দেয়। এগুলি অন্যান্য ভাষার বস্তু বা শ্রেণীর অনুরূপ, কিন্তু উত্তরাধিকার ছাড়াই।
একটি কাঠামো সংজ্ঞায়িত করা
একটি কাঠামোকে সংজ্ঞায়িত করতে, আমরা struct কীওয়ার্ডটি PascalCase এ নাম অনুসরণ করি। ভিতরে, আমরা ক্ষেত্রগুলির নাম এবং প্রকারগুলি সংজ্ঞায়িত করি:
struct User {
username: String,
email: String,
active: bool,
sign_in_count: u64,
}একটি উদাহরণ তৈরি করা হচ্ছে
একটি struct ব্যবহার করতে, আমাদের অবশ্যই সমস্ত নির্দিষ্ট ক্ষেত্রগুলি পূরণ করে একটি উদাহরণ তৈরি করতে হবে:
fn main() {
let user1 = User {
email: String::from("alice@example.com"),
username: String::from("alice123"),
active: true,
sign_in_count: 1,
};
// Access fields using dot notation
println!("Is user {} active? {}", user1.username, user1.active);
}কাঠামো পরিবর্তনশীলতা
মরিচা-এ, আপনি যদি এর যেকোন ক্ষেত্র পরিবর্তন করতে চান তবে সম্পূর্ণ উদাহরণটিকে অবশ্যই পরিবর্তনযোগ্য (mut) হিসাবে চিহ্নিত করতে হবে। মরিচা শুধুমাত্র নির্দিষ্ট ক্ষেত্রগুলিকে পরিবর্তনযোগ্য হিসাবে চিহ্নিত করার অনুমতি দেয় না:
fn main() {
let mut user1 = User {
email: String::from("alice@example.com"),
username: String::from("alice123"),
active: true,
sign_in_count: 1,
};
user1.active = false; // Valid because user1 is mutable!
}টিপল স্ট্রাকস এবং ইউনিট-লাইক স্ট্রাকস
মরিচা ক্লাসিক নাম-ক্ষেত্রের স্ট্রাকস ছাড়াও আরও দুটি স্ট্রাকট ফর্ম্যাট সমর্থন করে:
- Tuple Structs: তাদের একটি যুক্ত নাম আছে কিন্তু ক্ষেত্রগুলির পৃথক নাম নেই, শুধুমাত্র প্রকার। তারা নির্দিষ্ট ধরনের সংজ্ঞায়িত এবং পার্থক্য করার জন্য দরকারী:
Rust
struct Point(i32, i32, i32); let origin = Point(0, 0, 0); - ইউনিট-লাইক স্ট্রাকস: তারা কোনো ক্ষেত্র সংজ্ঞায়িত করে না। তারা
()ইউনিট প্রকারের মত আচরণ করে। এগুলি উপযোগী হয় যখন আপনাকে কোনও ডেটা সঞ্চয় না করে একটি টাইপের আচরণ (বৈশিষ্ট্য) প্রয়োগ করতে হবে।
নিজে চেষ্টা করে দেখুন
ক্ষেত্রগুলির সাহায্যে প্রধান উপরে ব্যবহারকারীর কাঠামো সংজ্ঞায়িত করুন: ব্যবহারকারীর নাম (স্ট্রিং টাইপ) এবং সক্রিয় (বুল টাইপ)।
ইঙ্গিত দেখান
লিখুন `struct User { username: String, active: bool }`before`main`।
সমাধান 3 প্রচেষ্টার পরে উপলব্ধ
ইউজার1কে পরিবর্তনযোগ্য করে তুলতে পরিবর্তন করুন (ব্যবহারকারী 1কে মিউট করুন) এবং মুদ্রণের আগে সক্রিয় ক্ষেত্রটিকে মিথ্যাতে পরিবর্তন করুন।
ইঙ্গিত দেখান
এটাকে `let mut user1`করতে`mut`to`let user1`যোগ করুন, তারপর`user1.active = false;` ঢোকান।
সমাধান 3 প্রচেষ্টার পরে উপলব্ধ
তিনটি i32 ক্ষেত্র সমন্বিত Color নামের একটি tuple struct সংজ্ঞায়িত করুন। প্রধানত, 255, 0, এবং 100 ভেরিয়েবল my_color-এ বরাদ্দ করে রঙের সাথে ইনস্ট্যান্টিয়েট করুন, তারপর println ব্যবহার করে এর প্রথম উপাদান (লাল মান) প্রিন্ট করুন!
ইঙ্গিত দেখান
'struct Color(i32, i32, i32);' দিয়ে tuple struct সংজ্ঞায়িত করুন। প্রধানত, এটিকে `let my_color = Color(255, 0, 100);`হিসেবে ইনস্ট্যান্টিয়েট করুন এবং`my_color.0` দিয়ে লাল মান প্রিন্ট করুন।
সমাধান 3 প্রচেষ্টার পরে উপলব্ধ