Menu
Coddy logo textTech

Необязательные свойства

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

Не каждое field присутствует всегда. В Lua отсутствующее field таблицы просто считывается как nil — это гибко, но именно так и пробираются ошибки вроде attempt to concatenate a nil value.

Luau позволяет форме указывать это явно: добавьте ? после типа field, чтобы пометить его как optional:

type User = {
    name: string,   -- обязательный
    email: string?, -- опциональный: string или nil
}

local alice: User = {name = "Alice", email = "alice@luau.dev"}
local bob: User = {name = "Bob"} -- ✓ нормально, email опционален

Вы уже встречали это с переменными: string? — это сокращенная запись для string | nil. Та же идея теперь применяется к отдельным fields формы.

Поскольку optional field может быть nil, вы должны check before using it. Классический паттерн Lua работает, и в строгом режиме проверка сужает тип внутри ветки:

if bob.email then
    print(`email: {bob.email}`) -- здесь email является строкой
else
    print("no email on file")
end

Optional означает «может отсутствовать» — это не означает «любой тип». Если email существует, оно все еще должно быть string.

challenge icon

Задание

Легко

Создайте псевдоним типа с именем User со следующими полями:

  • name типа string (обязательное)
  • email типа string? (необязательное)

Создайте двух пользователей:

  • alice — имя "Alice", email "alice@luau.dev"
  • bob — имя "Bob", без email

Создайте функцию printContact, которая принимает User. Если у пользователя есть email, она выводит [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