Menu
Coddy logo textTech
flag Ar iconالعربيةdown icon

إعادة هيكلة الحلقات التكرارية

جزء من قسم Logic & Flow في رحلة C# على Coddy — الدرس 16 من 66.

إعادة هيكلة الحلقات (Refactoring loops) يمكن أن تحسن من قابلية قراءة الكود وقابلية صيانته.

استبدل الحلقة التقليدية بـ foreach للتبسيط:

string[] fruits = { "apple", "banana", "cherry" };

// قبل إعادة الهيكلة
for (int i = 0; i < fruits.Length; i++)
{
    Console.WriteLine(fruits[i]);
}

// بعد إعادة الهيكلة
foreach (string fruit in fruits)
{
    Console.WriteLine(fruit);
}

استخراج منطق الحلقات المعقد إلى دوال (methods):

int[] numbers = { 1, 2, 3, 4, 5, 6 };

// قبل إعادة الهيكلة (refactoring)
for (int i = 0; i < numbers.Length; i++)
{
    if (numbers[i] % 2 == 0)
    {
        Console.WriteLine($"{numbers[i]} is even");
    }
}

// بعد إعادة الهيكلة باستخدام دالة مساعدة
for (int i = 0; i < numbers.Length; i++)
{
    if (IsEven(numbers[i]))
    {
        Console.WriteLine($"{numbers[i]} is even");
    }
}

// دالة مساعدة
bool IsEven(int number)
{
    return number % 2 == 0;
}

قم بتقسيم الحلقات الكبيرة إلى حلقات أصغر وأكثر تركيزاً:

int[] data = { 1, 2, 3, 4, 5 };

// قبل: حلقة واحدة كبيرة تقوم بمهام متعددة
for (int i = 0; i < data.Length; i++)
{
    // معالجة البيانات
    data[i] = data[i] * 2;
    // طباعة النتائج
    Console.WriteLine(data[i]);
}

// بعد: حلقات منفصلة بأهداف واضحة
// معالجة البيانات
for (int i = 0; i < data.Length; i++)
{
    data[i] = data[i] * 2;
}

// طباعة النتائج
for (int i = 0; i < data.Length; i++)
{
    Console.WriteLine(data[i]);
}
challenge icon

التحدي

متوسط

قم بإنشاء طريقة (method) تسمى refactorArrayFilter تقوم بما يلي:

  1. تأخذ مصفوفة من الأعداد الصحيحة كمعامل (parameter)
  2. تنفذ نسختين من الكود لحساب الأعداد التي تقبل القسمة على 3:
    • النسخة الأصلية: استخدم حلقة for التقليدية مع جملة if
    • النسخة المحسنة (Refactored): استخدم حلقة foreach مع استخراج المنطق إلى طريقة مساعدة (helper method)
  3. تعيد العدد الناتج من النسخة المحسنة كعدد صحيح

على سبيل المثال، إذا أعطيت المصفوفة [3, 4, 6, 7, 9]، يجب أن تعيد الطريقة القيمة 3 لأن هناك ثلاثة أرقام (3، 6، و 9) تقبل القسمة على 3.

ملاحظة: لا تحتاج لطباعة أي شيء - فقط قم بإعادة العدد كعدد صحيح.

ورقة مرجعية

استخدم foreach بدلاً من حلقات for التقليدية لتكرار المصفوفة بشكل أبسط:

// حلقة for التقليدية
for (int i = 0; i < fruits.Length; i++)
{
    Console.WriteLine(fruits[i]);
}

// تمت إعادة الهيكلة باستخدام foreach
foreach (string fruit in fruits)
{
    Console.WriteLine(fruit);
}

استخرج منطق الحلقات المعقد إلى دوال مساعدة (helper methods):

// قبل إعادة الهيكلة
if (numbers[i] % 2 == 0)
{
    Console.WriteLine($"{numbers[i]} is even");
}

// بعد إعادة الهيكلة باستخدام دالة مساعدة
if (IsEven(numbers[i]))
{
    Console.WriteLine($"{numbers[i]} is even");
}

// دالة مساعدة
bool IsEven(int number)
{
    return number % 2 == 0;
}

قسّم الحلقات الكبيرة إلى حلقات أصغر ومركزة ذات مسؤوليات فردية:

// قبل: حلقة واحدة تقوم بأشياء متعددة
for (int i = 0; i < data.Length; i++)
{
    data[i] = data[i] * 2;  // معالجة
    Console.WriteLine(data[i]);  // طباعة
}

// بعد: حلقات منفصلة بأغراض واضحة
for (int i = 0; i < data.Length; i++)
{
    data[i] = data[i] * 2;  // معالجة فقط
}

for (int i = 0; i < data.Length; i++)
{
    Console.WriteLine(data[i]);  // طباعة فقط
}

جرّب بنفسك

public class RefactorArrayFilter
{
    // قم بتنفيذ طريقة refactorArrayFilter
    public static int refactorArrayFilter(int[] numbers)
    {
        // اكتب الكود الخاص بك هنا
        
    }
    
    // قم بتنفيذ أي طرق مساعدة تحتاجها
}
quiz iconاختبر نفسك

يتضمن هذا الدرس اختبارًا قصيرًا. ابدأ الدرس للإجابة عليه وتتبّع تقدمك.

جميع دروس Logic & Flow