Shotnest · Biblioteca
Compare código sem presumir comportamento equivalente
Compare dois trechos de código na ferramenta de texto do Shotnest e veja por que if (count > 0) e if (count >= 0) ainda compartilham 0,778 dos seus termos.
O que a comparação faz com o código
A ferramenta de comparação passa as duas entradas para minúsculas, aplica a mesma neutralização de caracteres que o Shotnest usa na busca (acentos removidos, letras de largura total convertidas para meia largura), reduz cada sequência de espaços em branco a um único espaço e depois divide nos espaços. O que ela informa é a fração de termos distintos que os dois textos têm em comum, além dos termos que aparecem em só um dos lados. Recuo, quebras de linha e maiúsculas somem antes dessa etapa, o que é prático para prosa e arriscado para código.
Nada é executado. A página trata o trecho colado como texto simples e mostra o resultado sem transformá-lo em marcação, então os números descrevem caracteres, não comportamento.
Prepare os dois trechos
- Cole cada trecho exatamente como foi capturado, com chaves e operadores.
- Leia primeiro a linha “Exatamente iguais”; é a única verificação que mantém maiúsculas e espaçamento.
- Depois leia “Iguais após normalização” e o valor de sobreposição como fatos separados.
- Abra as listas de termos que aparecem apenas no primeiro e apenas no segundo texto; operadores e pontuação grudada costumam aparecer ali.
- Volte à captura para tudo o que as listas de termos não mostram, como o recuo numa linguagem em que ele importa.
Dois trechos, um operador alterado
Primeiro texto: “if (count > 0) { return count; }” escrito em três linhas. Segundo texto: a mesma instrução numa linha só, com >= no lugar de >. Após a normalização, as quebras de linha desaparecem, então os únicos termos diferentes são > e >=. Sete dos nove termos distintos são comuns, o que dá 7 ÷ 9.
- Exatamente iguais
- Não
- Iguais após normalização
- Não
- Sobreposição de palavras
- 0,7777777777777778
- Apenas no primeiro texto
- >
- Apenas no segundo texto
- >=
Um segundo par mostra o risco oposto: “const Total = 1;” e “const total = 1;” aparecem como iguais após a normalização, com sobreposição 1, embora muitas linguagens tratem Total e total como nomes diferentes.
Erros com texto de código
- Tomar uma sobreposição perto de 1 como prova de que duas funções se comportam igual.
- Pular a linha de igualdade exata e não perceber uma mudança de maiúscula num identificador.
- Comparar um trecho cuja cópia pelo Texto ao Vivo perdeu um colchete ou juntou duas colunas.
- Esperar que a ferramenta destaque um operador de comparação alterado como mais importante que uma palavra alterada.
Onde a comparação para
A sobreposição de palavras é uma medida de texto. Ela ignora a ordem, os termos repetidos e os espaços em branco, então não diz se o código compila ou retorna o mesmo valor. No app Shotnest, uma captura de código vai para a prateleira Código quando três ou mais linhas começam como código (import, def, return e parecidos); essa prateleira serve para reencontrá-la, e executar o código é tarefa do seu próprio ambiente.