المهايئات والمستهلكات
سلسلة العمليات
المهايئات والمستهلكات درس مجاني في Learn Rust Coding على CoddyKit. هذا هو الدرس 3 من أصل 4. يمكنك قراءة الدرس كاملاً أدناه مجاناً — ثم تمرن عليه مباشرة في المتصفح باستخدام محرر أكواد مدمج ومدرس ذكاء اصطناعي متاح 24/7. هذا الدرس جزء من مسار التعلم في Learn Rust Coding، وتقدمك يتزامن عبر الويب وتطبيق CoddyKit. تتضمن دورة Learn Rust Coding 4 دروس في المجموع.
نوعان من الدوال
تنقسم دوال المكرّرات إلى مجموعتين:
- المحوّلات تعيد مكرّرًا جديدًا وتكون كسولة (
mapوfilterوtake) - المستهلكات تشغّل المكرّر وتنتج قيمة نهائية (
sumوcollectوfor_each)
يتكون كل مسار من صفر أو أكثر من المحوّلات، يتبعها مستهلك واحد بالضبط.
take: تحديد العدد
تُرجع take(n) ما يصل إلى n من العناصر، ثم تتوقف. وهي محوِّل، لذلك تظل كسولة.
وتعمل حتى مع المكرّرات اللانهائية، إذ تأخذ فقط العدد الذي تطلبه.
fn main() {
let first_three: Vec<i32> = (1..).take(3).collect();
println!("{:?}", first_three);
}skip: تجاهل العناصر الأولى
تتخلص skip(n) من العناصر n الأولى وتُرجع الباقي. ادمجها مع take لالتقاط نافذة من منتصف التسلسل.
fn main() {
let window: Vec<i32> = (1..=10).skip(3).take(4).collect();
println!("{:?}", window);
}enumerate: الاقتران بفهرس
تُرجع enumerate صفوف (index, value) مع العد بدءًا من الصفر. وهي الطريقة الاصطلاحية للحصول على المواضع من دون عدّاد يدوي.
fn main() {
let letters = vec!['a', 'b', 'c'];
for (i, c) in letters.iter().enumerate() {
println!("{} -> {}", i, c);
}
}zip: التنقّل في مكرّرين معًا
تقرن zip العناصر من مكرّرين. وتتوقف عندما تنفد عناصر المكرّر الأقصر.
يفيد ذلك في دمج البيانات المتوازية، مثل الأسماء والدرجات.
fn main() {
let names = vec!["Ana", "Ben"];
let ages = vec![30, 25];
for (name, age) in names.iter().zip(ages.iter()) {
println!("{} is {}", name, age);
}
}rev: عكس الترتيب
تُرجع rev العناصر من الخلف إلى الأمام. وتتطلب مكرّرًا ذا طرفين، وهو ما توفره النطاقات والشرائح.
fn main() {
let backwards: Vec<i32> = (1..=5).rev().collect();
println!("{:?}", backwards);
}chain: ضم مكرّرين
تشغّل chain المكرّر الأول حتى نهايته، ثم تتابع بالمكرّر الثاني، كما لو كانا تسلسلًا واحدًا.
fn main() {
let joined: Vec<i32> = (1..=3).chain(10..=12).collect();
println!("{:?}", joined);
}fold: بناء قيمة واحدة
تُعدّ fold مستهلِكًا عامًا. فهي تبدأ بمجمّع، ثم تطوي كل عنصر فيه باستخدام إغلاق.
يُعدّ كثير من المستهلِكات مثل sum حالات خاصة من fold.
fn main() {
let product = (1..=5).fold(1, |acc, x| acc * x);
println!("5! = {}", product);
}any و all: مستهلِكات منطقية
تُرجع any القيمة true إذا حقق عنصر واحد على الأقل المسند؛ بينما تُرجع all القيمة true فقط إذا حققتها جميع العناصر.
وكلاهما يتوقف مبكرًا؛ إذ يتوقف فور معرفة الإجابة.
fn main() {
let nums = vec![2, 4, 6, 7];
println!("{}", nums.iter().all(|x| x % 2 == 0));
println!("{}", nums.iter().any(|x| x % 2 != 0));
}find و position
تُرجع find أول عنصر يطابق مسندًا على هيئة Option. أما position فتُرجع فهرس أول تطابق بدلًا من ذلك.
ويتوقف كلاهما مبكرًا عند العثور على أول تطابق.
fn main() {
let nums = vec![1, 3, 5, 8, 9];
println!("{:?}", nums.iter().find(|&&x| x % 2 == 0));
println!("{:?}", nums.iter().position(|&x| x % 2 == 0));
}تصميم مسارات المعالجة
ابنِ مسارات المعالجة بتكديس المحوّلات، ثم اختتمها بمستهلِك واحد. وحافظ على سهولة قراءتها: عملية واحدة في كل سطر.
ولأن المحوّلات كسولة، فإن السلاسل الطويلة منها لا تمر على البيانات إلا مرة واحدة.
تحقق سريع
المحوّلات في مقابل المستهلِكات.
مراجعة
استكشفتَ تسلسل العمليات:
- تظل المحوّلات (
takeوskipوenumerateوzipوrevوchain) كسولة - تُنجز المستهلِكات (
foldوanyوallوfindوposition) العمل - تتوقف المستهلِكات المنطقية ومستهلِكات البحث مبكرًا
- يتكوّن كل مسار معالجة من محوّلات يتبعها مستهلِك واحد
الأسئلة الشائعة
هل درس «المهايئات والمستهلكات» مجاني؟
نعم — نص درس «المهايئات والمستهلكات» كامل متاح مجاناً هنا على الويب. لتمرينه بشكل تفاعلي (محرر أكواد مدمج ومدرس ذكاء اصطناعي متاح 24/7) وفتح باقي دورة Learn Rust Coding، انتقل إلى CoddyKit PRO. تتضمن دورة Learn Rust Coding 4 دروس في المجموع.
ماذا ستتعلم في «المهايئات والمستهلكات»؟
سلسلة العمليات تتمرن على Learn Rust Coding مع أكواد عملية تشغلها مباشرة في المتصفح، ومدرس ذكاء اصطناعي متاح 24/7 يجيب على أسئلتك أثناء عملك.
هل أحتاج إلى خبرة سابقة لأبدأ Learn Rust Coding؟
لا تُشترط خبرة سابقة. Learn Rust Coding على CoddyKit منظم للمبتدئين حتى المتقدمين، لذا يمكنك البدء من هنا أو من البداية والتقدم بسرعتك الخاصة. هذا هو الدرس 3 من أصل 4.
كم من الوقت يستغرق درس «المهايئات والمستهلكات»؟
معظم دروس CoddyKit تستغرق حوالي 5–10 دقائق. كل منها موجز وتفاعلي، لذا تحرز تقدماً مستمراً وتستأنف من حيث توقفت عبر الويب والتطبيق.
هل يمكنني كتابة وتشغيل أكواد في درس Learn Rust Coding هذا؟
نعم. كل درس في Learn Rust Coding يتضمن محرر أكواد مدمج، لذا تكتب وتشغل أكواداً حقيقية مباشرة في متصفحك وتحصل على تعليقات فورية من الذكاء الاصطناعي — بدون إعداد محلي.
جميع الدروس في هذه الدورة
- سمة Iterator
- map وfilter وcollect
- المهايئات والمستهلكات
- المكررات المخصصة