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

أنواع الاتحاد (Union Types)

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

في بعض الأحيان لا يكون type واحد كافياً. قد يصل معرّف المستخدم كـ "user123" أو كـ 42. في Lua العادية كنت تتأمل الخير فقط؛ لكن Luau تمنحك أنواع union (union types) — العلامة | تقرأ كـ "أو":

local userId: number | string

userId = "user123"  -- ✓ يُسمح بـ string
userId = 42          -- ✓ يُسمح بـ number
userId = true        -- ✗ type error: boolean ليس في الـ union

يمكن للـ variable أن يحمل أي عضو من الـ union — وهؤلاء فقط. هذا هو الاختلاف الجوهري عن any: تظل الـ union صارمة بشأن ما هو مسموح به مع إعطائك المرونة التي تحتاجها.

تعتبر الـ types من نوع union مفيدة بشكل خاص لـ parameter الـ function التي تقبل صيغ إدخال متعددة:

function printId(id: number | string): ()
    print(id)
end

printId(42)          -- يعمل مع رقم
printId("user123")   -- يعمل مع سلسلة

أنت تعرف بالفعل string? — لقد كانت هذه أول union لك! هي ببساطة اختصار لـ string | nil. في الدرس القادم ستتعلم كيفية العمل بأمان مع قيمة union بمجرد حصولك عليها.

challenge icon

التحدي

سهل

أنشئ دالة باسم printId تأخذ id: number | string وتقوم بطباعته — مع نوع إرجاع صريح ().

قم بالتصريح عن متغير status من نوع string | number، وتهيئته بقيمة "active".

ثم، بالترتيب:

  1. استدعِ printId(42)
  2. استدعِ printId("user123")
  3. اطبع status
  4. أعد تعيين status إلى 200 واطبعه مرة أخرى

أربعة أسطر من المخرجات الإجمالية.

جرّب بنفسك

-- اكتب الكود هنا
-- printId(id: number | string): ()
-- local status: string | number = "active"
-- استدعِ printId(42)، printId("user123")،
-- اطبع status، أعد التعيين إلى 200، اطبع مرة أخرى
quiz iconاختبر نفسك

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

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