Shotnest

Shotnest · Biblioteca

Confronta codice senza presumere comportamento uguale

Confronta due frammenti di codice nello strumento di testo di Shotnest e scopri perché if (count > 0) e if (count >= 0) condividono ancora 0,778 dei loro token.

Che cosa fa il confronto al codice

Lo strumento di confronto porta in minuscolo entrambi gli input, applica la stessa conversione dei caratteri che Shotnest usa per la ricerca (accenti rimossi, lettere a larghezza piena portate a mezza larghezza), compatta ogni sequenza di spazi in un solo spazio e poi divide agli spazi. Riporta la quota di token distinti che i due testi hanno in comune, più i token presenti da un solo lato. Rientri, a capo e maiuscole spariscono prima di questo passaggio, il che è comodo per la prosa e rischioso per il codice.

Non viene eseguito nulla. La pagina tratta un frammento incollato come testo semplice e mostra il risultato senza trasformarlo in markup, quindi i numeri descrivono caratteri, non comportamenti.

Preparare i due frammenti

  1. Incolla ogni frammento esattamente come è stato catturato, con parentesi graffe e operatori.
  2. Leggi prima la riga “Esattamente uguali”; è l’unico controllo che conserva maiuscole e spazi.
  3. Poi leggi “Uguali dopo la normalizzazione” e il valore di sovrapposizione come fatti distinti.
  4. Apri gli elenchi dei token presenti solo nel primo e solo nel secondo testo; di solito operatori e punteggiatura attaccata compaiono lì.
  5. Torna allo screenshot per tutto ciò che gli elenchi di token non possono mostrare, come i rientri in un linguaggio in cui contano.

Due frammenti, un operatore cambiato

Primo testo: “if (count > 0) { return count; }” scritto su tre righe. Secondo testo: la stessa istruzione su una riga, con >= al posto di >. Dopo la normalizzazione gli a capo sono spariti, quindi gli unici token diversi sono > e >=. Sette dei nove token distinti sono condivisi, il che dà 7 ÷ 9.

Esattamente uguali
No
Uguali dopo la normalizzazione
No
Sovrapposizione delle parole
0,7777777777777778
Solo nel primo testo
>
Solo nel secondo testo
>=

Una seconda coppia mostra il rischio opposto: “const Total = 1;” e “const total = 1;” risultano uguali dopo la normalizzazione con sovrapposizione 1, anche se molti linguaggi trattano Total e total come nomi diversi.

Errori con il testo del codice

Dove si ferma il confronto

La sovrapposizione dei token è una misura del testo. Ignora l’ordine, i token ripetuti e gli spazi, quindi non può dirti se il codice compila o restituisce lo stesso valore. Nell’app Shotnest, uno screenshot di codice va nello scaffale Codice quando tre o più righe iniziano come codice (import, def, return e simili); quello scaffale serve a ritrovarlo, ed eseguirlo è compito del tuo ambiente.