Je rappelle cependant que j'avais immédiatement émis des réserves sur cette solution, à cause de la duplication du code d'émission du résultat :
...if ($i ne $pi) { say "$pi:$m" if $pi; ($pi, $m) = ($i, $n) } else { $m = $n if $n > $m }} say "$pi:$m"
car s'il y a quelque chose que j'ai retenu de mes décennies de codage c'est bien l'importance de l'exigence cardinale de ne pas dupliquer de code (DRY :
don't repeat yourself) car toute duplication de code est potentiellement un cauchemar de maintenance.
Et franchement la manière dont le demandeur s'est initialement approprié la solution (en reconnaissant qu'il n'a pas codé de manière très propre
) me conforte dans cette position :
...
push @csv_best, "$prot_desc_prev;$pi;$prot_score_prev;$m;$prot_sequences_prev;$prot_pi_prev\n" if $pi;
...
push @csv_best, "$prot_desc_prev;$pi;$prot_score_prev;$m;$prot_sequences_prev;$prot_pi_prev\n";
Si la duplication de mon malheureux
say "$pi:$m" me causait de l'inconfort
, on peut imaginer ce que ces deux lignes m'inspirent
Alors je suis peut-être obsédé par la qualité logicielle mais pour moi c'est un problème
sérieux. Et qui à défaut de meilleure solution justifie amplement l'introduction d'un writer. Ce n'est pas de l'over-engineering, c'est une stratégie de survie.
Partager