الـ Tuple Structs
جزء من قسم Logic & Flow في رحلة Rust على Coddy — الدرس 25 من 66.
بينما تستخدم الهياكل (structs) العادية حقولاً مسماة، تقدم لغة Rust نوعاً آخر يسمى tuple structs. توفر هذه الهياكل طريقة أكثر إيجازاً لإنشاء أنواع مخصصة عندما لا تحتاج إلى تسمية كل حقل بشكل فردي.
تجمع بنية الصف (tuple struct) بين فوائد إنشاء نوع جديد وبساطة الصف (tuple). يمكنك تعريفها باستخدام الكلمة المفتاحية struct متبوعة باسم النوع وأنواع الحقول بين قوسين:
struct Color(i32, i32, i32);هذا ينشئ نوع Color يحتوي على ثلاث قيم i32، تمثل قيم ألوان RGB. على عكس الـ structs العادية، لا تقوم بتحديد أسماء الحقول - بل تصل إلى القيم من خلال موقعها، تماماً كما هو الحال مع الـ tuples.
لإنشاء مثيل من tuple struct، قم بتوفير القيم بين قوسين:
let red = Color(255, 0, 0);يمكنك الوصول إلى الحقول الفردية باستخدام تدوين النقطة (dot notation) مع فهرس الحقل: red.0 يعطيك القيمة الأولى، red.1 الثانية، وهكذا.
التحدي
سهلستتلقى ثلاثة مدخلات: قيمة اللون الأحمر (كعدد صحيح)، وقيمة اللون الأخضر (كعدد صحيح)، وقيمة اللون الأزرق (كعدد صحيح). قم بتعريف هيكل tuple باسم Color يحتوي على ثلاث قيم من نوع i32 تمثل مكونات ألوان RGB. قم بإنشاء مثيل (instance) من هيكل الـ tuple هذا باستخدام قيم المدخلات، ثم قم بالوصول إلى كل مكون لوني وطباعته باستخدام تدوين الفهرس (index notation).
المتطلبات:
- تعريف هيكل tuple باسم
Colorمع ثلاثة حقول من نوعi32 - قراءة المدخل الأول وتحويله إلى
i32لقيمة اللون الأحمر - قراءة المدخل الثاني وتحويله إلى
i32لقيمة اللون الأخضر - قراءة المدخل الثالث وتحويله إلى
i32لقيمة اللون الأزرق - إنشاء مثيل من هيكل الـ tuple
Colorبهذه القيم - الوصول إلى كل حقل باستخدام تدوين النقطة مع الفهارس (0، 1، 2) وطباعة معلومات اللون بالتنسيق الدقيق الموضح أدناه
المدخلات:
- السطر الأول: قيمة اللون الأحمر كعدد صحيح (مثلاً،
255) - السطر الثاني: قيمة اللون الأخضر كعدد صحيح (مثلاً،
128) - السطر الثالث: قيمة اللون الأزرق كعدد صحيح (مثلاً،
0)
المخرجات:
- السطر الأول:
Red: [red_value] - السطر الثاني:
Green: [green_value] - السطر الثالث:
Blue: [blue_value]
ورقة مرجعية
الـ tuple struct هو هيكل (struct) بدون حقول مسماة. يجمع بين فوائد إنشاء نوع جديد وبساطة الصف (tuple).
عرّف هيكل صف (tuple struct) باستخدام الكلمة المفتاحية struct متبوعة باسم النوع وأنواع الحقول بين قوسين:
struct Color(i32, i32, i32);أنشئ مثيلاً (instance) بتوفير القيم بين قوسين:
let red = Color(255, 0, 0);يمكنك الوصول إلى الحقول باستخدام تدوين النقطة (dot notation) مع فهرس الحقل:
red.0 // القيمة الأولى
red.1 // القيمة الثانية
red.2 // القيمة الثالثةجرّب بنفسك
use std::io;
// TODO: قم بتعريف هيكل Color tuple هنا
fn main() {
// قراءة قيمة اللون الأحمر
let mut red_input = String::new();
io::stdin().read_line(&mut red_input).expect("Failed to read line");
let red: i32 = red_input.trim().parse().expect("Invalid input");
// قراءة قيمة اللون الأخضر
let mut green_input = String::new();
io::stdin().read_line(&mut green_input).expect("Failed to read line");
let green: i32 = green_input.trim().parse().expect("Invalid input");
// قراءة قيمة اللون الأزرق
let mut blue_input = String::new();
io::stdin().read_line(&mut blue_input).expect("Failed to read line");
let blue: i32 = blue_input.trim().parse().expect("Invalid input");
// TODO: قم بإنشاء مثيل لهيكل Color tuple باستخدام قيم المدخلات
// TODO: قم بالوصول إلى كل مكون من مكونات اللون وطباعته باستخدام تدوين الفهرس
// Red: [value], Green: [value], Blue: [value] :التنسيق
}يتضمن هذا الدرس اختبارًا قصيرًا. ابدأ الدرس للإجابة عليه وتتبّع تقدمك.
جميع دروس 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الشرائح كمعاملات للدوالشرائح أخرىمراجعة - إيجاد الكلمة الأولى