Menu
Coddy logo textTech

Необязательные параметры

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

В чистом Lua вы всегда могли пропустить аргументы — пропущенные тихо становились nil, и забыть обработать это было классическим источником ошибок. Luau делает эту возможность явной: добавьте ? к типу параметра, чтобы отметить его как необязательный.

function greet(name: string, title: string?): string
    if title then
        return `{title} {name}`
    end
    return `Hello, {name}`
end

print(greet("Ada"))          -- Привет, Ада
print(greet("Ada", "Dr."))   -- Др. Ада

string? читается как «string или nil». Вызывающая сторона может передать строку или пропустить аргумент полностью; параметры без ? являются обязательными, и средство проверки отмечает вызовы, которые их пропускают.

Внутри функции необязательный параметр может быть равен nil, поэтому проверьте его перед использованием — if title then ... end является стандартным шаблоном. Пропустите проверку и конкатенируйте nil со строкой, и вы получите ту же ошибку времени выполнения, которую всегда выдавал Lua; проверка типов предупредит вас первой.

challenge icon

Задание

Легко

Создайте функцию с именем createUserProfile, которая принимает username: string (обязательный) и displayName: string? (необязательный), возвращающую string:

  • Если указаны оба параметра, верните: "Profile: [displayName] (@[username])"
  • Если указан только username, верните: "Profile: @[username]"

Создайте функцию с именем calculateDiscount, которая принимает price: number (обязательный) и membershipLevel: string? (необязательный), возвращающую number:

  • Если уровень членства указан, верните цену со скидкой 10% (умноженную на 0.9)
  • В противном случае верните цену без изменений

Вызовите и выведите на печать, каждый с новой строки:

  1. createUserProfile("john_doe", "John Doe")
  2. createUserProfile("jane_smith")
  3. calculateDiscount(100, "premium")
  4. calculateDiscount(75)

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

-- Напишите код здесь
-- createUserProfile(username: string, displayName: string?): string
-- calculateDiscount(price: number, membershipLevel: string?): number
-- затем выведите четыре результата
quiz iconПроверьте себя

В этом уроке есть небольшой тест. Начните урок, чтобы ответить на вопросы и сохранить прогресс.

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