Go Academy · درس

مشكلة كثرة المعاملات

افهم سبب تعقّد البُناة

الدرس 1 من 413 خطوة

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

لماذا تصبح البُناة معقّدة

لا تحتوي Go على معاملات افتراضية أو معاملات مسماة. ومع ازدياد خيارات النوع، يصبح توقيع الباني طويلًا ومربكًا وعرضة للأخطاء.

انفجار معاملات الباني

تخيّل خادمًا له المضيف والمنفذ والمهلة الزمنية وTLS وإعادات المحاولة. يحتاج باني واحد إلى جميع هذه القيم.

package main

import "fmt"

func NewServer(host string, port, timeout, retries int, tls bool) {
	fmt.Println(host, port, timeout, retries, tls)
}

func main() {
	NewServer("localhost", 8080, 30, 3, false)
}

مشكلة سهولة القراءة

تصبح مواضع الاستدعاء صفًا طويلًا من القيم الموضعية. NewServer("localhost", 8080, 30, 3, false) — أي رقم يمثل المهلة الزمنية؟ وأيها يمثل عدد إعادات المحاولة؟

سهولة الخلط بينها

يمكن تبديل معاملي int المتجاورين بسهولة، ولن يكتشف المصرّف ذلك.

package main

import "fmt"

func connect(timeout, retries int) { fmt.Println("timeout", timeout, "retries", retries) }

func main() {
	connect(3, 30)
}

أسلوب بنية الإعدادات

أحد البدائل هو تمرير بنية إعدادات. هذا أفضل، لكن كل حقل يحصل على قيمته الصفرية افتراضيًا، وقد تكون هذه القيمة غير صحيحة، مثل مهلة زمنية تساوي 0.

package main

import "fmt"

type Config struct {
	Host    string
	Port    int
	Timeout int
}

func NewServer(c Config) { fmt.Printf("%+v\n", c) }

func main() {
	NewServer(Config{Host: "localhost", Port: 8080})
}

فخ القيمة الصفرية

عند استخدام بنية إعدادات، يؤدي حذف Timeout بصمت إلى ضبطه على 0. ولا يمكنك التمييز بين «استخدم القيمة الافتراضية» و«اضبط القيمة صراحةً على صفر».

بُناة متعددة

يتمثل مسار آخر في إنشاء بُناة كثيرة — NewServer وNewServerWithTLS وNewServerWithTimeout — مما يؤدي إلى انفجار توافقي.

التوافق مع الإصدارات السابقة

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

ما نريده

  • قيم افتراضية معقولة
  • تجاوز ما تحتاج إليه فقط
  • مواضع استدعاء توضّح نفسها
  • إضافة خيارات لاحقًا من دون كسر المستدعين

إليك نمط الخيارات الوظيفية

يحل نمط الخيارات الوظيفية كل هذه المشكلات: مرّر قائمة متغيرة الطول من دوال الإعداد. ستبني الدروس التالية هذا النمط خطوةً خطوة.

معاينة

الهدف هو استدعاءات مثل NewServer("localhost", WithPort(9000), WithTLS()) — واضحة واختيارية وقابلة للتوسعة.

اختبار سريع

اختبر فهمك للمشكلة.

مراجعة

رأيت لماذا تشكّل البُناة ذات المعاملات الكثيرة مشكلة.

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

تحل الخيارات الوظيفية كل هذه المشكلات.

البدء مجانًا

تعلم Go مع معلم ذكاء اصطناعي — مجانًا

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

الدورات
51
الدروس
203

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

هل درس «مشكلة كثرة المعاملات» مجاني؟

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

ماذا ستتعلم في «مشكلة كثرة المعاملات»؟

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

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

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

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

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

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

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

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

  1. مشكلة كثرة المعاملات
  2. دوال الخيارات
  3. إنشاء واجهة برمجية مرنة
  4. القيم الافتراضية والتحقّق
← العودة إلى Go Academy