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

أنواع التقاطع (Intersection Types)

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

تقول الأنواع المتحدة (Unions) إن القيمة هي نوع واحد أو نوع آخر. أما **أنواع التقاطع (Intersection types)** فتسير في الاتجاه المعاكس: الرمز & يجمع أشكال الجداول في نوع يمتلك جميع الحقول من كل جزء:

type HasName = { name: string }
type HasAge = { age: number }

type Person = HasName & HasAge

-- يجب أن يمتلك Person كلا الحقلين
local user: Person = {
    name = "Alice",
    age = 25,
}

إذا اتركت age فسيشتكي فاحص الأنواع — التقاطع يعني "و"، وليس أخذ ما تحبه وترك ما تشاء. يتيح لك هذا بناء أشكال كبيرة من قطع صغيرة وأعادت استخدامها: قم بتحديد أنواع مركزة لاهتمامات منفصلة، ثم اجمعها معًا حسب الحاجة:

type HasEmail = { email: string }

type Employee = HasName & HasAge & HasEmail

ملاحظة مهمة واحدة في Luau: قم بتقاطع **أشكال الجداول** (أنواع الدوال) — وليس الأنواع الأولية (primitives). شيء مثل number & string لا معنى له، حيث لا يمكن لأي قيمة أن تكون الاثنين في وقت واحد. عندما تريد "هذا الشكل بالإضافة إلى ذلك الشكل"، فإن & هي أداة الك المناسبة.

في وقت التشغيل، بالطبع، تكون الـ Person مجرد جدول Lua عادي — التقاطع موجود فقط من أجل فاحص الأنواع.

challenge icon

التحدي

سهل

أنشئ اسمين مستعارين للشكل: HasName بحقل name: string، و HasAge بحقل age: number.

أنشئ Person كتقاطع HasName & HasAge.

أنشئ HasEmail بحقل email: string، و Employee كتقاطع للثلاثة جميعاً: HasName & HasAge & HasEmail.

قم بالتصريح عن:

  • user: Person باسم "Alice" وعمر 25
  • worker: Employee باسم "Bob"، وعمر 30، وبريد إلكتروني "bob@company.com"

أنشئ displayPerson(person: Person): string تُرجع "Name: [name], Age: [age]"، و displayEmployee(employee: Employee): string تُرجع "Name: [name], Age: [age], Email: [email]".

اطبع displayPerson(user) و displayEmployee(worker) في أسطر منفصلة.

جرّب بنفسك

-- اكتب الكود هنا
-- type HasName = { name: string }, HasAge, HasEmail
-- type Person = HasName & HasAge
-- type Employee = HasName & HasAge & HasEmail
-- أعلن عن user و worker، اكتب دالتي العرض،
-- اطبع displayPerson(user) و displayEmployee(worker)
quiz iconاختبر نفسك

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

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