Документация Sift для Roblox: руководство по настройке и шаблоны API - Платформа

Документация Sift для Roblox: руководство по настройке и шаблоны API

Узнайте, как установить Sift для разработки Roblox, работать с неизменяемыми данными Luau, использовать шаблоны Dictionary и организовать надежный код проекта.

2026-08-20
Команда вики Sift Roblox
Краткое руководство
  • Документация Sift для Roblox объясняет шаблоны работы с неизменяемыми данными в проектах Luau.
  • Установка через Wally добавляет Sift с помощью рабочего процесса управления пакетами, ориентированного на Roblox.
  • Поддержка TypeScript сохраняет привычный API для разработчиков roblox-ts.
  • Неизменяемые обновления возвращают новые значения вместо изменения исходной таблицы.
  • Примечание по сопровождению: перед добавлением новой производственной зависимости проверьте состояние репозитория.

Обзор документации Sift для Roblox

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

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

Хорошей отправной точкой является репозиторий Sift на GitHub. В нем содержатся инструкции по установке, информация о релизах, примеры и ссылки на сгенерированную документацию.

Основной принцип

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

Для чего лучше всего подходит Sift

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

  • Создание нового профиля игрока из нескольких источников данных.
  • Объединение настроек по умолчанию с сохраненными предпочтениями.
  • Удаление записей без вызова table.remove или ручного присваивания nil.
  • Предсказуемое обновление состояния интерфейса.
  • Совместное использование вспомогательных функций коллекций в кодовых базах Luau и roblox-ts.
Сценарий использованияЧем помогают неизменяемые операцииРекомендуемая отправная точка
Профили игроковСнижают риск случайных изменений между системамиОперации со словарями
Состояние интерфейсаУпрощают сравнение переходов состоянияНебольшие целевые обновления
Данные инвентаряДелают преобразования явнымиВспомогательные функции словарей и массивов
КонфигурацияПоддерживает многоуровневые значения по умолчанию и переопределенияDictionary.merge
Общий код TypeScriptСохраняет привычный стиль API@rbxts/sift

Важный контекст проекта

Библиотека является утилитой с открытым исходным кодом, а не Roblox-игрой или игровой системой. Она не предоставляет карты, персонажей, боевые механики, задания или функции прогрессии. Ее задача — помогать разработчикам структурировать и преобразовывать данные внутри проектов Roblox.

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

Установка и настройка проекта

Sift можно добавить в проект Roblox через Wally, roblox-ts или вручную. Выберите один способ и придерживайтесь единой структуры зависимостей во всей команде. Смешивание методов установки без четкой причины может усложнить отслеживание версий и развертывание.

Сначала проверьте версию

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

Сравнение способов установки

Рабочий процессСсылка на пакетЛучше всего подходит дляГлавное соображение
Wallycsqrl/sift@x.x.xПроектов Luau, использующих WallyЗамените шаблон выбранной версией
roblox-ts@rbxts/siftПроектов TypeScriptУстановите пакет через npm рабочего процесса проекта
Creator StoreМодель SiftНастройки, ориентированной на StudioПеред использованием проверьте добавленную иерархию
Релиз GitHubФайлы релиза из репозиторияРучного контроля или изученияВедите собственную запись версии

Настройка Wally

В проекте на основе Wally добавьте Sift как зависимость в wally.toml:

[dependencies]
Sift = "csqrl/sift@x.x.x"

Замените x.x.x версией, выбранной для проекта. Затем выполните:

wally install

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

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

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

npm install @rbxts/sift

Простое объединение словарей может выглядеть так:

import { Dictionary, Sift } from "@rbxts/sift"

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

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

1

Выберите способ подключения зависимости

Решите, будет ли проект использовать Wally, roblox-ts, модель из Creator Store или релиз, управляемый вручную. Зафиксируйте это решение в README проекта.

2

Зафиксируйте и установите пакет

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

3

Проверьте путь импорта

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

4

Выполните целевой тест

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

Шаблоны неизменяемых словарей

Операции со словарями являются наиболее практичной отправной точкой для многих систем Roblox. Словарь — это таблица «ключ-значение», например профиль, содержащий валюту, настройки и разблокированный контент. При неизменяемых обновлениях каждая операция создает новое значение вместо изменения общей таблицы на месте.

Рекомендуемый шаблон состояния

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

Распространенные цели преобразований

ЦельШаблон SiftОжидаемый результат
Объединить значенияDictionary.mergeНовый словарь с выбранными ключами
Удалить значениеИспользовать вспомогательную функцию удаления библиотекиНовый словарь без выбранной записи
Применить целевое обновлениеИспользовать вспомогательную функцию обновления словаряИзменяется только нужный ключ
Представить удалениеSift.None в поддерживаемых операцияхВыбранный ключ отсутствует в объединенном результате
Сохранить входные данныеИзбегать прямого присваивания в исходную таблицуПредыдущее состояние остается доступным

Маркер Sift.None особенно полезен в коде, использующем объединение. В приведенном в документации примере объединение { a: 1, c: 2 } с { b: 3, c: Sift.None } создает { a: 1, b: 3 }. Удаление становится частью преобразования, а не отдельным шагом изменения данных.

const base = {
  displayName: "Builder",
  soundEnabled: true,
  tutorialSeen: true
}

const next = Dictionary.merge(base, {
  soundEnabled: false,
  tutorialSeen: Sift.None
})

Этот пример демонстрирует две полезные идеи: обычную замену soundEnabled и явное удаление tutorialSeen. Всегда проверяйте фактическое поведение конкретной вспомогательной функции с версией, установленной в проекте, особенно при переходе с другой библиотеки неизменяемых данных.

Почему важно сохранять входные данные

Прямая мутация может создать скрытую связанность:

profile.Coins += 50

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

Неизменяемый подход делает переход состояния более осознанным:

local updatedProfile = Dictionary.merge(profile, {
    Coins = profile.Coins + 50,
})

Точный импорт модуля зависит от структуры проекта. Главное — вычислить updatedProfile как новое значение, а затем передать его системам, которым требуется обновленное состояние.

Делайте преобразования небольшими

Не создавайте одно большое преобразование, изменяющее несвязанные части профиля. Небольшие операции проще тестировать и проверять:

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

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

Sift предназначен для поддержки рабочих процессов Luau и roblox-ts. Концептуальный API остается похожим, но окружающие инструменты отличаются. В проектах Luau обычно используются Wally и Rojo, а проекты roblox-ts используют npm и компиляцию TypeScript.

Безопасность типов не является проверкой во время выполнения

Нативные типы Luau и объявления TypeScript помогают во время разработки, но не проверяют автоматически данные, полученные от игроков, сервисов сохранения или внешних границ.

Проекты Luau

Используйте Wally для управления зависимостями, Rojo для синхронизации при необходимости и целевые тесты модулей для преобразований коллекций.

Проекты roblox-ts

Установите @rbxts/sift, используйте типизированный API и согласуйте версии пакета с конфигурацией компилятора TypeScript.

Слой валидации

Добавьте отдельную библиотеку валидации или проверки уровня проекта, когда данные пересекают границу доверия или попадают в постоянное хранилище.

Выбор между Luau и TypeScript

Профиль проектаЛучший вариантСоображение при использовании Sift
Существующая кодовая база LuauПакет LuauСохраняйте простоту импортов и сопоставления пакетов
Типизированный рабочий процесс командыroblox-tsИспользуйте встроенную совместимость с TypeScript
Смешанный репозиторийОбщие соглашенияДокументируйте, какой слой отвечает за каждое преобразование
Ненадежный вводЛюбой языкДобавьте отдельную проверку во время выполнения
Долгосрочное сопровождениеЗафиксированная зависимостьЗапишите выбранную версию и проверяйте состояние проекта

Тестирование неизменяемого поведения

Полезный тест должен проверять и результат, и исходные входные данные:

local original = {
    Coins = 100,
    Rank = 2,
}

local updated = Dictionary.merge(original, {
    Coins = 150,
})

assert(updated.Coins == 150)
assert(original.Coins == 100)

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

Сопровождение, совместимость и лучшие практики

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

Определите ответственность за зависимость

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

Контрольный список проверки зависимости

Перед добавлением Sift:

  • Подтвердить выбранную версию пакета и способ установки
  • Проверить поведение объединения словарей и удаления в текущем проекте
  • Проверить совместимость Luau, roblox-ts, Wally, Rojo и компилятора
  • Добавить проверку во время выполнения для ненадежных или постоянных данных
  • Зафиксировать план действий на случай изменений сопровождения или совместимости

Практические инженерные правила

  1. Не изменяйте общее состояние случайно. Рассматривайте таблицы профилей и конфигурации как значения, которые следует намеренно заменять.
  2. Сохраняйте четкие границы пакетов. Утилитарная библиотека должна преобразовывать данные, а системы сохранения и сетевого взаимодействия — отвечать каждая за свою область.
  3. Проверяйте данные на границах. Статические типы не гарантируют, что сохраненные данные или удаленный ввод имеют ожидаемую структуру.
  4. Предпочитайте явные промежуточные значения. Такие имена, как mergedDefaults, playerSettings и nextProfile, упрощают проверку преобразований.
  5. Тестируйте поведение удаления. Отсутствующий ключ, значение nil и Sift.None могут иметь разные значения в операции объединения.
  6. Документируйте выбранную версию. Это особенно важно, если проект будут сопровождать участники, которые не выбирали исходную зависимость.

Рекомендуемая структура документации

Страница документацииЧто включить
УстановкаСпособ подключения пакета, версия, команды, сопоставление папок
Примечания к APIИспользуемые проектом вспомогательные функции и краткие примеры
Соглашения о состоянииКакие таблицы являются неизменяемыми и кто отвечает за их замену
ВалидацияПроверки во время выполнения для сохраненных и удаленных данных
План обновленияТесты совместимости, проверка зависимости, запасной вариант

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

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

Краткая справка

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

Q: Для чего используется Sift в разработке Roblox?

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

Q: Как установить Sift в проект Roblox?

Документированные способы включают Wally, пакет roblox-ts с именем @rbxts/sift, модель Roblox Creator Store и файлы релиза GitHub. Выберите один способ и запишите версию, используемую проектом.

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

В поддерживаемых операциях объединения Sift.None обозначает удаление ключа. Например, объединение словаря, в котором для c установлено значение Sift.None, может создать результат без ключа c.

Q: Заменяет ли Sift проверку данных во время выполнения?

Нет. Нативные типы Luau и типы TypeScript помогают выполнять проверки во время разработки, но команде следует добавить отдельный слой валидации для удаленного ввода, сохраненных данных и других ненадежных границ.