Встроенные аннотации структур
Часть раздела Введение в Luau путешествия по Lua на Coddy — урок 37 из 73.
В Lua вы уже давно используете таблицы в качестве записей: local user = {name = "Ana", age = 20}. Ничто не мешает вам допустить ошибку в имени поля, забыть его или сохранить string там, где должен быть number — вы узнаете об этом только во время выполнения кода.
Luau позволяет описать shape такой таблицы прямо в объявлении, перечислив каждое поле и его тип внутри фигурных скобок:
local user: {name: string, age: number} = {
name = "Ana",
age = 20,
}Сравните это с типами таблиц, которые вы уже знаете: {number} описывает массив, а {[string]: number} описывает словарь с любыми ключами типа string. shape более точен — он именует каждое поле индивидуально и задаёт каждому полю свой собственный тип.
Как только shape объявлен, средство проверки типов проверяет таблицу на соответствие ему прямо во время редактирования. Отсутствующее поле или неверный тип значения отмечаются ещё до того, как код будет запущен:
local user: {name: string, age: number} = {
name = "Ana",
age = "twenty", -- ✗ ошибка типа: string is not a number
}Как всегда, аннотация не добавляет никакого поведения во время выполнения — таблица остаётся обычной таблицей Lua. Встроенные (inline) shape отлично подходят для одноразовых структур, которые вы не планируете использовать повторно; в следующем уроке вы дадите shape имя.
Задание
ЛегкоСоздайте переменную с именем student с inline annotation формы, объявляющей:
nameтипаstringstudentIdтипаnumberisEnrolledтипаboolean
Инициализируйте её со значениями: name "Sarah Johnson", studentId 12345 и isEnrolled true.
Создайте вторую переменную с именем course с inline annotation формы, объявляющей:
titleтипаstringcreditsтипаnumberinstructorтипаstring
Инициализируйте её со значениями: title "Introduction to Luau", credits 3 и instructor "Dr. Smith".
Выведите на экран (каждое значение с новой строки):
- имя студента (student's name)
- ID студента (student's ID)
- название курса (course title)
- количество кредитов (number of credits)
Попробуйте сами
-- Напишите код здесь
-- 1) объявите student с встроенной аннотацией shape
-- 2) объявите course с встроенной аннотацией shape
-- 3) выведите четыре запрошенных поля
В этом уроке есть небольшой тест. Начните урок, чтобы ответить на вопросы и сохранить прогресс.
Все уроки раздела Введение в Luau
1Начало работы с Luau
Что такое Luau?Почему именно Luau?Ваш первый код на LuauПроверка типов и режимы ошибокИтоги: Введение в Luau4Работа с функциями
Типизация параметров и возвращаемых значенийТипизация анонимных функцийФункции, ничего не возвращающиеНеобязательные параметрыЗначения параметров по умолчаниюФункции с переменным числом аргументовОпределение типов функцийИтоги: типизированные функции2Базовые типы
Основные типы: num, str, boolТип 'any': лазейка в типизацииТип 'unknown'Nil и опциональные типыВывод типов на практикеЯвные аннотации типовИтоги: практика по базовым типам5Псевдонимы, объединения и пересечения
Псевдонимы типов для примитивовТипы объединения (Union)Работа с типами объединенияЛитеральные типыТипы пересечения (Intersection)Комбинирование псевдонимов типовИтоги: Сложные комбинации типов3Типизированные таблицы: Массивы и Map-словари
Типизированные массивыДобавление и чтение элементовЧто такое тип Map?Объявление и доступ к Map-словарямИтерация по таблицамТаблицы смешанной формыМногомерные типизированные массивыtable.unpack и VarargsИтоги: Массивы и Map-словари6Типизация структуры таблиц
Встроенные аннотации структурПсевдонимы типов для структурНеобязательные свойстваСтруктурированные и произвольные таблицыРасширение структурДобавление методов в структурыМетоды с Self и двоеточиемИтоги: Определение структуры таблиц