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

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

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

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

يتيح Luau أن يصرّح shape بذلك صراحةً: أضف ? بعد نوع field لتمييزه بأنه optional:

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

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

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

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

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

تعني optional «قد تكون غائبة». وهي لا تعني «أي نوع». إذا كانت email موجودة، فلا يزال يجب أن تكون من النوع string.

challenge icon

التحدي

سهل

أنشئ اسمًا مستعارًا للنوع باسم 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

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