Menu
CoddyTech

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

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

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

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

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. Теперь та же идея применяется к отдельным полям формы.

Поскольку необязательное поле может иметь значение nil, перед его использованием нужно проверить его. Подходит классический приём из Lua, а в строгом режиме проверка сужает тип внутри ветви:

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

Необязательное означает «может отсутствовать». Это не означает «может иметь любой тип». Если поле email существует, оно всё равно должно быть строкой.

challenge icon

Задание

Легко

Выведите контакты, в которых может отсутствовать адрес электронной почты.

  1. Напишите type User = {name: string, email: string?}, затем local mia: User = {name = "Mia", email = "mia@coddy.tech"} и local leo: User = {name = "Leo"}.
  2. Напишите local function printContact(user: User), которая выводит `{user.name}: {user.email}` или `{user.name}: no email`, если адреса нет.
  3. Вызовите её для mia, затем для leo.

Нажмите Run Code: в выводе появятся Mia: mia@coddy.tech и Leo: no email.

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

-- 1) тип User с необязательным email, затем mia и leo
-- 2) printContact(user: User) с проверкой email
-- 3) вызовите её для mia, затем для leo

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

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