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

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

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

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

تتيح لك Luau التعبير عن ذلك صراحة في الهيكل: أضف ? بعد نوع المجال لتعيينه كـ اختياري (optional):

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 الكلاسيكي، وفي النمط الصارم (strict mode)، يقوم الفاحص بتضييق النوع داخل الفرع:

if bob.email then
    print(`email: {bob.email}`) -- هنا email هو string
else
    print("no email on file")
end

كلمة اختياري تعني "قد يكون غائبًا" — ولا تعني "أي نوع". إذا كان email موجودًا، فيجب أن يظل سلسلة نصية (string).

challenge icon

التحدي

سهل

أنشئ باسم نوع مستعار (type alias) باسم User يحتوي على:

  • name من نوع string (مطلوب)
  • email من نوع string? (اختياري)

أنشئ مستخدمَين:

  • alice — الاسم "Alice"، البريد الإلكتروني "alice@luau.dev"
  • bob — الاسم "Bob"، بدون بريد إلكتروني

أنشئ دالة printContact تأخذ User. إذا كان لدى المستخدم بريد إلكتروني تطبع [name] - [email]؛ وإلا تطبع [name] - no email.

ثم:

  1. استدعِ printContact(alice)
  2. استدعِ printContact(bob)
  3. اطبع نتيجة مقارنة bob.email == nil

جرّب بنفسك

-- اكتب الكود هنا
-- 1) عرّف النوع User مع حقل email اختياري
-- 2) أنشئ alice (مع email) و bob (بدون)
-- 3) اكتب printContact مع فحص nil
-- 4) استدعِها لكلا المستخدمين، ثم اطبع bob.email == nil
quiz iconاختبر نفسك

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

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