Você usou uma ferramenta de programação com IA para criar um recurso. A lista aparece, os filtros funcionam e outro prompt muda o resultado. Então alguém pergunta por que um item desapareceu ou se uma pequena mudança de regra afetará outros filtros. Você precisa perguntar à IA novamente.
Experimente com um pequeno filtro JavaScript. Anote quais itens ele vai manter, altere o limite de estoque à mão e compare o resultado com sua previsão.
Escolha um comportamento que consiga prever
“Ensine-me este app inteiro” é uma tarefa grande. Escolha um resultado específico: quais itens permanecem quando categoria, texto de busca e disponibilidade são combinados?
Faça três perguntas antes de mudar o código:
- Quais IDs esta entrada deve retornar?
- Qual condição inclui ou exclui cada item?
- Se a regra de disponibilidade mudar, quais resultados devem permanecer iguais?
Se ainda não entende a sintaxe, examine uma expressão por vez. Neste exercício, filter mantém itens cujo callback retorna true, && exige todas as condições e || permite que qualquer lado satisfaça a condição. A entrada e a saída são pequenas o bastante para calcular no papel.
Baixe o laboratório de aprendizado com filtros. O código e os quatro registros foram construídos para esta lição; não são uma resposta capturada de IA nem código de uma aplicação real. Descompacte e abra filter-learning-lab. Você precisa de Node.js 22 ou posterior, editor de texto e terminal. Não há dependências para instalar, chamadas de modelo ou requisições de rede.
Escreva três previsões antes de executar
Leia catalog.mjs e filter.mjs. O catálogo contém estes registros:
| ID | Rótulo | Categoria | Estoque |
|---|---|---|---|
folded-stars |
Folded stars | paper |
1 |
paper-kites |
Paper kites | paper |
3 |
clay-moons |
Clay moons | clay |
0 |
clay-bells |
Clay bells | clay |
2 |
A regra original inclui um item com pelo menos uma unidade. A busca usa o rótulo, ignora maiúsculas/minúsculas e remove espaços nas extremidades da consulta. Categoria, busca e disponibilidade precisam corresponder. A categoria all aceita qualquer categoria; a busca vazia aceita qualquer rótulo.
Abra blank-note.md e escreva os IDs esperados para estas entradas. Consulte a função quando precisar, mas ainda não execute o observador nem peça a resposta.
| Caso | Categoria | Busca | availableOnly |
O que explicar |
|---|---|---|---|---|
| A | paper |
vazia | true |
Por que estoque 1 ainda serve |
| B | all |
CLAY |
false |
Por que o item sem estoque aparece |
| C | clay |
bells |
true |
Como as três condições se combinam |
Depois execute estes comandos na pasta extraída:
node observe.mjs
node --test baseline.test.mjs
Compare suas previsões com os resultados originais
| Caso | IDs originais | Motivo |
|---|---|---|
| A | folded-stars, paper-kites |
Ambos são de papel e têm estoque de pelo menos 1. |
| B | clay-moons, clay-bells |
A busca no rótulo, sem espaços extras e sem diferenciar maiúsculas, encontra ambos. O filtro de disponibilidade está desligado. |
| C | clay-bells |
Corresponde à categoria e ao rótulo, e seu estoque é 2. |
Se sua previsão divergir, marque a primeira condição que entendeu errado. No caso B, “o item tem estoque” seria uma explicação errada: clay-moons tem estoque zero. Ele permanece porque availableOnly é false, então a condição não o exclui.
Explique a regra sem copiar uma resposta
Feche a nota preenchida se a abriu. Escreva duas ou três frases explicando o caso B para alguém olhando o catálogo. Inclua a entrada real e a condição que permite estoque zero.
Separe os poucos arquivos e suas funções:
| Arquivo | Função neste exercício |
|---|---|
catalog.mjs |
Fornece os quatro registros. |
filter.mjs |
Decide quais registros correspondem às condições fornecidas. |
observe.mjs |
Fornece três conjuntos de condições e imprime IDs e estoques selecionados. |
baseline.test.mjs |
Verifica o comportamento original do filtro. |
O observador é um chamador no terminal, não uma captura de navegador. No seu app, um botão ou formulário pode fornecer valores semelhantes; leia esse chamador antes de presumir o que a interface envia.
Use o leitor de código local do Yenpo para manter dados, filtro e chamador abertos durante a leitura. A busca de arquivos e texto não exige modelo. Se usar o AI Reader com seu provedor, pergunte sobre a condição em que travou, volte ao código ao redor e escreva sua própria explicação. Execute os comandos no Terminal; este exercício não precisa de resposta de modelo.
Altere uma regra manualmente
Agora mude o requisito: com o filtro de disponibilidade ligado, mostre apenas materiais com estoque para duas pessoas, uma unidade por pessoa. Preserve a filtragem por categoria, a normalização da busca e o comportamento com disponibilidade desligada.
A regra original de “pelo menos um” estava correta para o requisito original. É uma pequena mudança de recurso, não uma correção de bug oculto.
Antes de editar, escreva outra previsão. O caso A deve perder folded-stars. B deve manter o registro sem estoque porque o filtro está desligado. C deve manter clay-bells, com estoque exatamente 2.
Execute uma vez as verificações do novo requisito contra o código original:
node --test exercise/pair-policy.check.mjs
Espera-se que o comando falhe antes da edição: a função baixada ainda aceita estoque 1. Leia a asserção que falhou para identificar o comportamento ainda não implementado. Erro de sintaxe ou arquivo ausente seria outro tipo de falha.
Em filter.mjs, mude apenas o limite de >= 1 para >= 2. Preserve a condição availableOnly ao redor. Depois execute:
node observe.mjs
node --test exercise/pair-policy.check.mjs
| Caso | IDs após a edição | O que verifica |
|---|---|---|
| A | paper-kites |
Uma unidade não atende mais à regra de duas pessoas. |
| B | clay-moons, clay-bells |
Desligar disponibilidade continua ignorando o estoque; a busca ainda remove espaços e ignora maiúsculas. |
| C | clay-bells |
Duas unidades exatas bastam; trocar para > 2 estaria errado. |
A suíte original descreve a regra de uma unidade. As asserções afetadas falharão após esta mudança intencional de requisito. Use as verificações de duas pessoas, nomeadas separadamente, para o novo comportamento; não apague uma asserção apenas para ocultar uma falha. O pacote mantém o código original para repetir o exercício.
Explique a mudança novamente, incluindo o que ficou igual
Deixe o exemplo preenchido de lado e termine sua nota com suas palavras. Ela deve identificar:
- Os limites de estoque antigo e novo e a posição exata alterada.
- Por que A perde um item enquanto B permanece igual.
- Por que estoque exatamente 2 ainda precisa servir no caso C.
- Os comandos executados e o que suas saídas mostraram.
- O que não foi conferido, como entradas de um formulário real, comportamento do servidor ou persistência.
Uma explicação final útil é específica: “Com disponibilidade ligada, todos os filtros devem corresponder e o estoque agora precisa ser pelo menos dois. Desligada, o estoque não afeta a seleção. O novo limite remove folded-stars de A, enquanto B e C mantêm os IDs.” Feche a página e tente explicar pelo código, sem memorizar a frase.
Agora tente outra entrada. Preveja o resultado antes de executar e explique quais condições mantiveram ou removeram cada item.
Use o ciclo em um recurso do seu projeto
Escolha um comportamento pequeno com entradas visíveis e saída reproduzível. Registre a versão, faça uma cópia ou use seu fluxo de controle de versão e mantenha a primeira edição restrita. Escreva a previsão antes de executar. Se o resultado divergir, leia a condição relevante e o chamador antes de pedir outro patch gerado.
Se ainda não consegue localizar o comportamento, comece encontrando uma entrada em código desconhecido. Para decidir se uma explicação da IA é verdadeira, use o exercício de verificação de explicações. Para revisar uma mudança proposta, o passo a passo do cache de promises examina um patch concreto e seu caso de falha.