En stage, on m'a demandé de reprendre et d'améliorer un clavier virtuel implémenté en C# .NET par mon maître de stage. Le clavier possédait 3 états : minuscules, majuscules, et caractères spéciaux/chiffres.
Chaque « touche » du clavier était représentée par un bouton, et avait le bon caractère à afficher dessus (c'est-à-dire que le texte du bouton est bien modifié en fonction de l'état). Voilà à quoi ressemblait le code que j'ai ouvert :
button_A_Click(object sender, EventArgs e)
{
if (etat == min) { envoyer("a"); }
else if (etat == maj) { envoyer("A"); }
else { envoyer("0"); }
}
button_B_Click(object sender, EventArgs e)
{
[…]
En effet, au lieu de créer une seule fonction commune à toutes les touches qui envoie simplement le texte affiché dessus, le développeur avait créé une fonction différente pour chaque touche du clavier, avec des conditions pour chaque état. PEBKAC.