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

القيم الافتراضية للمعاملات

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

المعلمات الاختيارية تترك لك قيمة nil للتعامل معها. في كثير من الأحيان، ما تريده حقًا هو قيمة احتياطية (fallback value) — "إذا لم يحدد المتصل، افترض X". لا تحتوي Luau على بناء جملة افتراضي في التوقيع (لا يوجد greeting: string = "Hello")؛ بدلاً من ذلك، تستخدم أسلوب Lua الكلاسيكي (idiom)، ولكن الآن مع الأنواع:

function greet(name: string, greeting: string?): string
    greeting = greeting or "Hello"
    return `{greeting}, {name}`
end

print(greet("Alice"))            -- مرحباً، أليس
print(greet("Alice", "Howdy"))   -- أهلاً، أليس

تم توشيح المعلمة كاختيارية (string?)، والسطر الأول من نص الدالة يستبدل nil بالقيمة الافتراضية. يعمل هذا لأن nil يعتبر زائفًا (falsy) — حيث يتم تقييم nil or "Hello" إلى "Hello". بعد ذلك السطر، يعلم أداة فحص الأنواع أن greeting لم يعد من الممكن أن يكون nil.

تنبيه واحد تعرفه من Lua: المعامل or يستبدل أيضًا false! بالنسبة لمعلمة من نوع boolean?، فإن flag = flag or true ستتجاوز القيمة الصريحة false دون إظهار أي خطأ. استخدم تحققًا صريحًا من الـ nil بدلاً من ذلك:

function ship(weight: number, expedited: boolean?): number
    if expedited == nil then
        expedited = false
    end
    -- ...
end
challenge icon

التحدي

سهل

أنشئ دالة باسم calculateTax تأخذ price: number (إجباري) و rate: number? بقيمة افتراضية 0.05. أرجع قيمة الضريبة (price * rate) كـ number.

أنشئ دالة باسم formatGreeting تأخذ name: string (إجباري) و timeOfDay: string? بقيمة افتراضية "Hello". أرجع "[timeOfDay], [name]!" كـ string.

أنشئ دالة باسم calculateShipping تأخذ weight: number، و distance: number (كلاهما إجباري) و expedited: boolean? بقيمة افتراضية false — استخدم فحصًا صريحًا لـ nil في هذه الدالة! احسب (weight * 0.5) + (distance * 0.1)، وإذا كانت expedited تساوي true، اضرب النتيجة في 2. أرجع number.

قم بالاستدعاء والطباعة، كل منها في سطر منفصل:

  1. calculateTax(100)
  2. calculateTax(200, 0.08)
  3. formatGreeting("Alice")
  4. formatGreeting("Bob", "Good morning")
  5. calculateShipping(5, 100)
  6. calculateShipping(3, 50, true)

جرّب بنفسك

-- اكتب الكود هنا
-- calculateTax(price: number, rate: number?) -- المعدل الافتراضي 0.05
-- formatGreeting(name: string, timeOfDay: string?) -- الافتراضي "Hello"
-- calculateShipping(weight, distance, expedited: boolean?) -- الافتراضي false
-- ثم اطبع النتائج الست
quiz iconاختبر نفسك

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

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