J'avais l'impression que maintenant tout le monde était d'accord que cette maxime était une erreur. Mais j'ai récemment vu cette réponse qui a un commentaire "soyez indulgents" voté 137 fois (à ce jour).
À mon avis, la clémence dans ce que les navigateurs acceptent était la cause directe du désordre absolu que HTML et certaines autres normes Web étaient il y a quelques années, et n'ont commencé à se cristalliser correctement que récemment. La façon dont je le vois, être clément dans ce que vous acceptez va conduire à cela.
La deuxième partie de la maxime est «éliminer silencieusement les entrées défectueuses, sans renvoyer un message d'erreur à moins que cela ne soit requis par la spécification» , et cela semble offensant à la limite. Tout programmeur qui s'est cogné la tête contre le mur quand quelque chose échoue silencieusement saura ce que je veux dire.
Alors, je me trompe complètement à ce sujet? Mon programme doit-il être indulgent dans ce qu'il accepte et avaler les erreurs en silence? Ou suis-je mal interprété ce que cela est censé signifier?
La question initiale disait «programme», et je comprends tout le monde à ce sujet. Il peut être logique que les programmes soient indulgents. Ce que je voulais vraiment dire, cependant, ce sont les API: des interfaces exposées à d' autres programmes , plutôt qu'à des personnes. HTTP est un exemple. Le protocole est une interface que seuls les autres programmes utilisent. Les gens ne fournissent jamais directement les dates qui entrent dans des en-têtes comme "If-Modified-Since".
Donc, la question est: le serveur implémentant une norme doit-il être indulgent et autoriser les dates dans plusieurs autres formats, en plus de celui qui est réellement requis par la norme? Je crois que "être indulgent" est censé s'appliquer à cette situation, plutôt qu'aux interfaces humaines.
Si le serveur est indulgent, cela peut sembler une amélioration globale, mais je pense qu'en pratique, cela ne mène qu'à des implémentations client qui finissent par s'appuyer sur la clémence et donc à ne pas travailler avec un autre serveur qui est indulgent de manière légèrement différente.
Donc, un serveur exposant une API devrait-il être indulgent ou est-ce une très mauvaise idée?
Passons maintenant à la gestion clémente des entrées utilisateur. Considérez YouTrack (un logiciel de suivi des bogues). Il utilise une langue pour la saisie de texte qui rappelle Markdown. Sauf que c'est "indulgent". Par exemple, écrire
- foo
- bar
- baz
n'est pas un moyen documenté de créer une liste à puces, et pourtant cela a fonctionné. Par conséquent, il a fini par être beaucoup utilisé dans notre bugtracker interne. La version suivante sort, et cette fonctionnalité indulgente commence à fonctionner légèrement différemment, cassant un tas de listes qui ont (mal) utilisé cette (non) fonctionnalité. La manière documentée de créer des listes à puces fonctionne toujours, bien sûr.
Alors, mon logiciel doit-il être indulgent dans les entrées utilisateur qu'il accepte?