الاستدعاء الذاتي والقيم المعادة المتعددة
أنشئوا دوالاً تستدعي نفسها وتتفرع
الاستدعاء الذاتي والقيم المعادة المتعددة درس مجاني في Zig Academy على CoddyKit. هذا هو الدرس 4 من أصل 4. يمكنك قراءة الدرس كاملاً أدناه مجاناً — ثم تمرن عليه مباشرة في المتصفح باستخدام محرر أكواد مدمج ومدرس ذكاء اصطناعي متاح 24/7. هذا الدرس جزء من مسار التعلم في Zig Academy، وتقدمك يتزامن عبر الويب وتطبيق CoddyKit. تتضمن دورة Zig Academy 4 دروس في المجموع.
دالة تستدعي نفسها
الاستدعاء الذاتي هو أن تستدعي الدالة نفسها لحل جزء أصغر من المشكلة نفسها، خطوةً بعد خطوة. 🔁
كل استدعاء ذاتي يحتاج إلى حالة أساس
حالة الأساس هي نقطة التوقف. ومن دونها ستستدعي الدالة نفسها إلى الأبد، مما يؤدي إلى امتلاء المكدس.
الحالة التكرارية
تستدعي الحالة التكرارية الدالة مرة أخرى بمدخل أصغر، وتتقدم بثبات نحو حالة الأساس.
fn factorial(n: u64) u64 {
if (n <= 1) return 1;
return n * factorial(n - 1);
}تتبّع استدعاءً صغيرًا
يصبح استدعاء factorial(3) على الصورة 3 * factorial(2)، ثم 2 * factorial(1). تُعيد حالة الأساس القيمة 1، ثم تتضاعف النتائج عائدةً إلى الأعلى.
يستخدم الاستدعاء الذاتي المكدس
يضيف كل استدعاء إطارًا إلى المكدس. وتؤدي المستويات الكثيرة إلى امتلاء المكدس، لذا حافظ على عمق معقول للاستدعاء الذاتي.
تُحل مشكلات كثيرة باستخدام الحلقات بدلًا من ذلك
يمكن كتابة أي شيء تكراري باستخدام حلقة أيضًا. وتتجنب الحلقات إطارات المكدس الإضافية، لذا تكون غالبًا الخيار الأكثر أمانًا.
fn factorial(n: u64) u64 {
var acc: u64 = 1;
var i: u64 = 2;
while (i <= n) : (i += 1) acc *= i;
return acc;
}تُعيد الدالة نوعًا واحدًا
لدالة Zig نوع إرجاع واحد، لكن يمكن أن تحتوي على عبارات return كثيرة تُنتج جميعها ذلك النوع.
تتفرع عمليات الإرجاع المبكرة
يمكنك الإرجاع مبكرًا من فروع مختلفة. ويُعيد كل مسار قيمة من النوع المُعلن، وينهي الدالة فورًا.
fn sign(n: i32) i32 {
if (n > 0) return 1;
if (n < 0) return -1;
return 0;
}أعِد عدة قيم في بنية
لإعادة قيم متعددة، أعد بنية أو صفًا يجمعها في نتيجة واحدة.
fn divmod(a: u32, b: u32) struct { q: u32, r: u32 } {
return .{ .q = a / b, .r = a % b };
}فكّك النتيجة
يقرأ المستدعي الحقول المجمّعة بالاسم، مثل result.q وresult.r، لاستخدام كل جزء مُعاد.
const res = divmod(7, 2);
// res.q is 3, res.r is 1أعِد الأخطاء أيضًا
يمكن للدالة إرجاع اتحاد أخطاء، بحيث يشير أحد الفروع إلى الفشل، بينما تُعيد الفروع الأخرى قيمة عادية.
تحقق سريع
كتبت دالة للاستدعاء الذاتي لكنها لا تتوقف وتتسبب في انهيار البرنامج. ما الشيء الذي نسيتَه على الأرجح؟
مراجعة
يحتاج الاستدعاء الذاتي إلى حالة أساس وإلى استدعاء ذاتي بمدخل أصغر. وللدالة نوع إرجاع واحد، لكنها قد تملك مسارات إرجاع متعددة، كما تجمع البنية عدة نتائج. 🎯
الأسئلة الشائعة
هل درس «الاستدعاء الذاتي والقيم المعادة المتعددة» مجاني؟
نعم — نص درس «الاستدعاء الذاتي والقيم المعادة المتعددة» كامل متاح مجاناً هنا على الويب. لتمرينه بشكل تفاعلي (محرر أكواد مدمج ومدرس ذكاء اصطناعي متاح 24/7) وفتح باقي دورة Zig Academy، انتقل إلى CoddyKit PRO. تتضمن دورة Zig Academy 4 دروس في المجموع.
ماذا ستتعلم في «الاستدعاء الذاتي والقيم المعادة المتعددة»؟
أنشئوا دوالاً تستدعي نفسها وتتفرع تتمرن على Zig Academy مع أكواد عملية تشغلها مباشرة في المتصفح، ومدرس ذكاء اصطناعي متاح 24/7 يجيب على أسئلتك أثناء عملك.
هل أحتاج إلى خبرة سابقة لأبدأ Zig Academy؟
لا تُشترط خبرة سابقة. Zig Academy على CoddyKit منظم للمبتدئين حتى المتقدمين، لذا يمكنك البدء من هنا أو من البداية والتقدم بسرعتك الخاصة. هذا هو الدرس 4 من أصل 4.
كم من الوقت يستغرق درس «الاستدعاء الذاتي والقيم المعادة المتعددة»؟
معظم دروس CoddyKit تستغرق حوالي 5–10 دقائق. كل منها موجز وتفاعلي، لذا تحرز تقدماً مستمراً وتستأنف من حيث توقفت عبر الويب والتطبيق.
هل يمكنني كتابة وتشغيل أكواد في درس Zig Academy هذا؟
نعم. كل درس في Zig Academy يتضمن محرر أكواد مدمج، لذا تكتب وتشغل أكواداً حقيقية مباشرة في متصفحك وتحصل على تعليقات فورية من الذكاء الاصطناعي — بدون إعداد محلي.
جميع الدروس في هذه الدورة
- صياغة الدوال وأنواع الإرجاع
- تمرير القيم مقابل المراجع
- دوال pub ونطاق الرؤية
- الاستدعاء الذاتي والقيم المعادة المتعددة