Documentação do Sift para Roblox: Guia de Configuração e Padrões de API - Plataforma

Documentação do Sift para Roblox: Guia de Configuração e Padrões de API

Aprenda a instalar o Sift para desenvolvimento no Roblox, trabalhar com dados imutáveis em Luau, usar padrões de Dictionary e organizar um código de projeto confiável.

2026-08-20
Equipe da Wiki do Sift para Roblox
Guia rápido
  • A documentação do Sift para Roblox explica padrões de dados imutáveis para projetos em Luau.
  • A instalação pelo Wally adiciona o Sift por meio de um fluxo de pacotes focado em Roblox.
  • O suporte a TypeScript mantém a API familiar para desenvolvedores de roblox-ts.
  • Atualizações imutáveis retornam novos valores em vez de alterar a tabela original.
  • Nota de manutenção: verifique o status do repositório antes de iniciar uma nova dependência de produção.

Visão geral da documentação do Sift para Roblox

O Sift é uma biblioteca de dados imutáveis projetada para desenvolvimento em Luau e Roblox. Em vez de alterar uma tabela diretamente, um utilitário imutável cria e retorna um valor atualizado. Essa abordagem pode facilitar o rastreamento de alterações de estado, especialmente em sistemas que gerenciam dados de jogadores, estado da interface, inventários ou configurações replicadas.

A biblioteca está intimamente associada a operações com dicionários e coleções. Seu design é fortemente influenciado pelo Llama, enquanto sua implementação utiliza tipos nativos do Luau em vez de depender da verificação de tipos em tempo de execução. Essa distinção é importante ao criar um projeto: tipagem estática e validação são responsabilidades separadas, portanto as equipes devem decidir como desejam validar os dados recebidos.

Um bom ponto de partida é o repositório do Sift no GitHub. Ele contém notas de instalação, informações sobre versões, exemplos e links para a documentação gerada.

Princípio fundamental

Trate cada transformação de dados como um novo valor. Mantenha a tabela anterior disponível ao depurar, comparar estados ou calcular um rollback.

Para que o Sift é mais indicado

O Sift é mais útil quando seu código transforma repetidamente dados estruturados sem querer que todos os sistemas alterem a mesma referência de tabela. Exemplos comuns incluem:

  • Criar um novo perfil de jogador a partir de várias fontes de dados.
  • Mesclar configurações padrão com preferências salvas.
  • Remover entradas sem chamar table.remove ou atribuir nil manualmente.
  • Atualizar o estado da interface de maneira previsível.
  • Compartilhar utilitários de coleções entre bases de código em Luau e roblox-ts.
Caso de usoPor que as operações imutáveis ajudamPonto de partida recomendado
Perfis de jogadoresReduz alterações acidentais entre sistemasOperações de Dictionary
Estado da interfaceFacilita a comparação das transições de estadoAtualizações pequenas e focadas
Dados do inventárioMantém as transformações explícitasAuxiliares de dicionários e arrays
ConfiguraçãoOferece suporte a padrões e substituições em camadasDictionary.merge
Código TypeScript compartilhadoPreserva um estilo de API familiar@rbxts/sift

Contexto importante do projeto

A biblioteca é um utilitário de código aberto, não uma experiência do Roblox ou um sistema de gameplay. Ela não fornece mapas, personagens, mecânicas de combate, missões ou recursos de progressão. Seu papel é ajudar desenvolvedores a estruturar e transformar dados dentro de projetos do Roblox.

O repositório identifica o Sift como licenciado sob MIT e oferece vários caminhos de distribuição. No entanto, o status atual de manutenção deve ser revisado antes da adoção. Uma equipe pode optar por fixar uma versão conhecida, inspecionar o código-fonte ou manter um fork caso seja necessário suporte de longo prazo.

Instalação e configuração do projeto

O Sift pode ser adicionado a um projeto do Roblox por meio do Wally, do roblox-ts ou de um fluxo manual. Selecione uma rota e mantenha a organização das dependências consistente em toda a equipe. Misturar métodos de instalação sem um motivo claro pode dificultar o controle de versões e a implantação.

Verifique a versão primeiro

Antes de instalar, confirme a versão usada pelo seu projeto e fixe-a sempre que possível. Evite copiar um marcador de versão flutuante para a configuração de produção sem verificar a versão disponível.

Comparação das rotas de instalação

Fluxo de trabalhoReferência do pacoteMelhor paraPrincipal consideração
Wallycsqrl/sift@x.x.xProjetos em Luau que usam WallySubstitua o marcador pela versão selecionada
roblox-ts@rbxts/siftProjetos em TypeScriptInstale pelo fluxo npm do projeto
Creator StoreModelo do SiftConfigurações focadas no StudioRevise a hierarquia inserida antes de usar
Versão do GitHubArquivos de versão do repositórioControle ou inspeção manualMantenha seu próprio registro de versão

Configuração do Wally

Para um projeto baseado em Wally, adicione o Sift como dependência em wally.toml:

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

Substitua x.x.x pela versão selecionada para o seu projeto. Em seguida, execute:

wally install

Após a instalação, confirme que o pacote aparece no local esperado e que o mapeamento do Rojo do seu projeto inclui o caminho da dependência. A estrutura exata das pastas depende do modelo do seu projeto, portanto verifique a árvore gerada em vez de presumir que todos os repositórios usam a mesma estrutura.

Configuração do roblox-ts

O Sift inclui compatibilidade com TypeScript e uma API projetada para corresponder à sua contraparte em Luau. Um projeto roblox-ts pode instalar o pacote com:

npm install @rbxts/sift

Uma mesclagem simples de dicionários pode ser semelhante a esta:

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

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

O comportamento importante é que o resultado é um novo dicionário. As entradas originais continuam sendo valores separados. Confirme a configuração do compilador e a versão do pacote antes de depender de uma exportação de tipo específica.

1

Escolha a rota da dependência

Decida se o projeto usará Wally, roblox-ts, um modelo da Creator Store ou uma versão gerenciada manualmente. Registre essa decisão no README do projeto.

2

Fixe e instale o pacote

Selecione uma versão conhecida, adicione a dependência e execute o comando de instalação correspondente. Mantenha o lockfile ou o registro de versão sob controle de versão.

3

Verifique o caminho de importação

Abra um pequeno módulo de teste e importe o utilitário de coleções que você pretende usar. Resolva problemas de mapeamento do pacote antes de integrar o Sift a sistemas maiores.

4

Execute um teste focado

Mescle dois dicionários pequenos, confirme o resultado esperado e verifique se as entradas originais não foram alteradas.

Padrões de dicionários imutáveis

As operações com dicionários são o ponto de entrada mais prático para muitos sistemas do Roblox. Um dicionário é uma tabela de chave e valor, como um perfil contendo moedas, configurações e conteúdo desbloqueado. Com atualizações imutáveis, cada operação produz um valor substituto em vez de modificar a tabela compartilhada diretamente.

Padrão de estado recomendado

Mantenha o estado atual em uma variável, calcule o próximo estado com o Sift e substitua a referência somente depois que a transformação for concluída com sucesso.

Objetivos comuns de transformação

ObjetivoPadrão do SiftResultado esperado
Combinar valoresDictionary.mergeUm novo dicionário contendo as chaves selecionadas
Remover um valorUse o auxiliar de remoção da bibliotecaUm novo dicionário sem a entrada selecionada
Aplicar uma atualização direcionadaUse um auxiliar de atualização de dicionárioSomente a chave pretendida é alterada
Representar uma exclusãoSift.None nas operações compatíveisA chave selecionada é omitida do resultado mesclado
Preservar os dados de entradaEvite atribuições diretas à tabela de origemO estado anterior continua disponível

O marcador Sift.None é especialmente útil em código baseado em mesclagem. No exemplo documentado, mesclar { a: 1, c: 2 } com { b: 3, c: Sift.None } produz { a: 1, b: 3 }. Isso comunica a exclusão como parte da transformação, em vez de misturar a lógica de exclusão em uma etapa separada de mutação.

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

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

O exemplo demonstra duas ideias úteis: uma substituição normal para soundEnabled e uma remoção explícita para tutorialSeen. Sempre teste o comportamento exato do auxiliar em relação à versão instalada pelo seu projeto, especialmente ao migrar de outra biblioteca imutável.

Por que preservar as entradas é importante

A mutação direta pode criar acoplamentos ocultos:

profile.Coins += 50

Qualquer sistema que mantenha a mesma referência da tabela pode observar essa alteração imediatamente. Isso pode ser aceitável em um script pequeno, mas fica mais difícil de entender quando os dados do perfil são compartilhados por sistemas de salvamento, interface, análise e gameplay.

Uma abordagem imutável torna a transição mais deliberada:

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

A importação exata do módulo depende da estrutura do seu projeto. A prática principal é calcular updatedProfile como um novo valor e depois passá-lo aos sistemas que precisam do estado atualizado.

Mantenha as transformações pequenas

Evite criar uma única transformação grande que altere partes não relacionadas de um perfil. Operações menores são mais fáceis de testar e revisar:

  • Atualize as moedas separadamente das configurações.
  • Mescle os padrões do servidor antes de aplicar as preferências do jogador.
  • Remova campos temporários antes de salvar.
  • Mantenha o estado exclusivo da interface fora dos dados persistentes do perfil.
  • Dê nome aos valores intermediários quando uma transformação tiver várias etapas.

Comparação dos fluxos de trabalho em Luau e roblox-ts

O Sift foi projetado para oferecer suporte a fluxos de trabalho em Luau e roblox-ts. A API conceitual deve permanecer semelhante, mas as ferramentas ao redor são diferentes. Projetos em Luau normalmente usam Wally e Rojo, enquanto projetos em roblox-ts usam npm e compilação TypeScript.

Segurança de tipos não é validação em tempo de execução

Os tipos nativos do Luau e as declarações TypeScript ajudam durante o desenvolvimento, mas não validam automaticamente os dados recebidos de jogadores, serviços de persistência ou limites externos.

Projetos em Luau

Use o Wally para gerenciar dependências, o Rojo para sincronização quando necessário e testes focados de módulos para transformações de coleções.

Projetos em roblox-ts

Instale @rbxts/sift, use a API tipada e mantenha as versões dos pacotes alinhadas à configuração do compilador TypeScript.

Camada de validação

Adicione uma biblioteca de validação separada ou verificações específicas do projeto quando os dados atravessarem um limite de confiança ou entrarem no armazenamento persistente.

Escolhendo entre Luau e TypeScript

Perfil do projetoMelhor opçãoConsideração sobre o Sift
Base de código existente em LuauPacote LuauMantenha os imports e mapeamentos de pacotes simples
Fluxo de trabalho de uma equipe tipadaroblox-tsUse a compatibilidade integrada com TypeScript
Repositório mistoConvenções compartilhadasDocumente qual camada é responsável por cada transformação
Entrada não confiávelQualquer linguagemAdicione a validação em tempo de execução separadamente
Manutenção de longo prazoDependência fixadaRegistre a versão selecionada e revise a saúde do projeto

Testando o comportamento imutável

Um teste útil deve verificar tanto o resultado quanto a entrada original:

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

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

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

Esse teste é intencionalmente pequeno. Ele confirma a propriedade mais importante: o valor atualizado contém os novos dados enquanto o original permanece inalterado. Amplie a suíte de testes para dicionários aninhados, chaves ausentes, marcadores de exclusão e arrays usados pela sua aplicação.

Manutenção, compatibilidade e boas práticas

Uma dependência faz parte da superfície técnica do seu projeto. Antes de usar o Sift em um novo sistema de produção, revise a atividade do repositório, o histórico de versões, a licença, a disponibilidade do pacote e a compatibilidade com a sua ferramenta atual do Roblox.

Planeje a responsabilidade pela dependência

Se uma biblioteca não for mais mantida ativamente, fixe a versão, arquive a documentação da qual você depende e decida se sua equipe fará um fork ou a substituirá caso uma futura alteração na ferramenta cause problemas.

Checklist de revisão da dependência

Antes de adicionar o Sift:

  • Confirme a versão selecionada do pacote e a rota de instalação
  • Teste o comportamento de mesclagem e exclusão de dicionários no projeto atual
  • Verifique a compatibilidade entre Luau, roblox-ts, Wally, Rojo e o compilador
  • Adicione validação em tempo de execução para dados não confiáveis ou persistentes
  • Registre um plano alternativo caso a manutenção ou a compatibilidade mudem

Regras práticas de engenharia

  1. Não altere o estado compartilhado acidentalmente. Trate as tabelas de perfil e configuração como valores que devem ser substituídos deliberadamente.
  2. Mantenha limites claros entre os pacotes. Uma biblioteca utilitária deve transformar dados, enquanto os sistemas de persistência e rede devem assumir suas respectivas responsabilidades.
  3. Valide nos limites. Tipos estáticos não podem garantir que os dados salvos ou as entradas remotas tenham o formato esperado.
  4. Prefira valores intermediários explícitos. Nomes como mergedDefaults, playerSettings e nextProfile tornam as transformações mais fáceis de inspecionar.
  5. Teste o comportamento de exclusão. Uma chave ausente, um valor nil e Sift.None podem ter significados diferentes em uma operação de mesclagem.
  6. Documente a versão escolhida. Isso é especialmente importante quando o projeto pode ser mantido por colaboradores que não selecionaram a dependência original.

Estrutura de documentação sugerida

Página de documentaçãoIncluir
InstalaçãoRota do pacote, versão, comandos, mapeamento de pastas
Notas da APIAuxiliares usados pelo projeto e exemplos curtos
Convenções de estadoQuais tabelas são imutáveis e quem é responsável pelas substituições
ValidaçãoVerificações em tempo de execução para dados salvos e remotos
Plano de atualizaçãoTestes de compatibilidade, revisão da dependência, opção alternativa

A documentação gerada e vinculada pelo ecossistema do projeto pode ajudar com assinaturas exatas, enquanto o repositório continua sendo o melhor lugar para revisar o código-fonte, as versões e as informações de licenciamento. Evite copiar exemplos sem verificar se a sintaxe corresponde à versão instalada no seu projeto.

FAQ da documentação do Sift para Roblox

Referência rápida

Comece com uma transformação de dicionário, teste a entrada inalterada e só expanda para sistemas de estado maiores depois que o comportamento estiver claro.

Q: Para que o Sift é usado no desenvolvimento do Roblox?

O Sift é uma biblioteca de dados imutáveis para Luau e roblox-ts. Ele ajuda desenvolvedores a criar dicionários, arrays e valores de coleções atualizados sem alterar diretamente a tabela original.

Q: Como posso instalar o Sift em um projeto do Roblox?

As rotas documentadas incluem Wally, o pacote de roblox-ts chamado @rbxts/sift, um modelo da Roblox Creator Store e arquivos de versão do GitHub. Escolha uma rota e registre a versão usada pelo projeto.

Q: O que Sift.None faz?

Nas operações de mesclagem compatíveis, Sift.None representa a remoção de uma chave. Por exemplo, mesclar um dicionário com c definido como Sift.None pode produzir um resultado no qual c é omitido.

Q: O Sift substitui a validação de dados em tempo de execução?

Não. Os tipos nativos do Luau e as tipagens TypeScript ajudam nas verificações durante o desenvolvimento, mas as equipes devem adicionar uma camada de validação separada para entradas remotas, dados salvos e outros limites não confiáveis.