الوصول إلى حقول الـ Struct
جزء من قسم Logic & Flow في رحلة Rust على Coddy — الدرس 22 من 66.
بمجرد إنشاء مثيل لـ struct، ستحتاج إلى طريقة لاسترداد القيم المخزنة بداخله. تستخدم Rust تدوين النقطة (dot notation) للوصول إلى الحقول الفردية داخل الـ struct.
الصيغة بسيطة: تكتب اسم مثيل الـ struct، متبوعاً بنقطة، ثم اسم الحقل الذي تريد الوصول إليه:
let product = Product {
name: String::from("Laptop"),
price: 999,
};
println!("Product: {}", product.name);
println!("Price: ${}", product.price);يعمل تدوين النقطة (dot notation) هذا تماماً مثل الوصول إلى الخصائص في لغات البرمجة الأخرى. يمكنك استخدام القيم التي تم الوصول إليها في التعبيرات، أو تعيينها للمتغيرات، أو تمريرها إلى الدوال - فهي تتصرف تماماً مثل أي قيمة أخرى من ذلك النوع.
التحدي
سهلستتلقى ثلاثة مدخلات: اسم طراز السيارة، سنة صنع السيارة (كعدد صحيح)، والمسافة المقطوعة (كعدد صحيح). قم بتعريف هيكل Car بثلاثة حقول: model من نوع String، و year من نوع i32، و mileage من نوع i32. أنشئ مثيلاً لهذا الهيكل باستخدام قيم المدخلات، ثم قم بالوصول إلى كل حقل وطباعته.
المتطلبات:
- قم بتعريف هيكل
Carبالحقول:model: String، وyear: i32، وmileage: i32 - اقرأ المدخل الأول كطراز السيارة
- اقرأ المدخل الثاني وقم بتحويله إلى
i32للسنة - اقرأ المدخل الثالث وقم بتحويله إلى
i32للمسافة المقطوعة - أنشئ مثيلاً لهيكل
Carبهذه القيم - استخدم تدوين النقطة للوصول إلى كل حقل وطباعة معلومات السيارة بالتنسيق الموضح أدناه تماماً
المدخلات:
- السطر الأول: طراز السيارة (على سبيل المثال،
Tesla Model 3) - السطر الثاني: السنة كعدد صحيح (على سبيل المثال،
2022) - السطر الثالث: المسافة المقطوعة كعدد صحيح (على سبيل المثال،
15000)
المخرجات:
- السطر الأول:
Car: [model] - السطر الثاني:
Year: [year] - السطر الثالث:
Mileage: [mileage] km
ورقة مرجعية
للوصول إلى الحقول داخل مثيل الـ struct، استخدم صيغة النقطة (dot notation):
let product = Product {
name: String::from("Laptop"),
price: 999,
};
println!("Product: {}", product.name);
println!("Price: ${}", product.price);الصيغة هي: instance_name.field_name. يمكن استخدام القيم التي تم الوصول إليها في التعبيرات، أو تعيينها لمتغيرات، أو تمريرها إلى الدوال.
جرّب بنفسك
use std::io;
// TODO: قم بتعريف هيكل Car هنا مع الحقول: model و year و mileage
fn main() {
// قراءة طراز السيارة
let mut model = String::new();
io::stdin().read_line(&mut model).expect("Failed to read line");
let model = model.trim().to_string();
// قراءة السنة
let mut year_input = String::new();
io::stdin().read_line(&mut year_input).expect("Failed to read line");
let year: i32 = year_input.trim().parse().expect("Invalid year");
// قراءة المسافة المقطوعة
let mut mileage_input = String::new();
io::stdin().read_line(&mut mileage_input).expect("Failed to read line");
let mileage: i32 = mileage_input.trim().parse().expect("Invalid mileage");
// TODO: قم بإنشاء مثيل لهيكل Car باستخدام قيم الإدخال
// TODO: الوصول إلى كل حقل وطباعته بالتنسيق المطلوب
// Car: [model]
// Year: [year]
// Mileage: [mileage] km
}يتضمن هذا الدرس اختبارًا قصيرًا. ابدأ الدرس للإجابة عليه وتتبّع تقدمك.
جميع دروس Logic & Flow
1تدفق التحكم المتقدم
تعبير 'match'مطابقة قيم متعددةمطابقة النطاقاتتعبير 'if let'الحلقات التكرارية كتعبيراتمراجعة - محلل أوامر بسيط4تجميع البيانات باستخدام Structs
ما هو الـ Struct؟نظرة عامة على الـ Structsالوصول إلى حقول الـ Structالـ Structs القابلة للتعديلالـ Structs كمعاملات للدوالالـ Tuple Structsمراجعة - إنشاء Book Struct7معالجة الأخطاء باستخدام 'Result'
ما هو 'Result'؟استخدام 'match' مع 'Result'is_ok() و is_err()اختصارات: unwrap و expectعامل علامة الاستفهام '?'تحويل السلاسل النصية إلى أرقامملخص - دالة القسمة الآمنة10الـ Closures والدوال المجهولة
ما هو الـ Closure؟تعريف Closure بسيطالـ Closures مع المعاملاتالتقاط البيئة المحيطةملخص - Closure الجامع البسيط2مقدمة في الـ Vectors
ما هو الـ Vector؟إنشاء Vectorإضافة عناصر باستخدام pushالوصول إلى عناصر الـ Vectorالتكرار عبر الـ Vectorالتكرار القابل للتعديل (Mutable Iteration)إزالة العناصرمراجعة - متتبع نقاط بسيط5أزواج (المفتاح والقيمة) مع Hash Maps
ما هو Hash Map؟إنشاء Hash Mapإدراج أزواج (المفتاح والقيمة)الوصول إلى القيمالتكرار عبر Hash Mapتحديث قيمةإزالة زوجملخص - عداد الكلمات6التعامل مع غياب القيم باستخدام 'Option'
ما هو الـ 'Option'؟استخدام 'match' مع 'Option''is_some()' و 'is_none()'فك تغليف الـ 'Option'الدالة 'expect'توفير قيمة افتراضية: 'unwrap_or'مراجعة - البحث عن عنصر9شرائح الـ String والمزيد
String مقابل &strإنشاء شرائح الـ Stringالشرائح كمعاملات للدوالشرائح أخرىمراجعة - إيجاد الكلمة الأولى