الدرس 5 من 10
الدوال: ref و out
- 13 دقيقة
- 6 معايير للتصحيح
- 3 تلميحات
- إلى المطلوب
هدف الدرس
نسخة أم أصل، ونمط TryParse
الشرح
الوسيط يصل إلى الدالة نسخةً من القيمة: static void Reset(int hp) { hp = 0; } تصفّر نسختها، ويبقى متغيّر المستدعي كما هو. وتُرجع الدالة بـ return قيمة واحدة.
وref تمرّر المتغيّر نفسه لا نسخته، فما تغيّره الدالة يصل إلى المستدعي. وتُكتب في التعريف وعند الاستدعاء معًا: static void Heal(ref int hp, int amount) ثم Heal(ref playerHp, 30);، ويجب أن تكون للمتغيّر قيمة قبل أن يُمرَّر.
وout مخرج إضافي: الدالة ملزمة بأن تُسند إليه قيمة قبل أن تعود، ويستطيع المستدعي أن يعلن المتغيّر في الاستدعاء نفسه. وعليه يقوم نمط Try: int.TryParse("42", out int n) تُرجع true وتضع 42 في n، ومع "abc" تُرجع false وتضع صفرًا، بلا استثناء. أما int.Parse("abc") فترمي FormatException وتوقف البرنامج.
المطلوب
أكمل TryDivide(a, b, out result) على نمط Try: إن كان b صفرًا فأرجع false وضع في result صفرًا، وإلا فأرجع true وضع فيه a / b. وHeal(ref hp, amount) تزيد hp نفسها بمقدار amount دون أن تتجاوز 100. وParseOr(text, fallback) تُرجع بـ int.TryParse الرقمَ الذي في النصّ، أو fallback إن لم يكن رقمًا.
معايير التصحيح
6 معايير- TryDivide(10, 3) تُرجع true والناتج 3
- القسمة على صفر تُرجع false وصفرًا بلا انهيار
- Heal تعدّل المتغيّر نفسه: 50 + 30 = 80
- Heal لا تتجاوز 100
- ParseOr تقرأ الرقم من النصّ
- ParseOr تُرجع البديل لنصّ ليس رقمًا، بلا استثناء