تعريف Closure بسيط
جزء من قسم Logic & Flow في رحلة Rust على Coddy — الدرس 60 من 66.
الآن بعد أن فهمت ماهية الـ closures، دعنا نتعلم كيفية تعريفها واستخدامها في الكود الخاص بك. إن أبسط طريقة لإنشاء closure هي تعيينه لمتغير، مما يتيح لك استدعاءه لاحقاً.
إليك كيفية تعريف إغلاق (closure) أساسي لا يأخذ أي معاملات:
let my_closure = || {
println!("Hello from the closure!");
};لاحظ الأشرطة الرأسية الفارغة || - يشير هذا إلى أن الإغلاق لا يأخذ أي وسائط. تحتوي الأقواس المتعرجة على الكود الذي يتم تشغيله عند استدعاء الإغلاق.
لاستدعاء الـ closure الخاص بك، يمكنك استخدامه تماماً مثل الدالة عن طريق إضافة أقواس بعد اسم المتغير:
let my_closure = || {
println!("Hello from the closure!");
};
my_closure(); // هذا يستدعي الـ closure ويطبع الرسالةالتحدي
سهلستتلقى مدخلاً واحداً يحتوي على رسالة. قم بإنشاء closure لا يأخذ أي معاملات ويقوم بطباعة هذه الرسالة. قم بتخزين الـ closure في متغير، ثم قم باستدعائه لعرض الرسالة.
المتطلبات:
- اقرأ رسالة الإدخال وقم بإزالة المسافات البيضاء (trim)
- أنشئ closure باستخدام صيغة
||يقوم بطباعة الرسالة - قم بتخزين الـ closure في متغير
- استدعِ الـ closure لتنفيذه
الإدخال:
- سطر واحد يحتوي على رسالة (مثلاً،
Welcome to Rust!)
المخرجات:
- الرسالة المطبوعة بواسطة الـ closure
ورقة مرجعية
يتم تعريف الإغلاق (closure) باستخدام الأشرطة العمودية || ويمكن تخزينه في متغير:
let my_closure = || {
println!("Hello from the closure!");
};لاستدعاء الإغلاق، استخدم الأقواس بعد اسم المتغير:
my_closure(); // ينفذ الإغلاقجرّب بنفسك
use std::io;
fn main() {
// قراءة المدخلات
let mut message = String::new();
io::stdin().read_line(&mut message).expect("Failed to read line");
let message = message.trim();
// TODO: قم بإنشاء closure يطبع الرسالة وقم بتخزينه في متغير
// TODO: قم باستدعاء الـ closure لطباعة الرسالة
}يتضمن هذا الدرس اختبارًا قصيرًا. ابدأ الدرس للإجابة عليه وتتبّع تقدمك.
جميع دروس 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الشرائح كمعاملات للدوالشرائح أخرىمراجعة - إيجاد الكلمة الأولى