استخدام دالة معممة
جزء من قسم مقدمة إلى Luau في رحلة Lua على Coddy — الدرس 59 من 73.
أنت لا تخبر identity مطلقًا بما هو T — يقوم فاحص الأنواع باستنتاجه بنفسه. هذا ما يُعرف بـ استنتاج النوع (type inference): عند كل موضع استدعاء، ينظر Luau إلى الوسيط ويحل قيمة T:
local word = identity("Luau") -- T مستنتج كـ string
local count = identity(12) -- T مستنتج كـ number
local flag = identity(false) -- T مستنتج كـ booleanكل استدعاء يكون مستقلاً — يمكن لـ T أن يكون string في سطر ما وأن يكون number في السطر التالي. النتيجة المستنتجة آمنة تمامًا تمامًا كما لو كانت ملاحظة نوع مكتوبة يدويًا: المتغير word هو string بالنسبة للفاحص، مع ميزات الإكمال التلقائي وفحص الأخطاء بالكامل.
هناك فرق مهم واحد عن TypeScript: تتيح لك TS فرض النوع عند موضع الاستدعاء باستخدام identity<number>(5). لكن Luau لا يحتوي على وسائط أنواع عند موضع الاستدعاء (call-site type arguments) — هذا السطر ليس بناء جملة خاصًا، لذا يقرأ Luau الأقواس الزاوية كعمليات مقارنة أصغر من/أكبر من ويحدث خطأ في الكود (fails). عندما تريد تحديد النوع بشكل صريح، قم بإضافة ملاحظة النوع للمتغير بدلاً من ذلك:
local count: number = identity(12)يمكنك مراقبة عملية الاستنتاج أثناء عملها باستخدام أداة مألوفة: يُرجع typeof اسم نوع القيمة في زمن التشغيل (runtime)، لذا فإن print(typeof(identity(12))) يطبع number — حيث مرت القيمة عبر الدالة العامة دون أي تغيير على الإطلاق.
التحدي
سهلدالة identity الـ generic من الـ lesson الـ previous موجودة بالفعل في محرر النصوص لديك. ضع الاستنتاج الخاص بها قيد التشغيل.
قم بإنشاء three متغيرات، مع ترك أداة الفحص تستنتج T (لا يلزم إضافات توضيحية):
word— استدعِidentityمع"Luau"count— استدعِidentityمع12flag— استدعِidentityمعfalse
قم بطباعة ما يلي، كل منها في سطر مستقل:
word- نتيجة
typeof(word) count- نتيجة
typeof(count) flag- نتيجة
typeof(flag)
جرّب بنفسك
-- دالة identity العامة من الدرس السابق
local function identity<T>(value: T): T
return value
end
-- اكتب الكود هنا
-- 1) أنشئ word و count و flag باستدعاءات identity (دع T يُستنتج)
-- 2) اطبع كل قيمة متبوعة بـ typeof الخاصة بها
يتضمن هذا الدرس اختبارًا قصيرًا. ابدأ الدرس للإجابة عليه وتتبّع تقدمك.
جميع دروس مقدمة إلى Luau
1البدء مع Luau
ما هي Luau؟لماذا نستخدم Luau؟أول كود لك بلغة Luauفحص الأنواع وأنماط الأخطاءملخص: مقدمة إلى Luau4العمل مع الدوال
تحديد أنواع المعاملات والقيم المرجعةتحديد أنواع الدوال المجهولةالدوال التي لا ترجع شيئاًالمعاملات الاختياريةالقيم الافتراضية للمعاملاتالدوال متغيرة المعاملاتتعريف أنواع الدوالملخص: الدوال محددة الأنواع7المشروع: مدير المهام مع أنواع البيانات
المشروع: هيكل المهامدالة لإضافة تفاصيل مهمة2الأنواع الأساسية
الأنواع الأساسية: num و str و boolالنوع 'any': مخرج الطوارئالنوع 'unknown'أنواع Nil والأنواع الاختياريةاستنتاج الأنواع في التطبيق العمليتوضيحات الأنواع الصريحةملخص: تدريبات على الأنواع الأساسية5الأسماء المستعارة، الأنواع المشتركة، والأنواع المتقاطعة
الأسماء المستعارة للأنواع الأوليةأنواع الاتحاد (Union Types)التعامل مع أنواع الاتحادالأنواع اللفظية (Literal Types)أنواع التقاطع (Intersection Types)دمج الأسماء المستعارة للأنواعملخص: تجميعات الأنواع المتقدمة3الجداول المحددة الأنواع: المصفوفات والخرائط
المصفوفات المحددة الأنواعإضافة العناصر وقراءتهاما هو نوع الخريطة (Map)؟التصريح عن الخرائط والوصول إليهاالتكرار على الجداولالجداول متعدده الأشكالالمصفوفات المحددة الأنواع متعددة الأبعادtable.unpack والوسائط المتغيرة (Varargs)ملخص: المصفوفات والخرائط6تحديد أشكال الجداول (Typing Table Shapes)
توضيحات أشكال الجداول المضمنةأسماء مستعارة للأنواع لأشكال الجداولالخصائص الاختياريةأشكال الجداول مقابل الجداول الحرةتوسيع أشكال الجداولإضافة الدوارل إلى أشكال الجداولSelf والدوال المسبوقة بنقطتين (Colon Methods)ملخص: تعريف أشكال الجداول9الأنواع المعممة (Generics): نظرة أولى
المشكلة التي تحلها الأنواع المعممةدالة هوية معممةاستخدام دالة معممةالمصفوفات المعممةأسماء مستعارة للأنواع المعممةملخص: الدوال المعممة