0Pricing
Go Academy · درس

قيم الإرجاع المتعددة

إرجاع tuples ونمط error

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

لماذا الإرجاعات المتعددة؟

يمكن لدوال Go إرجاع قيم متعددة، مما يلغي الحاجة إلى معاملات الإخراج أو الاستثناءات. والنمط الأكثر شيوعًا هو إرجاع نتيجة وخطأ:

func divide(a, b float64) (float64, error) {
    if b == 0 {
        return 0, errors.New("division by zero")
    }
    return a / b, nil
}

معالجة الإرجاعات المتعددة

يتلقى المستدعون جميع قيم الإرجاع في صورة صفّ. استخدم _ لتجاهل القيم التي لا تحتاج إليها:

result, err := divide(10, 3)
if err != nil {
    log.Fatal(err)
}
fmt.Println(result)

value, _ := divide(8, 2) // discard error

قيم الإرجاع المسمّاة

يمكن تسمية قيم الإرجاع، فتحويلها إلى متغيرات داخل الدالة:

func minMax(nums []int) (min, max int) {
    min, max = nums[0], nums[0]
    for _, n := range nums[1:] {
        if n < min { min = n }
        if n > max { max = n }
    }
    return // naked return
}

الإرجاع الضمني

يُرجع return من دون معاملات متغيرات الإرجاع المسمّاة. استخدموا ذلك باعتدال، وفقط في الدوال القصيرة التي توضّح أسماؤها نفسها الغرض منها:

  • الدوال القصيرة: مقبول
  • الدوال الطويلة: يضرّ بقابلية القراءة، لذا يُفضَّل استخدام عمليات إرجاع صريحة

نمط (value, error)

النمط الأساسي لمعالجة الأخطاء في Go:

func readConfig(path string) (Config, error) {
    data, err := os.ReadFile(path)
    if err != nil {
        return Config{}, fmt.Errorf("read config: %w", err)
    }
    var cfg Config
    return cfg, json.Unmarshal(data, &cfg)
}

لا تتجاهلوا الأخطاء مطلقًا

قد يكون تجاهل الأخطاء باستخدام _ خطرًا. أفضل الممارسات:

  • تحقّقوا من كل خطأ، ما لم يكن لديكم سبب محدد لعدم القيام بذلك
  • أضيفوا سياقًا إلى الأخطاء باستخدام fmt.Errorf("op: %w", err)
  • استخدموا log.Fatal أو panic فقط عند حدود البرنامج، وليس في أعماق المكتبات

الإرجاع بثلاث قيم

تُرجع بعض الدوال ثلاث قيم، مع أن ذلك أقل شيوعًا:

func parseIPPort(s string) (ip string, port int, err error) {
    // ... parsing logic
    return
}

إرجاع البُنى أم قيم متعددة

متى نُرجع بنيةً ومتى نُرجع قيمًا متعددة:

  • قيمتان أو ثلاث قيم مترابطة بشدة: لا بأس باستخدام الإرجاع المتعدد
  • أربع قيم أو أكثر، أو وجود حقول اختيارية: استخدموا بنيةً
  • نمط (value, error): استخدموا دائمًا الإرجاع المتعدد

الإسناد إلى متغيرات موجودة

استخدموا = (وليس :=) عند الإسناد إلى متغيرات سبق تعريفها خارج الاستدعاء:

var cfg Config
var err error
cfg, err = loadConfig()
if err != nil { ... }

الإرجاع المتعدد في تسلسل استدعاءات الدوال

لا تدعم Go تسلسل استدعاءات الدوال مباشرةً على قيم الإرجاع المتعددة (بخلاف Result.map في Rust). استخدموا متغيرات وسيطة لمعالجة الأخطاء في كل خطوة:

data, err := fetchData(url)
if err != nil { return err }
parsed, err := parseData(data)
if err != nil { return err }
return save(parsed)

تحقّق سريع

ماذا يفعل الإرجاع الضمني في Go؟

مراجعة: قيم الإرجاع المتعددة

الإرجاع المتعدد من أساسيات أسلوب Go:

  • يمكن للدوال إرجاع قيم متعددة في قائمة بين قوسين
  • يظهر نمط (value, error) في كل مكان تقريبًا، لذا تحقّقوا دائمًا من الخطأ
  • تتيح متغيرات الإرجاع المسمّاة استخدام الإرجاع الضمني، فاستخدموه باعتدال
  • استخدموا _ للتخلّي عن القيم التي لا تحتاجون إليها
  • فضّلوا الإرجاع المتعدد على معاملات الإخراج للحصول على واجهات برمجية أنظف

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

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

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

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

ماذا ستتعلم في «قيم الإرجاع المتعددة»؟

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

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

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

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

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

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

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

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

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