Un flag est un argument optionnel, le plus souvent boolean, influant sur le comportement d’une méthode.
File::make($name);
File::make($name, true);
À quoi correspond true
?
Auriez-vous deviné qu’un second argument existait ?
Vous rappelleriez-vous de son utilité dans quelques mois ?
C’est pour ces quelques raisons que l’utilisation d’un flag
est dangereuse pour l’expressivité de votre code et devrait être utilisé avec parcimonie.
Un flag
aura tendance à camoufler un comportement interne vous obligeant à vérifier la signature de votre méthode pour en saisir le sens, c’est une coupure cognitive que l’on doit éviter pour conserver une lecture fluide de notre code.
public static function make(string $name, bool $temporary)
{
if ($temporary) {
//
}
//
}
Ajouter un flag
à une méthode est également dangereux pour sa maintenabilité.
De facto, un flag
consiste à ajouter un comportement supplémentaire à votre méthode, prenant le risque de là faire grossir et d’augmenter ses responsabilités.
Une fonction doit faire une seule chose, elle doit la faire et ne faire qu’elle.
Un indicateur comme le lack of coherence pourra identifier les méthodes “qui en font trop”.
How to fix
Pour éliminer un flag il faut identifier les différents comportements de votre méthode pour les encapsuler, ainsi nous pourrons refactoriser notre code en plusieurs méthodes.
File::make($name);
File::makeTemporary($name);
Nous sommes désormais face à des méthodes plus courtes, plus facilement testables, avec des noms explicites.
Si cette refactorisation n’est pas envisageable il faut alors chercher à mitiger la problématique.
Par exemple, il sera possible d’expliciter un flag
en passant par une variable intermédiaire :
File::make($name, $temporary = true);
php8 offrant également la possibilité d’utiliser les named arguments :
File::make($name, temporary: true);