- 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 — практиковать по одному неизменяемому обновлению за раз. Начните с небольшого словаря, изучите возвращённое значение и убедитесь, что исходная таблица остаётся эталонным значением для логики приложения.
Выберите небольшую структуру данных
Начните с настроек, лёгкого объекта конфигурации или короткого списка предметов. Во время первого теста не добавляйте Sift сразу в несколько несвязанных систем.
Выберите подходящий API коллекции
Используйте функции словарей для записей ключ-значение, функции массивов для упорядоченных списков, а функции множеств — для коллекций уникальных значений. Соответствие API структуре данных улучшает читаемость.
Создайте обновлённый результат
Вызовите соответствующую утилиту Sift и сохраните возвращённое значение в новой переменной. Рассматривайте результат как следующее состояние, а не изменяйте исходную таблицу напрямую.
Проверьте результат
Проверьте возвращённые данные и протестируйте граничные случаи, включая отсутствующие ключи, пустые коллекции, вложенные значения и повторяющиеся записи, если это применимо.
Объединение словарей — полезный первый пример:
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 и не выполняет проверку типов во время выполнения, которая ранее была связана со старым подходом на основе зависимостей. Это означает, что ответственность за корректность типов по-прежнему лежит на разработчике.
| Рабочий процесс | Язык | Команда пакета | Примечание о типах |
|---|---|---|---|
| Прямой Luau | Luau | Wally или ручная установка | Использует нативные типы Luau |
| roblox-ts | TypeScript | npm install @rbxts/sift | Включает определения типов TypeScript |
| Ручная работа в Studio | Luau | Roblox Library или копия релиза | Структура импорта зависит от расположения |
| Проект Rojo | Luau или исходный код, управляемый проектом | Синхронизация модели через 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, попрактикуйтесь с одним неизменяемым обновлением, проверьте результат и расширяйте использование только после того, как поток данных станет понятен.