Menu
CoddyTech

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

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

أحيانًا لا يكفي نوع واحد. قد يصل معرّف المستخدم على شكل "user123" أو على شكل 42. في Lua العادية، لن يسعك إلا أن تأمل أن تسير الأمور على ما يرام؛ أما Luau فتمنحك الأنواع الاتحادية: يُقرأ الرمز | بمعنى «أو»:

local userId: number | string

userId = "user123"  -- ✓ يُسمح بقيمة نصية
userId = 42          -- ✓ يُسمح بقيمة عددية
userId = true        -- ✗ خطأ في النوع: boolean ليس ضمن اتحاد الأنواع

يمكن للمتغير أن يحمل أيًّا من أعضاء الاتحاد، وهؤلاء فقط. وهذا هو الفرق الجوهري عن any: يظل الاتحاد صارمًا بشأن القيم المسموح بها، مع منحك المرونة التي تحتاج إليها.

تكون الاتحادات مفيدة على نحو خاص لمعاملات الدوال التي تقبل تنسيقات إدخال متعددة:

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

printId(42)          -- يعمل مع عدد
printId("user123")   -- يعمل مع سلسلة نصية

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

challenge icon

التحدي

سهل

اقبل قيمة تكون رقمًا أو سلسلة نصية.

  1. اكتب local function printId(id: number | string): () لطباعة id.
  2. صرّح عن local status: string | number = "active".
  3. استدعِ printId(7) وprintId("player7")، ثم عيّن status = 200 واطبعه.

اضغط «تشغيل الكود»: يُظهر الناتج 7 وplayer7 و200.

جرّب بنفسك

-- 1) printId(id: number | string): ()
-- 2) local status: string | number = "active"
-- 3) استدعِ printId(7) وprintId("player7")، وعيّن status إلى 200، ثم اطبعه

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

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