Menu
CoddyTech

Значения по умолчанию для булевых параметров

Часть раздела Введение в Luau путешествия по Lua на Coddy. Урок 28 из 80.

Есть один нюанс, который ты знаешь по Lua: or также заменяет false. Для параметра boolean?, значением по умолчанию которого должно быть true, выражение flag = flag or true превращает явно переданное false в true, потому что false or true — это true:

local function sendAlert(message: string, loud: boolean?)
    loud = loud or true   -- sendAlert("Hi", false) всё равно получает true
    print(message, loud)
end

Вместо этого используй явную проверку на nil. Значение по умолчанию подставляется только в том случае, если аргумент не был передан:

local function sendAlert(message: string, loud: boolean?)
    if loud == nil then
        loud = true
    end
    print(message, loud)
end

sendAlert("Hi")         -- Hi  true
sendAlert("Hi", false)  -- Hi  false

Для строк и чисел or безопасен, поскольку только nil и false считаются ложными.

challenge icon

Задание

Легко

Задай логическому параметру значение по умолчанию true, которое невозможно отменить значением false.

  1. Напиши local function shippingCost(weight: number, insured: boolean?): number.
  2. Начни функцию с if insured == nil then insured = true end.
  3. Возвращай weight * 0.5 + 2, если insured равно true, иначе возвращай weight * 0.5.
  4. Выведи shippingCost(4) и shippingCost(4, false).

Нажми Run Code: вывод заканчивается значениями 4 и 2.

Попробуйте сами

-- Значение по умолчанию через идиому `or`
local function calculateTax(price: number, rate: number?): number
    rate = rate or 0.05
    return price * rate
end

print(calculateTax(100))
print(calculateTax(200, 0.08))

Все уроки раздела Введение в Luau

Потренируйтесь самостоятельно: Онлайн-компилятор Luau