Inverser deux if imbriqués
Lors d’une refactorisation de code une technique qui peut être intéressante est celle permettant d’inverser deux blocs if
imbriqués.
Cela peut permettre ainsi de faire apparaître deux blocs équivalents.
L’exemple suivant (tiré du Kata Gilded Rose) est assez parlant :
Il serait préférable de faire ressortir le test sur le nom de l’item dans le second bloc afin qu’il soit au premier niveau.
Pour cela nous allons d’abord dupliquer le if
que nous souhaitons inverser. Cela peut paraître contre-productif de dupliquer du code mais dans le cadre de la refactorisation il est souvent souhaitable dans un premier temps de multiplier la duplication du code avant de pouvoir généraliser le code dans un second temps :
Une fois ceci fait nous relançons les tests avant de pouvoir supprimer la condition devenue superflue.
Afin de nous assurer que notre changement est correct nous pouvons déjà remplacer la condition dans le if
doublon par true
:
Nous relançons les tests et nous pouvons désormais supprimer sans réfléchir le if
superflu :
Désormais le code fait apparaître les instructions if
sur le nom de l’item au même niveau, nous permettant d’avancer dans la refactorisation…