0Pricing
C# Academy · درس

التصريح عن الدوال المحلية

عرّفوا دوالًا مساعدة داخل الأساليب

التصريح عن الدوال المحلية درس مجاني في C# Academy على CoddyKit. هذا هو الدرس 1 من أصل 4. يمكنك قراءة الدرس كاملاً أدناه مجاناً — ثم تمرن عليه مباشرة في المتصفح باستخدام محرر أكواد مدمج ومدرس ذكاء اصطناعي متاح 24/7. هذا الدرس جزء من مسار التعلم في C# Academy، وتقدمك يتزامن عبر الويب وتطبيق CoddyKit. تتضمن دورة C# Academy 4 دروس في المجموع.

ما الدالة المحلية؟

الدالة المحلية هي أسلوب يُعرّف داخل أسلوب آخر. ولا تكون مرئية إلا داخل العضو الحاوي لها، مما يُبقي منطق المساعدة قريبًا من موضع استخدامه وخارج واجهة الفئة.

تعريف دالة محلية

اكتب الدالة المحلية مثل أي أسلوب عادي، مع تضمينها داخل جسم الأسلوب. ويمكنك استدعاؤها قبل تعريفها أو بعده ضمن النطاق نفسه.

using System;

public class Program
{
    public static void Main()
    {
        int Square(int n) => n * n;

        Console.WriteLine(Square(4));
        Console.WriteLine(Square(7));
    }
}

الدوال المحلية ذات الجسم الكتلي

يمكن أن تحتوي الدوال المحلية على أجسام كتلية كاملة تتضمن عدة عبارات وحلقات ومتغيرات محلية خاصة بها، تمامًا مثل أي أسلوب.

using System;

public class Program
{
    public static void Main()
    {
        int Factorial(int n)
        {
            int result = 1;
            for (int i = 2; i <= n; i++) result *= i;
            return result;
        }

        Console.WriteLine(Factorial(5));
    }
}

تحسين سهولة القراءة

تتيح لك الدوال المحلية تسمية جزء من المنطق من دون إقحام الأسلوب الخاص داخل الفئة إذا كان أسلوب واحد فقط يستخدمه. وبذلك يبقى الكود المرتبط متجاورًا.

using System;

public class Program
{
    public static void Main()
    {
        string Format(string label, int value) => label + ": " + value;

        Console.WriteLine(Format("Score", 90));
        Console.WriteLine(Format("Level", 3));
    }
}

الاستدعاء الذاتي باستخدام الدوال المحلية

يمكن للدالة المحلية استدعاء نفسها، مما يجعل التعبير عن الاستدعاء الذاتي سهلًا في موضع الحاجة إليه مباشرةً.

using System;

public class Program
{
    public static void Main()
    {
        int Fib(int n) => n < 2 ? n : Fib(n - 1) + Fib(n - 2);

        for (int i = 0; i < 7; i++)
            Console.Write(Fib(i) + " ");
        Console.WriteLine();
    }
}

يمكن تعريف الدوال المحلية بعد استخدامها

على خلاف المتغيرات المحلية، يمكن الإشارة إلى الدالة المحلية في وقت سابق من الأسلوب، قبل موضع تعريفها. إذ يحل المترجم النطاق الحاوي بأكمله.

using System;

public class Program
{
    public static void Main()
    {
        Console.WriteLine(Greet("Ada")); // used before declared

        string Greet(string name) => "Hello, " + name;
    }
}

المعلمات وأنواع الإرجاع

تدعم الدوال المحلية كل ما تدعمه الأساليب العادية: المعلمات المتعددة، وقيم الإرجاع، ومعلمات ref وout، والأنواع العامة.

using System;

public class Program
{
    public static void Main()
    {
        bool TryHalve(int n, out int half)
        {
            half = n / 2;
            return n % 2 == 0;
        }

        if (TryHalve(10, out int result))
            Console.WriteLine("half is " + result);
    }
}

الدوال المحلية العامة

يمكن أن تكون الدالة المحلية عامة، وأن تعتمد في معلماتها على وسائط أنواع خاصة بها، مستقلة عن الأسلوب الحاوي لها.

using System;

public class Program
{
    public static void Main()
    {
        T Echo<T>(T value)
        {
            Console.WriteLine("echoing " + value);
            return value;
        }

        int n = Echo(42);
        string s = Echo("hi");
        Console.WriteLine(n + " " + s);
    }
}

تداخل الدوال المحلية

يمكن للدوال المحلية أن تحتوي بدورها على دوال محلية. ولا تكون الدوال الداخلية مرئية إلا داخل الدالة الأصلية، مما يتيح إنشاء طبقات مساعدة محددة النطاق بدقة.

using System;

public class Program
{
    public static void Main()
    {
        int Compute(int x)
        {
            int Double(int n) => n * 2;
            int AddOne(int n) => n + 1;
            return Double(AddOne(x));
        }

        Console.WriteLine(Compute(5));
    }
}

الدوال المحلية للتحقق من الوسائط

من الأنماط الشائعة: التحقق من صحة الوسائط بشكل فوري، ثم تأجيل العمل الفعلي إلى دالة محلية. ويكون ذلك مفيدًا خصوصًا مع التكرارات، حتى يُنفذ التحقق فورًا.

using System;
using System.Collections.Generic;

public class Program
{
    static IEnumerable<int> Range(int start, int count)
    {
        if (count < 0) throw new ArgumentOutOfRangeException(nameof(count));
        return Iterate();

        IEnumerable<int> Iterate()
        {
            for (int i = 0; i < count; i++) yield return start + i;
        }
    }

    public static void Main()
    {
        foreach (var n in Range(10, 3)) Console.WriteLine(n);
    }
}

متى تستخدم الدوال المحلية

استخدم دالة محلية عندما تكون الدالة المساعدة مستخدمة في أسلوب واحد فقط، أو تستفيد من اسم وصفي، أو تحتاج إلى الوصول إلى الحالة المحلية للأسلوب. فهي تحافظ على نظافة الفئة وتجعل المنطق سهل الاكتشاف.

using System;

public class Program
{
    public static void Main()
    {
        int total = 0;
        void Add(int n) => total += n; // helper tied to this method
        Add(3); Add(4); Add(5);
        Console.WriteLine(total);
    }
}

تحقق سريع

استرجع مفهوم الدالة المحلية.

مراجعة

الدوال المحلية هي دوال مساعدة مسماة ومتداخلة داخل أسلوب.

  • لا تكون مرئية إلا داخل العضو الحاوي لها.
  • تدعم المعلمات وقيم الإرجاع وout/ref والأنواع العامة والاستدعاء الذاتي.
  • يمكن الإشارة إليها قبل تعريفها.
  • تُعد مناسبة جدًا للدوال المساعدة المستخدمة مرة واحدة وللتحقق الفوري من الوسائط في التكرارات.

الأسئلة الشائعة

هل درس «التصريح عن الدوال المحلية» مجاني؟

نعم — نص درس «التصريح عن الدوال المحلية» كامل متاح مجاناً هنا على الويب. لتمرينه بشكل تفاعلي (محرر أكواد مدمج ومدرس ذكاء اصطناعي متاح 24/7) وفتح باقي دورة C# Academy، انتقل إلى CoddyKit PRO. تتضمن دورة C# Academy 4 دروس في المجموع.

ماذا ستتعلم في «التصريح عن الدوال المحلية»؟

عرّفوا دوالًا مساعدة داخل الأساليب تتمرن على C# Academy مع أكواد عملية تشغلها مباشرة في المتصفح، ومدرس ذكاء اصطناعي متاح 24/7 يجيب على أسئلتك أثناء عملك.

هل أحتاج إلى خبرة سابقة لأبدأ C# Academy؟

لا تُشترط خبرة سابقة. C# Academy على CoddyKit منظم للمبتدئين حتى المتقدمين، لذا يمكنك البدء من هنا أو من البداية والتقدم بسرعتك الخاصة. هذا هو الدرس 1 من أصل 4.

كم من الوقت يستغرق درس «التصريح عن الدوال المحلية»؟

معظم دروس CoddyKit تستغرق حوالي 5–10 دقائق. كل منها موجز وتفاعلي، لذا تحرز تقدماً مستمراً وتستأنف من حيث توقفت عبر الويب والتطبيق.

هل يمكنني كتابة وتشغيل أكواد في درس C# Academy هذا؟

نعم. كل درس في C# Academy يتضمن محرر أكواد مدمج، لذا تكتب وتشغل أكواداً حقيقية مباشرة في متصفحك وتحصل على تعليقات فورية من الذكاء الاصطناعي — بدون إعداد محلي.

جميع الدروس في هذه الدورة

  1. التصريح عن الدوال المحلية
  2. الإغلاقات والمتغيرات الملتقطة
  3. الدوال المحلية الساكنة
  4. الدوال المحلية مقابل Lambdas
← العودة إلى C# Academy