Shotnest

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

  1. Cole cada trecho exatamente como foi capturado, com chaves e operadores.
  2. Leia primeiro a linha “Exatamente iguais”; é a única verificação que mantém maiúsculas e espaçamento.
  3. Depois leia “Iguais após normalização” e o valor de sobreposição como fatos separados.
  4. Abra as listas de termos que aparecem apenas no primeiro e apenas no segundo texto; operadores e pontuação grudada costumam aparecer ali.
  5. 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

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.