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

تدرّب بنفسك: مترجم Lua عبر الإنترنت