0Pricing
Go Academy · درس

الدوال متغيرة المعاملات

قبول عدد متغير من المعاملات

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

ما الدالة متغيرة المعاملات؟

تقبل الدالة متغيرة المعاملات صفرًا أو أكثر من المعاملات من نوع محدد، وتجمعها في شريحة:

func sum(nums ...int) int {
    total := 0
    for _, n := range nums {
        total += n
    }
    return total
}

fmt.Println(sum(1, 2, 3, 4)) // 10

صيغة ...T

استخدموا ...T بوصفه نوع المعامل الأخير. ويكون هذا المعامل داخل الدالة من النوع []T:

  • يمكن استدعاؤها بصفر أو أكثر من المعاملات
  • يجب أن يكون المعامل متغير العدد هو الأخير
  • يُسمح بمعامل واحد متغير العدد فقط لكل دالة

توسيع شريحة

مرّروا شريحة موجودة إلى دالة متغيرة المعاملات باستخدام عامل التوسيع ...:

nums := []int{1, 2, 3, 4, 5}
total := sum(nums...)  // spread the slice
fmt.Println(total)     // 15

الدالة fmt.Println متغيرة المعاملات

تستخدم دوال كثيرة في المكتبة القياسية معاملات متغيرة العدد. توقيع fmt.Println هو func Println(a ...interface{}) (n int, err error)، وهي تقبل أي عدد من القيم من أي نوع.

الدالة append متغيرة المعاملات

الدالة المضمّنة append متغيرة المعاملات:

a := []int{1, 2, 3}
b := []int{4, 5, 6}
a = append(a, b...)   // append all of b into a
fmt.Println(a)         // [1 2 3 4 5 6]

المعاملات متغيرة العدد مع معاملات أخرى

تأتي المعاملات متغيرة العدد في النهاية. اخلطوا بين المعاملات الثابتة والمتغيرة العدد:

func logf(level string, msg string, args ...interface{}) {
    fmt.Printf("[%s] "+msg+"\n", append([]interface{}{level}, args...)...)
}

استدعاء متغير العدد من دون معاملات

يمكن استدعاء الدالة متغيرة المعاملات من دون معاملات، وستكون الشريحة nil (أو فارغة):

fmt.Println(sum())   // 0 — nil slice, loop runs 0 times

المعامل متغير العدد أم معامل الشريحة

متى تستخدمون معاملًا متغير العدد ومتى تستخدمون معامل شريحة:

  • متغير العدد: عندما يمرّر المستدعون قيمًا فردية مباشرةً (مثل sum(1,2,3))
  • الشريحة: عندما يمتلك المستدعون دائمًا مجموعة مُنشأة مسبقًا
  • المعامل متغير العدد أسهل استخدامًا عند مواضع الاستدعاء، بينما يعمل كلاهما بالطريقة نفسها داخل الدالة

تمرير معامل متغير العدد إلى دالة أخرى متغيرة المعاملات

مرّروا المعاملات متغيرة العدد إلى دالة أخرى باستخدام التوسيع:

func logError(args ...interface{}) {
    log.Println(args...) // forward to log.Println
}

إنشاء أنماط الخيارات

يُعدّ ...Option نمطًا شائعًا للإعدادات الاختيارية (الخيارات الوظيفية):

type Option func(*Server)

func NewServer(addr string, opts ...Option) *Server {
    s := &Server{addr: addr}
    for _, o := range opts {
        o(s)
    }
    return s
}

تحقّق سريع

كيف تمرّرون شريحة إلى دالة متغيرة المعاملات؟

مراجعة: الدوال متغيرة المعاملات

تجعل الدوال متغيرة المعاملات مواضع الاستدعاء واضحة ونظيفة:

  • تجمع ...T المعاملات النهائية في []T داخل الدالة
  • يمكن استدعاؤها بقيم فردية أو بتوسيع شريحة باستخدام slice...
  • الدوال المضمّنة مثل append وfmt.Println متغيرة المعاملات
  • يُسمح بمعامل واحد متغير العدد فقط، ويجب أن يكون الأخير
  • استخدموا نمط الخيارات الوظيفية لتصميم واجهات برمجية واضحة ومرنة

التالي: defer والدوال المجهولة والإغلاقات.

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

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

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

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

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

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

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

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

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

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

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

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

  1. أساسيات الدوال وتواقيعها
  2. قيم الإرجاع المتعددة
  3. الدوال متغيرة المعاملات
  4. ‏defer والدوال المجهولة وعمليات الإغلاق
← العودة إلى Go Academy