Menu
CoddyTech

الخصائص الاختيارية

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

ليس كل حقل موجودًا دائمًا. في Lua، قراءة حقل مفقود من جدول تُرجع ببساطة nil، وهذا مرن، لكنه أيضًا ما يسمح بحدوث أخطاء مثل attempt to concatenate a nil value.

تتيح لك Luau التصريح بذلك صراحةً في الشكل: أضف ? بعد نوع الحقل لتحديد أنه اختياري:

type User = {
    name: string,   -- مطلوب
    email: string?, -- اختياري: string أو nil
}

local alice: User = {name = "Alice", email = "alice@luau.dev"}
local bob: User = {name = "Bob"} -- ✓ لا بأس، email اختياري

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

لأن الحقل الاختياري قد تكون قيمته nil، يجب أن تتحقق منه قبل استخدامه. يعمل نمط Lua المعتاد هنا، وفي الوضع الصارم يضيّق المدقّق النوع داخل الفرع:

if bob.email then
    print(`email: {bob.email}`) -- هنا email عبارة عن سلسلة نصية
else
    print("no email on file")
end

تعني كلمة اختياري «قد يكون غائبًا». لكنها لا تعني «أي نوع». إذا كان email موجودًا، فيجب أن تظل قيمته سلسلة نصية.

challenge icon

التحدي

سهل

اطبع جهات الاتصال التي قد لا يتوفر لها بريد إلكتروني.

  1. اكتب type User = {name: string, email: string?}، ثم local mia: User = {name = "Mia", email = "mia@coddy.tech"} وlocal leo: User = {name = "Leo"}.
  2. اكتب local function printContact(user: User) لطباعة `{user.name}: {user.email}`، أو `{user.name}: no email` إذا لم يكن لديه بريد إلكتروني.
  3. استدعِها مع mia، ثم leo.

اضغط على Run Code: سيعرض الناتج Mia: mia@coddy.tech وLeo: no email.

جرّب بنفسك

-- 1) عرّف النوع User بحقل email اختياري، ثم عرّف mia وleo
-- 2) عرّف printContact(user: User) مع التحقق من حقل email
-- 3) استدعِها من أجل mia، ثم leo

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

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