قيود الأنواع العامة
قيّدوا معاملات النوع
قيود الأنواع العامة درس مجاني في Kotlin Academy على CoddyKit. هذا هو الدرس 4 من أصل 4. يمكنك قراءة الدرس كاملاً أدناه مجاناً — ثم تمرن عليه مباشرة في المتصفح باستخدام محرر أكواد مدمج ومدرس ذكاء اصطناعي متاح 24/7. هذا الدرس جزء من مسار التعلم في Kotlin Academy، وتقدمك يتزامن عبر الويب وتطبيق CoddyKit. تتضمن دورة Kotlin Academy 4 دروس في المجموع.
تقييد وسائط الأنواع
أحيانًا يجب أن يقبل النوع العام أنواعًا محددة فقط، مثل الأنواع القابلة للمقارنة أو الأنواع التي ترث من نوع أساسي. تضع القيود العامة حدًا أعلى لوسيط النوع.
الحد الأعلى الافتراضي
من دون قيد، يكون الحد الأعلى لوسيط النوع هو Any?، ولذلك يقبل أي نوع، بما في ذلك الأنواع القابلة للقيمة الفارغة. للسماح بالأنواع غير القابلة للقيمة الفارغة فقط، قيّده بالنوع Any.
fun <T : Any> requireNonNull(value: T): T {
return value
}
fun main() {
println(requireNonNull(42))
}حد أعلى واحد
استخدم T : Bound لفرض أن يكون T نوعًا فرعيًا من Bound. يتيح لك ذلك استدعاء أعضاء النوع ذي الحد داخل الدالة.
fun <T : Number> sumDoubled(a: T, b: T): Double {
return a.toDouble() * 2 + b.toDouble() * 2
}
fun main() {
println(sumDoubled(3, 4))
println(sumDoubled(1.5, 2.5))
}قيد Comparable
من القيود الشائعة Comparable<T>، إذ يتيح لك مقارنة العناصر باستخدام < أو > أو compareTo.
fun <T : Comparable<T>> maxOf2(a: T, b: T): T {
return if (a > b) a else b
}
fun main() {
println(maxOf2(3, 9))
println(maxOf2("apple", "banana"))
}استدعاء أعضاء الحد
داخل النوع العام المقيّد، يعرف المصرّف أن T يوفّر واجهة برمجة التطبيقات الخاصة بالحد، ولذلك يمكنك استدعاء تلك الدوال مباشرةً من دون تحويل النوع.
fun <T : CharSequence> describe(value: T): String {
return "Length is ${value.length}"
}
fun main() {
println(describe("hello"))
println(describe(StringBuilder("hi")))
}حدود متعددة باستخدام where
لإضافة أكثر من حد واحد، استخدم جملة where. عندئذ يجب أن يستوفي T جميع القيود المذكورة.
fun <T> copyWhenValid(value: T): T
where T : CharSequence, T : Comparable<T> {
return value
}
fun main() {
println(copyWhenValid("text"))
}الحدود في الفئات
تعمل القيود مع الفئات العامة أيضًا، إذ تقيّد الأنواع التي يمكن إنشاء مثيل للفئة باستخدامها.
class NumberBox<T : Number>(val value: T) {
fun asDouble(): Double = value.toDouble()
}
fun main() {
val box = NumberBox(10)
println(box.asDouble())
}القيد يتيح العمليات
الهدف الأساسي من القيد هو إتاحة العمليات. من دون T : Number، لن تتمكن من استدعاء toDouble()؛ إذ يضمن الحد وجود هذه الدالة.
الحد غير القابل للقيمة الفارغة عمليًا
يؤدي التقييد بالنوع Any إلى رفض الوسائط القابلة للقيمة الفارغة أثناء الترجمة، وهي طريقة مفيدة لفرض استخدام أنواع عامة غير قابلة للقيمة الفارغة.
fun <T : Any> firstNonNull(a: T, b: T): T = a
fun main() {
println(firstNonNull("x", "y"))
// firstNonNull(null, "y") would not compile
}الدمج مع التباين
تحل القيود والتباين مشكلتين مختلفتين: يتحكم التباين (in/out) في علاقات الأنواع الفرعية، بينما تقيّد القيود (حدود : وجملة where) الأنواع المسموح بها. ويمكن استخدامهما معًا.
تصميم قيود جيدة
أضف قيدًا فقط عندما تحتاج إلى قدرة يوفرها النوع. الإفراط في التقييد يقلل قابلية إعادة الاستخدام، بينما يؤدي ضعف التقييد إلى فرض تحويلات للأنواع. استخدم أكثر نوع عام يوفّر العمليات التي تستعملها.
تحقق سريع
كيف تفرض استيفاء وسيط النوع لأكثر من حد واحد؟
مراجعة
تضع القيود العامة حدودًا عليا باستخدام T : Bound، أو باستخدام where للحدود المتعددة، مما يتيح عمليات النوع ذي الحد ويستبعد الأنواع غير المتوافقة. يفرض التقييد بالنوع Any استخدام أنواع غير قابلة للقيمة الفارغة. وبدمج القيود مع التباين، يمكنك تصميم أنواع عامة آمنة وواضحة. بهذا يكتمل مقرر الأنواع العامة والتباين.
الأسئلة الشائعة
هل درس «قيود الأنواع العامة» مجاني؟
نعم — نص درس «قيود الأنواع العامة» كامل متاح مجاناً هنا على الويب. لتمرينه بشكل تفاعلي (محرر أكواد مدمج ومدرس ذكاء اصطناعي متاح 24/7) وفتح باقي دورة Kotlin Academy، انتقل إلى CoddyKit PRO. تتضمن دورة Kotlin Academy 4 دروس في المجموع.
ماذا ستتعلم في «قيود الأنواع العامة»؟
قيّدوا معاملات النوع تتمرن على Kotlin Academy مع أكواد عملية تشغلها مباشرة في المتصفح، ومدرس ذكاء اصطناعي متاح 24/7 يجيب على أسئلتك أثناء عملك.
هل أحتاج إلى خبرة سابقة لأبدأ Kotlin Academy؟
لا تُشترط خبرة سابقة. Kotlin Academy على CoddyKit منظم للمبتدئين حتى المتقدمين، لذا يمكنك البدء من هنا أو من البداية والتقدم بسرعتك الخاصة. هذا هو الدرس 4 من أصل 4.
كم من الوقت يستغرق درس «قيود الأنواع العامة»؟
معظم دروس CoddyKit تستغرق حوالي 5–10 دقائق. كل منها موجز وتفاعلي، لذا تحرز تقدماً مستمراً وتستأنف من حيث توقفت عبر الويب والتطبيق.
هل يمكنني كتابة وتشغيل أكواد في درس Kotlin Academy هذا؟
نعم. كل درس في Kotlin Academy يتضمن محرر أكواد مدمج، لذا تكتب وتشغل أكواداً حقيقية مباشرة في متصفحك وتحصل على تعليقات فورية من الذكاء الاصطناعي — بدون إعداد محلي.
جميع الدروس في هذه الدورة
- الدوال والفئات العامة
- التباين في موضع التصريح
- التباين في موضع الاستخدام
- قيود الأنواع العامة