Menu
Coddy logo textTech
flag Ar iconالعربيةdown icon

دالة هوية معممة

جزء من قسم مقدمة إلى Luau في رحلة Lua على Coddy — الدرس 58 من 73.

إليك دالة `identity` المنفذة بالشكل الصحيح — كـ دالة جنيسية (generic function):

local function identity<T>(value: T): T
    return value
end

يُعلن رمز <T> بعد اسم الدالة عن معلمة نوع (type parameter) — عنصر نائب يمثل "نوعًا ما، يتحدد عند كل استدعاء `call`". داخل التوقيع (signature)، تستهلك T تمامًا كنوع حقيقي: المعلمة هي من النوع T، والدالة تُرجع نوعًا من T.

استخدام نفس الـ T للمدخلات والمخرجات هو الحيلة بأكملها — فهو يربطهما معًا. قم بـ `call` لـ identity("hello") وسيتحدد للداعم أن T = string لهذا الـ `call`، وبالتالي تكون النتيجة string. قم بـ `call` لـ identity(42) فتصبح T = number، وتكون النتيجة number. جسم دالة واحد (One)، لكافة الأنواع (every)، دون فقدان أي شيء.

الرمز T ليس سوى اسم اصطلاحي (اختصار لـ "Type") — و <Item> أو <Value> يعملان بنفس الكفاءة. وكما هو الحال دائمًا في Luau، فإن الأقواس الزاوية موجودة فقط لفاحص الأنواع: أثناء التشغيل (runtime)، تكون هذه الدالة مجرد دالة Lua عادية function identity(value) return value end.

challenge icon

التحدي

سهل

أنشئ دالة عامة (generic) باسم identity تقوم بما يلي:

  • تعلّن عن بارامتر نوع T
  • تقبل بارامتر واحد باسم value من النوع T
  • تُرجع تلك القيمة، مع نوع إرجاع T

ثم أنشئ هذه المتغيرات المحددة الأنواع باستخدام الدالة الخاصة بك:

  • luckyNumber من النوع number — استدعِ identity مع القيمة 7
  • greeting من النوع string — استدعِ identity مع القيمة "Hello, Luau!"
  • isReady من النوع boolean — استدعِ identity مع القيمة true

اطبع ما يلي، كل منها في سطر منفصل:

  1. luckyNumber
  2. greeting
  3. isReady
  4. نتيجة استدعاء identity مع "generics" مباشرة داخل print
  5. نتيجة استدعاء identity مع 99 مباشرة داخل print

جرّب بنفسك

-- اكتب الكود هنا
-- 1) عرّف identity<T>(value: T): T
-- 2) أنشئ luckyNumber و greeting و isReady باستدعاءات identity
-- 3) اطبعها، ثم اطبع identity("generics") و identity(99)
quiz iconاختبر نفسك

يتضمن هذا الدرس اختبارًا قصيرًا. ابدأ الدرس للإجابة عليه وتتبّع تقدمك.

جميع دروس مقدمة إلى Luau