Shotnest · Bibliothek
Codetext ohne Annahme gleicher Ausführung vergleichen
Vergleichen Sie zwei Code-Snippets im Textwerkzeug von Shotnest und sehen Sie, warum if (count > 0) und if (count >= 0) dennoch 0,778 ihrer Tokens teilen.
Was der Vergleich mit Code macht
Das Vergleichswerkzeug schreibt beide Eingaben klein, wendet dieselbe Zeichenvereinheitlichung an, die Shotnest für die Suche nutzt (Akzente entfernt, Buchstaben in voller Breite auf halbe Breite gebracht), fasst jede Folge von Leerraum zu einem Leerzeichen zusammen und teilt dann an den Leerzeichen. Gemeldet wird der Anteil der verschiedenen Tokens, die beide Texte gemeinsam haben, dazu die Tokens, die nur auf einer Seite vorkommen. Einrückung, Zeilenumbrüche und Groß- und Kleinschreibung verschwinden vor diesem Schritt – praktisch für Prosa, riskant für Code.
Nichts wird ausgeführt. Die Seite behandelt ein eingefügtes Snippet als reinen Text und gibt das Ergebnis aus, ohne es in Markup zu verwandeln; die Zahlen beschreiben also Zeichen, nicht Verhalten.
Die beiden Snippets vorbereiten
- Fügen Sie jedes Snippet genau so ein, wie es erfasst wurde, mit seinen geschweiften Klammern und Operatoren.
- Lesen Sie zuerst die Zeile „Exakt gleich“; sie ist die einzige Prüfung, die Schreibung und Abstände berücksichtigt.
- Lesen Sie danach „Nach Normalisierung gleich“ und den Überschneidungswert als getrennte Tatsachen.
- Öffnen Sie die Token-Listen Nur im ersten Text und Nur im zweiten Text; Operatoren und angehängte Satzzeichen tauchen meist dort auf.
- Gehen Sie für alles, was die Token-Listen nicht zeigen können, zum Screenshot zurück, etwa für Einrückung in einer Sprache, in der sie zählt.
Zwei Snippets, ein geänderter Operator
Erster Text: „if (count > 0) { return count; }“, über drei Zeilen geschrieben. Zweiter Text: dieselbe Anweisung in einer Zeile mit >= statt >. Nach der Normalisierung sind die Zeilenumbrüche weg, daher sind > und >= die einzigen abweichenden Tokens. Sieben der neun verschiedenen Tokens sind gemeinsam, das ergibt 7 ÷ 9.
- Exakt gleich
- Nein
- Nach Normalisierung gleich
- Nein
- Wortüberschneidung
- 0,7777777777777778
- Nur im ersten Text
- >
- Nur im zweiten Text
- >=
Ein zweites Paar zeigt das umgekehrte Risiko: „const Total = 1;“ und „const total = 1;“ gelten nach der Normalisierung als gleich, mit Überschneidung 1, obwohl viele Sprachen Total und total als verschiedene Namen behandeln.
Fehler bei Codetext
- Eine Überschneidung nahe 1 als Beweis werten, dass sich zwei Funktionen gleich verhalten.
- Die Zeile für exakte Gleichheit überspringen und eine geänderte Schreibung in einem Bezeichner übersehen.
- Ein Snippet vergleichen, bei dem die Live-Text-Kopie eine Klammer verloren oder zwei Spalten zusammengeführt hat.
- Erwarten, dass das Werkzeug einen geänderten Vergleichsoperator als wichtiger markiert als ein geändertes Wort.
Wo der Vergleich aufhört
Die Wortüberschneidung ist ein Textmaß. Sie übergeht Reihenfolge, wiederholte Tokens und Leerraum und kann daher nicht sagen, ob der Code kompiliert oder denselben Wert zurückgibt. In der App Shotnest kommt ein Code-Screenshot in das Regal Code, wenn drei oder mehr Zeilen wie Code beginnen (import, def, return und Ähnliches); dieses Regal dient dem Wiederfinden, das Ausführen ist Sache Ihrer eigenen Umgebung.