- 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.
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.removeou atribuirnilmanualmente. - 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 uso | Por que as operações imutáveis ajudam | Ponto de partida recomendado |
|---|---|---|
| Perfis de jogadores | Reduz alterações acidentais entre sistemas | Operações de Dictionary |
| Estado da interface | Facilita a comparação das transições de estado | Atualizações pequenas e focadas |
| Dados do inventário | Mantém as transformações explícitas | Auxiliares de dicionários e arrays |
| Configuração | Oferece suporte a padrões e substituições em camadas | Dictionary.merge |
| Código TypeScript compartilhado | Preserva 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.
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 trabalho | Referência do pacote | Melhor para | Principal consideração |
|---|---|---|---|
| Wally | csqrl/sift@x.x.x | Projetos em Luau que usam Wally | Substitua o marcador pela versão selecionada |
| roblox-ts | @rbxts/sift | Projetos em TypeScript | Instale pelo fluxo npm do projeto |
| Creator Store | Modelo do Sift | Configurações focadas no Studio | Revise a hierarquia inserida antes de usar |
| Versão do GitHub | Arquivos de versão do repositório | Controle ou inspeção manual | Mantenha 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.
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.
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.
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.
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.
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
| Objetivo | Padrão do Sift | Resultado esperado |
|---|---|---|
| Combinar valores | Dictionary.merge | Um novo dicionário contendo as chaves selecionadas |
| Remover um valor | Use o auxiliar de remoção da biblioteca | Um novo dicionário sem a entrada selecionada |
| Aplicar uma atualização direcionada | Use um auxiliar de atualização de dicionário | Somente a chave pretendida é alterada |
| Representar uma exclusão | Sift.None nas operações compatíveis | A chave selecionada é omitida do resultado mesclado |
| Preservar os dados de entrada | Evite atribuições diretas à tabela de origem | O 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.
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 projeto | Melhor opção | Consideração sobre o Sift |
|---|---|---|
| Base de código existente em Luau | Pacote Luau | Mantenha os imports e mapeamentos de pacotes simples |
| Fluxo de trabalho de uma equipe tipada | roblox-ts | Use a compatibilidade integrada com TypeScript |
| Repositório misto | Convenções compartilhadas | Documente qual camada é responsável por cada transformação |
| Entrada não confiável | Qualquer linguagem | Adicione a validação em tempo de execução separadamente |
| Manutenção de longo prazo | Dependência fixada | Registre 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.
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
- Não altere o estado compartilhado acidentalmente. Trate as tabelas de perfil e configuração como valores que devem ser substituídos deliberadamente.
- 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.
- Valide nos limites. Tipos estáticos não podem garantir que os dados salvos ou as entradas remotas tenham o formato esperado.
- Prefira valores intermediários explícitos. Nomes como
mergedDefaults,playerSettingsenextProfiletornam as transformações mais fáceis de inspecionar. - Teste o comportamento de exclusão. Uma chave ausente, um valor
nileSift.Nonepodem ter significados diferentes em uma operação de mesclagem. - 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ção | Incluir |
|---|---|
| Instalação | Rota do pacote, versão, comandos, mapeamento de pastas |
| Notas da API | Auxiliares usados pelo projeto e exemplos curtos |
| Convenções de estado | Quais tabelas são imutáveis e quem é responsável pelas substituições |
| Validação | Verificações em tempo de execução para dados salvos e remotos |
| Plano de atualização | Testes 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
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.