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

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