Menu
Coddy logo textTech

Структурированные и произвольные таблицы

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

Теперь у вас есть два способа работы с таблицами записей: подход loose, который вы всегда использовали в Lua, и объявленные формы. Стоит сделать паузу и посмотреть, что даёт каждый из них.

Таблица loose принимает что угодно. У этой гибкости есть своя цена: опечатайтесь в названии поля (user.nmae) — и вы silently получите nil; забудьте поле — и ошибка всплывёт далеко от этого места, во время выполнения, в том коде, который первым обратится к пустому месту:

local user = {name = "Ana", age = 20}
print(user.nmae) -- loose table: silently prints nil

Объявите форму, и эти ошибки переместятся с этапа выполнения на этап редактирования. Проверка подсветит опечатку в тот момент, когда вы её напишете, ваш редактор сможет автодополнять имена полей, а объявление type также будет служить документацией того, что содержит table:

type User = {name: string, age: number}
local user: User = {name = "Ana", age = 20}
print(user.nmae) -- ✗ type error: key 'nmae' not found in User

Если вы пришли из TypeScript, обратите внимание, что в Luau нет ключевого слова interface — объявление type обрабатывает любую форму. Здесь также нет «слияния объявлений» (declaration merging): объявление двух типов с одинаковым именем в одной области видимости вызывает error, поэтому у каждой формы есть ровно одно определение.

Формы в Luau являются структурными: любая table с правильными полями нужных типов подходит, независимо от того, где и как она была создана. И таблицы loose всё ещё имеют своё применение — быстрым скриптам и действительно динамическим данным не нужна объявленная форма. Однако для всего, что передаётся между функциями, форма позволяет отлавливать ошибки, пока их исправление ещё не требует больших затрат.

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

В этом уроке нет задания по программированию.

quiz iconПроверьте себя

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

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