دروس الوحدة (1/2)
تعريف ومثيل الهياكل
الهياكل (أو الهياكل) في Rust هي أنواع بيانات مخصصة تسمح لك بتجميع قيم متعددة مرتبطة معًا. وهي تشبه الأشياء أو الفئات في اللغات الأخرى، ولكن دون وراثة.
تعريف الهيكل
لتحديد البنية، نستخدم الكلمة الأساسية struct متبوعة بالاسم في PascalCase. في الداخل، نحدد أسماء وأنواع الحقول:
struct User {
username: String,
email: String,
active: bool,
sign_in_count: u64,
}إنشاء مثيل
لاستخدام البنية، يجب علينا إنشاء مثيل عن طريق ملء جميع الحقول المحددة:
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);
}قابلية الهيكل للتغيير
في Rust، يجب وضع علامة على المثيل بأكمله على أنه قابل للتغيير (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 والهياكل المشابهة للوحدة
يدعم Rust أيضًا تنسيقين آخرين للبنية إلى جانب بنيات الحقول المسماة الكلاسيكية:
- الهياكل Tuple: لها اسم مرتبط ولكن الحقول لا تحتوي على أسماء فردية، بل أنواع فقط. وهي مفيدة لتحديد وتمييز أنواع معينة:
Rust
struct Point(i32, i32, i32); let origin = Point(0, 0, 0); - الهياكل المشابهة للوحدة: لا تحدد أي حقول. إنها تتصرف مثل نوع الوحدة
(). تكون مفيدة عندما تحتاج إلى تنفيذ سلوكيات (سمات) على نوع ما دون تخزين أي بيانات فيه.
جربه بنفسك
حدد بنية المستخدم أعلاه الرئيسية باستخدام الحقول: اسم المستخدم (نوع السلسلة) والنشط (نوع منطقي).
إظهار التلميح
اكتب `struct User { username: String, active: bool }`before`main`.
الحل متاح بعد 3 من المحاولات
قم بتعديل user1 لجعله قابلاً للتغيير (دع mut user1) وقم بتغيير الحقل النشط إلى false قبل الطباعة.
إظهار التلميح
أضف `mut`to`let user1`لجعله`let mut user1`، ثم أدخل `user1.active = false;`.
الحل متاح بعد 3 من المحاولات
حدد بنية صفية تسمى اللون تحتوي على ثلاثة حقول i32. بشكل رئيسي، قم بإنشاء مثيل للون بالقيم 255 و0 و100 وتخصيصه للمتغير my_color، ثم اطبع العنصر الأول (القيمة الحمراء) باستخدام println!.
إظهار التلميح
حدد بنية المجموعة باستخدام ``struct Color(i32, i32, i32);'. بشكل رئيسي، قم بإنشاء مثيل لها على النحو التالي: "let my_color = Color(255, 0, 100);" وطباعة القيمة الحمراء باستخدام "my_color.0".
الحل متاح بعد 3 من المحاولات