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
- Incolla ogni frammento esattamente come è stato catturato, con parentesi graffe e operatori.
- Leggi prima la riga “Esattamente uguali”; è l’unico controllo che conserva maiuscole e spazi.
- Poi leggi “Uguali dopo la normalizzazione” e il valore di sovrapposizione come fatti distinti.
- Apri gli elenchi dei token presenti solo nel primo e solo nel secondo testo; di solito operatori e punteggiatura attaccata compaiono lì.
- 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
- Prendere una sovrapposizione vicina a 1 come prova che due funzioni si comportano allo stesso modo.
- Saltare la riga dell’uguaglianza esatta e non accorgersi di un cambio di maiuscole in un identificatore.
- Confrontare un frammento la cui copia con Testo live ha perso una parentesi o ha unito due colonne.
- Aspettarsi che lo strumento segnali un operatore di confronto cambiato come più importante di una parola cambiata.
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.