Go Academy · درس

القيود: comparable والواجهات

قيود الاتحاد والنوع المضمّن comparable

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

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

ما هو القيد؟

يقيّد القيد الأنواع التي يمكن استخدامها كوسيطة نوع. ومن دون قيد، يكون معامل النوع any (الواجهة الفارغة؛ ولا يدعم إلا الإسناد والمقارنة باستخدام ==).

قيد any

يُعد any (اسمًا مستعارًا لـ interface{}) أوسع القيود؛ فجميع الأنواع تستوفيه. ولا يمكنكم استخدام إلا العمليات التي تدعمها جميع الأنواع، مثل الإسناد والتمرير إلى معاملات الواجهة.

func Print[T any](v T) { fmt.Println(v) }

قيد comparable

يقيّد comparable معامل النوع بالأنواع التي تدعم == و!=. وهو مطلوب لاستخدام النوع كمفتاح لخريطة أو في عمليات فحص المساواة.

func Contains[T comparable](s []T, v T) bool {
    for _, item := range s {
        if item == v { return true }
    }
    return false
}

قيود الواجهة

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

type Stringer interface { String() string }

func Print[T Stringer](v T) {
    fmt.Println(v.String())
}

قيود الاتحاد

استخدموا اتحادًا من الأنواع مع | لتقييد النوع بمجموعة من الأنواع الملموسة. ويتيح ذلك استخدام عوامل (مثل +) لا تنتمي إلى أي واجهة.

type Number interface {
    int | int64 | float64
}

func Sum[T Number](s []T) T {
    var total T
    for _, v := range s { total += v }
    return total
}

~T للأنواع الأساسية

استخدم ~T لتضمين T وجميع الأنواع التي يكون T نوعها الأساسي، مثل الأنواع المخصصة المعرّفة كالتالي: type MyInt int.

type Integer interface { ~int | ~int64 }

type MyInt int
// MyInt satisfies Integer because its underlying type is int

golang.org/x/exp/constraints

توفر الحزمة constraints واجهات القيود الشائعة: Ordered (تدعم <)، وInteger، وFloat، وSigned، وUnsigned.

import "golang.org/x/exp/constraints"

func Min[T constraints.Ordered](a, b T) T {
    if a < b { return a }
    return b
}

حزمة cmp (Go 1.21)

أضاف Go 1.21 قيد cmp.Ordered والدالتين cmp.Compare وcmp.Less إلى المكتبة القياسية، مستبدلًا الاعتماد على exp/constraints.

import "cmp"
func Min[T cmp.Ordered](a, b T) T { return min(a, b) }

دمج القيود

ضمّن واجهات متعددة في قيد واحد لفرض خصائص متعددة:

type Printable interface {
    comparable
    fmt.Stringer
}

استنتاج القيود

يستنتج المصرّف معلمات الأنواع من الوسائط. إذا كان القيد واسعًا جدًا مثل any، فقد يلزم تحديد معلمات الأنواع صراحةً لتوجيه الاستنتاج.

متى تستخدم comparable

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

تحقق سريع

ماذا تعني البادئة ~ في قيد اتحاد مثل ~int؟

مراجعة: القيود

النقاط الأساسية:

  • any: الأوسع نطاقًا؛ comparable: يدعم ==؛ interface: يتطلب أساليب
  • الاتحاد (int|float64) يتيح استخدام العوامل الحسابية
  • ~T يضم الأنواع المسماة التي يكون T نوعها الأساسي
  • cmp.Ordered (في Go 1.21 والإصدارات الأحدث) لقيود <، >، <=، >=
البدء مجانًا

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

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

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

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

هل درس «القيود: comparable والواجهات» مجاني؟

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

ماذا ستتعلم في «القيود: comparable والواجهات»؟

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

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

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

كم من الوقت يستغرق درس «القيود: comparable والواجهات»؟

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

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

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

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

  1. صياغة معاملات الأنواع
  2. القيود: comparable والواجهات
  3. هياكل البيانات العامة
  4. التعميمات عمليًا: المشكلات
← العودة إلى Go Academy