الدرس 5 من 10
الدوال مع ref وout
- 13 دقيقة
- 6 فحوص
- 3 تلميحات
- إلى المطلوب
هدف الدرس
النسخة والأصل ونمط TryParse
الشرح
حين تمرّر متغيّرًا إلى دالة تصلها نسخة من قيمته، فالدالة static void Reset(int hp) { hp = 0; } تصفّر نسختها فقط، ويبقى المتغيّر الأصلي عند من استدعاها كما هو. والدالة تُرجع بـ return قيمة واحدة فقط.
أما ref فتمرّر المتغيّر نفسه لا نسخة منه، فأي تغيير تجريه الدالة يظهر في المتغيّر الأصلي. وتكتب ref في تعريف الدالة وعند استدعائها معًا، مثل static void Heal(ref int hp, int amount) ثم Heal(ref playerHp, 30);، ويجب أن يحمل المتغيّر قيمة قبل أن تمرّره.
وتستعمل out حين تريد أن تُخرج الدالة قيمة إضافية، فالدالة ملزمة بأن تضع قيمة في متغيّر out قبل أن تنتهي، ويمكنك أن تعرّف هذا المتغيّر داخل الاستدعاء نفسه. وعلى هذه الفكرة يقوم نمط Try، فالدالة int.TryParse("42", out int n) تُرجع true وتضع 42 في n، وإذا أعطيتها "abc" أرجعت false ووضعت صفرًا دون أن ترمي استثناءً (exception). أما 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 فحوص- مع 10 و3 تُرجع الدالة TryDivide القيمة true والناتج 3
- القسمة على صفر تُرجع false وصفرًا دون أن يتوقّف البرنامج
- الدالة Heal تعدّل المتغيّر نفسه، فيصير 50 + 30 = 80
- الدالة Heal لا تتجاوز 100
- الدالة ParseOr تقرأ الرقم من النصّ
- الدالة ParseOr تُرجع البديل إذا لم يكن النصّ رقمًا، دون استثناء