Sift Roblox: руководство для начинающих по настройке Luau и основам API - Руководства

Sift Roblox: руководство для начинающих по настройке Luau и основам API

Узнайте, как установить Sift для разработки Roblox, выбрать Luau или roblox-ts, использовать паттерны неизменяемых данных и избежать распространённых ошибок v0.x.

2026-08-20
Команда вики Sift Roblox
Краткое руководство
  • Sift Roblox — библиотека неизменяемых данных для проектов на Luau и roblox-ts.
  • Варианты установки включают Wally, npm, Roblox Library, Itch.io и релизы на GitHub.
  • Поддержка Luau использует нативные типы без проверки типов во время выполнения со стороны библиотеки.
  • Поддержка roblox-ts доступна через пакет @rbxts/sift и встроенные определения типов.
  • Предупреждение о версии: Sift всё ещё находится в серии v0.x, поэтому минорные релизы могут содержать ломающие изменения.

Руководство Sift Roblox для начинающих: что это такое

Sift Roblox — библиотека для разработчиков, предназначенная для работы с неизменяемыми данными в Luau и roblox-ts. Это не игровое приключение Roblox, не система персонажей и не механика прогрессии. Вместо этого библиотека предоставляет создателям вспомогательные функции для обновления массивов, словарей и множеств без непосредственного изменения исходных данных.

Проект во многом основан на библиотеке Llama, которая больше не поддерживается. Sift преследует похожую цель, но использует нативные типы Luau, переработанные тесты, сгенерированную документацию и встроенные определения типов TypeScript. Благодаря этим отличиям библиотека полезна для проектов, которым нужны предсказуемые обновления состояния или общие утилиты для работы с данными.

ОбластьПодход SiftПольза для начинающих
Основное назначениеУтилиты для неизменяемых данныхБолее безопасные обновления состояния
Поддерживаемые языкиLuau и roblox-tsГибкие рабочие процессы Roblox
Основные коллекцииМассивы, словари и множестваОхватывает распространённые структуры данных
Система типовНативные типы LuauМеньшая зависимость от пакетов проверки типов во время выполнения
СтабильностьСерия разработки v0.xПроверяйте изменения перед обновлением

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

Массивы

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

Словари

Работайте с данными в формате ключ-значение с помощью получения записей, заморозки, глубокой заморозки и преобразования записей.

Множества

Подсчитывайте значения и вычисляйте разности между коллекциями, не изменяя исходное множество.

Взгляд начинающего

Начните с одной небольшой структуры данных, например словаря настроек или списка предметов. Освоить неизменяемые обновления в ограниченной системе проще, чем сразу переписывать весь проект.

Варианты установки для проектов Roblox

Добавить Sift в проект разработки Roblox можно несколькими способами. Лучший вариант зависит от того, как ваша команда управляет зависимостями. Wally подходит для рабочих процессов с пакетами через командную строку, проекты roblox-ts могут использовать npm, а ручная установка удобна, если вы предпочитаете размещать модель непосредственно в Studio.

Согласно справочной документации, Sift доступен через Wally, Itch.io, Roblox Library и релизы на GitHub. В ней также отмечается, что проект является бесплатным и открытым, а страница на Itch.io может использоваться для добровольной поддержки.

Способ установкиЛучше всего подходитОсновное действиеГлавное соображение
WallyПроекты Luau с управлением зависимостямиДобавьте Sift в wally.toml, затем выполните wally installТребуется рабочий процесс Wally
npmПроекты roblox-tsУстановите @rbxts/siftИспользует инструменты TypeScript
Roblox LibraryРучные рабочие процессы в StudioВставьте библиотеку в StudioОбновления выполняются вручную
Релизы GitHubРучные или автоматизированные рабочие процессыСкачайте копию релизаВнимательно проверьте выбранный релиз
Синхронизация RojoПроекты с контролем версийСинхронизируйте модель Sift через RojoТребуется настроенная среда Rojo

Настройка Wally

В проекте Wally добавьте зависимость в раздел [dependencies] файла wally.toml. В документации используется следующий формат с заполнителем версии v0.x:

[dependencies]
Sift = "csqrl/sift@0.0.X"

Замените 0.0.X на нужную вам версию, затем выполните:

wally install

Храните выбранную версию в конфигурации проекта. Это упростит воспроизведение того же набора зависимостей на разных компьютерах и уменьшит путаницу, если новый минорный релиз изменит поведение.

Настройка roblox-ts

В документации указано, что Sift включает определения типов TypeScript и может быть установлен для roblox-ts с помощью:

npm install @rbxts/sift

Базовый импорт и операция со словарём могут выглядеть так:

import Sift from "@rbxts/sift"

const updated = Sift.Dictionary.merge(
  { a: 1, c: 2 },
  { b: 3, c: Sift.None }
)

Результатом, описанным в документации, является словарь, содержащий a: 1 и b: 3. Значение Sift.None удаляет существующую запись c во время объединения.

Ручная установка

Ручная установка означает получение копии из Roblox Library или релиза на GitHub и размещение её в Studio. Модель Sift также можно синхронизировать с помощью Rojo. Этот способ удобен для небольших экспериментов, однако командам следует записывать версию релиза и дату установки, чтобы будущими обновлениями было проще управлять.

Проверка версии

Sift всё ещё находится в серии v0.x. Документация предупреждает, что при увеличении минорной версии могут появиться ломающие изменения, поэтому проверяйте обновления зависимостей перед использованием в production.

Пошаговое первое обновление данных

Самый быстрый способ понять Sift — практиковать по одному неизменяемому обновлению за раз. Начните с небольшого словаря, изучите возвращённое значение и убедитесь, что исходная таблица остаётся эталонным значением для логики приложения.

1

Выберите небольшую структуру данных

Начните с настроек, лёгкого объекта конфигурации или короткого списка предметов. Во время первого теста не добавляйте Sift сразу в несколько несвязанных систем.

2

Выберите подходящий API коллекции

Используйте функции словарей для записей ключ-значение, функции массивов для упорядоченных списков, а функции множеств — для коллекций уникальных значений. Соответствие API структуре данных улучшает читаемость.

3

Создайте обновлённый результат

Вызовите соответствующую утилиту Sift и сохраните возвращённое значение в новой переменной. Рассматривайте результат как следующее состояние, а не изменяйте исходную таблицу напрямую.

4

Проверьте результат

Проверьте возвращённые данные и протестируйте граничные случаи, включая отсутствующие ключи, пустые коллекции, вложенные значения и повторяющиеся записи, если это применимо.

Объединение словарей — полезный первый пример:

local Sift = require(path.to.Sift)

local original = {
    Coins = 100,
    Title = "Rookie",
}

local updated = Sift.Dictionary.merge(original, {
    Coins = 125,
    Title = Sift.None,
})

В этом примере возвращённый словарь может представлять следующее состояние. Значение Coins заменяется, а Title удаляется с помощью Sift.None. Точный путь импорта зависит от способа установки и структуры проекта, поэтому используйте путь, созданный вашим рабочим процессом управления зависимостями.

ОперацияКоллекцияПрактическое применение
differenceМассив или множествоНайти значения, присутствующие в одной коллекции, но отсутствующие в других
differenceSymmetricМассив или множествоНайти значения, уникальные для каждой из двух сторон
freezeМассив или словарьПредотвратить прямые изменения коллекции
freezeDeepМассив или словарьЗаморозить вложенные массивы или словари
mergeСловарьОбъединить обновления и удалить ключи с помощью Sift.None
shuffleМассивВернуть элементы в случайном порядке
Контрольная точка обучения

Если вы можете объяснить, какое значение является исходным состоянием, какое — возвращённым состоянием и почему Sift.None удаляет ключ словаря, значит, вы понимаете основной рабочий процесс.

Сравнение рабочих процессов Luau и roblox-ts

Sift поддерживает и Luau, и roblox-ts, но окружающий процесс разработки отличается. Пользователи Luau обычно работают непосредственно в Roblox Studio или в проекте, управляемом Wally. Пользователи roblox-ts пишут на TypeScript и компилируют код в совместимый с Roblox формат с помощью существующей цепочки инструментов.

В документации библиотеки подчёркивается, что Sift использует нативные типы Luau и не выполняет проверку типов во время выполнения, которая ранее была связана со старым подходом на основе зависимостей. Это означает, что ответственность за корректность типов по-прежнему лежит на разработчике.

Рабочий процессЯзыкКоманда пакетаПримечание о типах
Прямой LuauLuauWally или ручная установкаИспользует нативные типы Luau
roblox-tsTypeScriptnpm install @rbxts/siftВключает определения типов TypeScript
Ручная работа в StudioLuauRoblox Library или копия релизаСтруктура импорта зависит от расположения
Проект RojoLuau или исходный код, управляемый проектомСинхронизация модели через RojoПодходит для рабочих процессов с контролем версий

Выбор подходящей отправной точки

Выберите прямой Luau, если вы изучаете скриптинг Roblox или хотите кратчайший путь от Studio к рабочему примеру. Выберите roblox-ts, если ваш проект уже использует TypeScript и npm. Не меняйте язык только ради использования Sift: библиотека рассчитана на оба рабочих процесса.

Разработчикам на Luau следует обращать внимание на разницу между статическими подсказками и поведением во время выполнения. Нативные типы помогают описывать предполагаемые значения, но некорректные данные всё равно могут привести к ошибкам выполнения, если функции получают неожиданный ввод.

Разработчикам на roblox-ts определения типов могут улучшить подсказки редактора и упростить поиск API. Однако скомпилированный код всё равно нуждается в тестировании на уровне проекта, особенно если данные поступают от игрока, из сохранений, по сети или из внешних систем.

Сначала Luau

Лучше всего подходит для изучающих Studio, небольших экспериментов и проектов, уже организованных вокруг нативного скриптинга Roblox.

Сначала roblox-ts

Лучше всего подходит для команд, использующих TypeScript, npm и рабочий процесс разработки с компиляцией.

Подход к миграции

Полезен при замене старых утилит на основе Llama, но проверяйте различия API и тестируйте каждое обновление состояния.

Напоминание о безопасности типов

Sift не заменяет проверку данных на границах систем. Проверяйте данные, загруженные из сохранений, полученные от клиентов или собранные из внешнего ввода, прежде чем передавать их утилитам коллекций.

Распространённые ошибки и контрольный список обслуживания

Удобный для начинающих рабочий процесс Sift зависит не столько от запоминания каждой функции, сколько от ясного понимания владения данными. Определите, какая система владеет значением, создавайте новый результат для обновлений и не смешивайте изменяемые и неизменяемые паттерны без необходимости.

Распространённые ошибки

  • Изменение исходной таблицы после создания результата Sift: это может усложнить отслеживание истории состояния.
  • Использование функции массива для данных словаря: выбирайте API на основе типа коллекции, а не только желаемого результата.
  • Предположение, что заморозка исправляет плохие данные: функции заморозки ограничивают изменения, но не проверяют содержимое коллекции.
  • Игнорирование вложенных структур: поверхностная и глубокая заморозка имеют разные эффекты.
  • Обновление зависимостей v0.x без тестирования: увеличение минорной версии может содержать ломающие изменения.
  • Отсутствие документации проекта: записывайте способ установки Sift и версию, которую ожидает проект.
РискПочему это важноРекомендуемая реакция
Исходные данные изменяютсяПоследующие системы могут увидеть неожиданные значенияРассматривайте возвращённые результаты как следующее состояние
Неправильный API коллекцииОперация может не соответствовать структуре данныхСначала определите: массив, словарь или множество
Неправильно понятая поверхностная заморозкаВложенные коллекции могут остаться изменяемымиИспользуйте глубокую заморозку, если требуется защита вложенных данных
В Sift поступают некорректные данныеОшибки могут возникнуть во время выполненияПроверяйте данные перед вызовом утилит
Неотслеживаемое изменение версииОбновление v0.x может изменить поведениеЗафиксируйте и протестируйте нужный релиз

Контрольный список проекта для начинающих:

  • Выберите Luau или roblox-ts до установки пакета
  • Запишите версию Sift, используемую проектом
  • Протестируйте одну операцию с массивом, словарём или множеством
  • Сравните исходную коллекцию с возвращённым результатом
  • Изучите официальную документацию Sift перед обновлением

Для справки используйте официальную страницу документации Sift, чтобы ознакомиться с примечаниями по установке, рекомендациями по стабильности v0.x и доступными утилитами коллекций. Сохраните эту ссылку в заметках проекта рядом с конфигурацией зависимостей.

Привычка обслуживания

При обновлении Sift тестируйте объединения, заморозку, разности и любые утилиты, используемые сохранёнными или реплицируемыми данными. Небольшие целевые тесты помогут рано обнаружить ломающие изменения.

Часто задаваемые вопросы о руководстве Sift Roblox для начинающих

Q: Является ли Sift Roblox игрой Roblox?

Нет. Sift — библиотека неизменяемых данных для разработки Roblox. Она предоставляет утилиты для проектов на Luau и roblox-ts, а не игровые механики, аватары, коды или внутриигровую прогрессию.

Q: Как установить Sift с помощью Wally?

Добавьте Sift в раздел зависимостей файла wally.toml, используя формат пакета csqrl/sift, замените заполнитель версии нужным релизом и выполните wally install.

Q: Поддерживает ли Sift roblox-ts?

Да. В документации указано, что Sift включает определения типов TypeScript. Пакет можно установить с помощью npm install @rbxts/sift.

Q: Что делает Sift.None?

В описанном примере объединения словарей Sift.None удаляет существующий ключ из результирующего словаря. Это полезно, когда обновление должно удалить значение, а не заменить его.

Sift — практичный вариант для разработчиков, которым нужны структурированные неизменяемые обновления в проектах Roblox. Начните с одного типа коллекции, используйте способ установки, соответствующий вашему рабочему процессу, и рассматривайте обновления v0.x как изменения, требующие тестирования.

Итог

Самый надёжный путь для начинающих прост: установите Sift, попрактикуйтесь с одним неизменяемым обновлением, проверьте результат и расширяйте использование только после того, как поток данных станет понятен.