Shotnest

Shotnest · Bibliothèque

Comparer du code sans présumer un comportement identique

Comparez deux extraits de code dans l’outil de texte de Shotnest et voyez pourquoi if (count > 0) et if (count >= 0) partagent encore 0,778 de leurs mots.

Ce que la comparaison fait au code

L’outil de comparaison met les deux saisies en minuscules, applique la même neutralisation de caractères que la recherche de Shotnest (accents retirés, lettres pleine chasse ramenées en demi-chasse), réduit chaque suite d’espaces à une seule espace, puis découpe aux espaces. Il indique la part de mots distincts que les deux textes ont en commun, ainsi que les mots présents d’un seul côté. L’indentation, les sauts de ligne et la casse disparaissent avant cette étape, ce qui est pratique pour de la prose et risqué pour du code.

Rien n’est exécuté. La page traite un extrait collé comme du texte brut et affiche le résultat sans le transformer en balisage : les chiffres décrivent des caractères, pas un comportement.

Préparer les deux extraits

  1. Collez chaque extrait exactement tel qu’il a été capturé, accolades et opérateurs compris.
  2. Lisez d’abord la ligne « Exactement identiques » ; c’est le seul contrôle qui conserve la casse et l’espacement.
  3. Lisez ensuite « Identiques après normalisation » et la valeur de chevauchement comme deux faits distincts.
  4. Ouvrez les listes de mots propres au premier et au deuxième texte ; les opérateurs et la ponctuation collée y apparaissent généralement.
  5. Revenez à la capture pour tout ce que ces listes ne peuvent pas montrer, comme l’indentation dans un langage où elle compte.

Deux extraits, un opérateur modifié

Premier texte : « if (count > 0) { return count; } » écrit sur trois lignes. Deuxième texte : la même instruction sur une ligne, avec >= au lieu de >. Après normalisation, les sauts de ligne ont disparu : les seuls mots différents sont donc > et >=. Sept des neuf mots distincts sont communs, ce qui donne 7 ÷ 9.

Exactement identiques
Non
Identiques après normalisation
Non
Chevauchement des mots
0,7777777777777778
Seulement dans le premier texte
>
Seulement dans le deuxième texte
>=

Une seconde paire montre le risque inverse : « const Total = 1; » et « const total = 1; » sont déclarés identiques après normalisation avec un chevauchement de 1, alors que de nombreux langages considèrent Total et total comme deux noms différents.

Erreurs avec du texte de code

Là où s’arrête la comparaison

Le chevauchement des mots est une mesure textuelle. Il ignore l’ordre, les répétitions et les espaces : il ne peut donc pas dire si le code compile ou renvoie la même valeur. Dans l’app Shotnest, une capture de code va sur l’étagère Code lorsque trois lignes ou plus commencent comme du code (import, def, return et semblables) ; cette étagère sert à la retrouver, et l’exécuter est l’affaire de votre propre environnement.