Php : optimisation vs lisibilité
Attention, ce qui suit ne s’applique pas systématiquement partout, mais il faut avoir cela en tête dans certaines occasions.
Ci-suivent deux possibilités de codes qui font exactement la même chose : vous allez certainement me dire : le code 2 est très nettement moins bien que le code 1, à savoir que si on veut rajouter quelque chose dans le 1 c’est une ligne alors que dans le 2 c’est quatre lignes. Eh bien c’est vrai, mais il faut garder le code 2 qui est plus long et qui semble se répéter de manière inutile. Pourquoi, me demanderez-vous ? Je vais vous dire pourquoi :
Il faut toujours adapter le code en fonction de votre supérieur hiérarchique.
Si, si, je ne plaisante pas. Si vous avec un patron qui vous dit, une bonne fois pour toutes : « Voilà les champs qu’on utilisera cela ne changera pas », et, surtout, que c’est vrai, alors vous pouvez vous faire plaisir et factoriser au maximum. A l’inverse, un patron qui arrive et qui vous dit « Voilà les champs qu’on utilisera cela ne changera pas », et, le connaissant vous savez que c’est faux, alors utilisez le code 2. Cela m’arrive tout le temps : « Au fait Olivier j’ai oublié de te dire : il y a un nouveau champ garantie qui est, en réalité un pourcentage d’une autre garantie et il faut s’assurer que l’autre existe vraiment ». Si vous avez adopté le code 1 avec ce genre de patron, vous êtes fichu : Ce code n’est pas prévu pour gérer des exceptions.
Dernier argument pour le code 2 : il est beaucoup plus compréhensible que le code 1. Beaucoup, beaucoup, beaucoup. Et si quelqu’un doit prendre le relai après vous, votre objectif en tant que professionnel, c’est de lui faciliter la tâche au maximum. Donc… vive le code 2 !
Code 1
private function CreerTableauValeursGarantie($gar,$tab)
{
foreach ($tab as $fc_aff=>$tab_get) {
if ($gar->$fc_aff()) {
foreach ($tab_get as $idx=>$fc_get) {
$ret[$idx]=$gar->$fc_get();
}
}
}
}
$tab_gar[$id_g][$idp_idf] =
$this->CreerTableauValeursGarantie($gar, array(
'getAffSurmortalite' => array(
VAL_SURMORTALITE => 'getTauxSurprime2'),
'getAffSurprime1' => array(
VAL_SURPRIME_ADDITIONNELLE_DUREE_1 => 'getSurprimeAddDuree1',
VAL_SURPRIME_ADDITIONNELLE_TAUX_1 => 'getSurprimeAddTaux1'),
'getAffSurprime2' => array(
VAL_SURPRIME_ADDITIONNELLE_DUREE_2 => 'getSurprimeAddDuree2',
VAL_SURPRIME_ADDITIONNELLE_TAUX_2 => 'getSurprimeAddTaux2'),
'getAffSurprime3' => array(
VAL_SURPRIME_ADDITIONNELLE_DUREE_3 => 'getSurprimeAddDuree3',
VAL_SURPRIME_ADDITIONNELLE_TAUX_3 => 'getSurprimeAddTaux3'),
'getAffSurprime4' => array(
VAL_SURPRIME_ADDITIONNELLE_DUREE_4 => 'getSurprimeAddDuree4',
VAL_SURPRIME_ADDITIONNELLE_TAUX_4 => 'getSurprimeAddTaux4'),
'getAffSurprime5' => array(
VAL_SURPRIME_ADDITIONNELLE_DUREE_5 => 'getSurprimeAddDuree5',
VAL_SURPRIME_ADDITIONNELLE_TAUX_5 => 'getSurprimeAddTaux5'),
'getAffExclusionsPathos' => array(
VAL_GAR_EXCLUSIONSPATHOS => 'getExclusionsPathologies' ),
'getAffExclusionsSports' => array(
VAL_GAR_EXCLUSIONSSPORTS => 'getExclusionsSports' ),
'getAffExclusionsProfs' => array(
VAL_GAR_EXCLUSIONSPROFS => 'getExclusionsProfessions' ),
'getAffMensualite' => array(
VAL_GAR_MENSUALITE => 'getMensualite' ),
'getAffFranchise' => array(
VAL_GAR_FRANCHISE => 'getAffFranchise' )));
Code 2
if ($gar->getAffSurmortalite()) {
$tab_gar[$id_g][$idp_idf][VAL_SURMORTALITE ] =
$gar->getTauxSurprime2();
}
if ($gar->getAffSurprime1()) {
$tab_gar[$id_g][$idp_idf][VAL_SURPRIME_ADDITIONNELLE_DUREE_1 ] =
$gar->getSurprimeAddDuree1();
$tab_gar[$id_g][$idp_idf][VAL_SURPRIME_ADDITIONNELLE_TAUX_1 ] =
$gar->getSurprimeAddTaux1();
}
if ($gar->getAffSurprime2()) {
$tab_gar[$id_g][$idp_idf][VAL_SURPRIME_ADDITIONNELLE_DUREE_2 ] =
$gar->getSurprimeAddDuree2();
$tab_gar[$id_g][$idp_idf][VAL_SURPRIME_ADDITIONNELLE_TAUX_2 ] =
$gar->getSurprimeAddTaux2();
}
if ($gar->getAffSurprime3()) {
$tab_gar[$id_g][$idp_idf][VAL_SURPRIME_ADDITIONNELLE_DUREE_3 ] =
$gar->getSurprimeAddDuree3();
$tab_gar[$id_g][$idp_idf][VAL_SURPRIME_ADDITIONNELLE_TAUX_3 ] =
$gar->getSurprimeAddTaux3();
}
if ($gar->getAffSurprime4()) {
$tab_gar[$id_g][$idp_idf][VAL_SURPRIME_ADDITIONNELLE_DUREE_4 ] =
$gar->getSurprimeAddDuree4();
$tab_gar[$id_g][$idp_idf][VAL_SURPRIME_ADDITIONNELLE_TAUX_4 ] =
$gar->getSurprimeAddTaux4();
}
if ($gar->getAffSurprime5()) {
$tab_gar[$id_g][$idp_idf][VAL_SURPRIME_ADDITIONNELLE_DUREE_5 ] =
$gar->getSurprimeAddDuree5();
$tab_gar[$id_g][$idp_idf][VAL_SURPRIME_ADDITIONNELLE_TAUX_5 ] =
$gar->getSurprimeAddTaux5();
}
if ($gar->getAffExclusionsPathos()) {
$tab_gar[$id_g][$idp_idf][VAL_GAR_EXCLUSIONSPATHOS ] =
$gar_cm->getExclusionsPathologies();
}
if ($gar->getAffExclusionsSports()) {
$tab_gar[$id_g][$idp_idf][VAL_GAR_EXCLUSIONSSPORTS ] =
$gar_cm->getExclusionsSports();
}
if ($gar->getAffExclusionsProfs()) {
$tab_gar[$id_g][$idp_idf][VAL_GAR_EXCLUSIONSPROFS ] =
$gar_cm->getExclusionsProfessions();
}
if ($gar->getAffMensualite()) {
$tab_gar[$id_g][$idp_idf][VAL_GAR_MENSUALITE ] =
$gar_cm->getMensualite();
}
if ($gar->getAffFranchise()) {
$tab_gar[$id_g][$idp_idf][VAL_GAR_FRANCHISE ] =
$gar_cm->getAffFranchise();
}