Règle
Ne pas placer affectations à l'intérieur conditionnelles.
Mélanger des affectation et condition logique rend le code sujet aux erreurs
et plus plus plus difficile à comprendre. Séparer devoirs des logiques logiques.
Langues supportés:** JavaScript, TypeScript, Python, PHPIntroduction
Les opérateurs d'affectation au sein des instructions conditionnelles sont une source courante de bugs que les compilateurs et les linters manquent souvent. L'erreur classique est d'utiliser = (affectation) au lieu de == ou === (comparaison) dans une instruction if, mais le problème est plus profond. Même les affectations intentionnelles dans les conditions créent un code difficile à lire, à réviser et à déboguer. Lorsque l'affectation et l'évaluation se produisent sur la même ligne, les lecteurs doivent analyser mentalement quelle opération a la priorité et quelle valeur est réellement testée.
Pourquoi c'est important
Pourquoi c'est important
Introduction de bugs : Une faute de frappe modifiant === à = ne causera pas d'erreur de syntaxe, mais modifiera silencieusement le comportement. La condition évalue la valeur assignée (vraie/fausse), et non le résultat de la comparaison.
Lisibilité du code : Les lecteurs s'attendent à ce que les conditions testent des valeurs, et non à ce qu'elles les modifient. Lorsque les deux se produisent simultanément, les mainteneurs doivent suivre quelles variables sont modifiées et à quel moment.
Exemples de code
❌ Non conforme :
function processUser(userData) {
if (user = userData.user) {
console.log(`Processing user: ${user.name}`);
return user.id;
}
return null;
}
function validateInput(value) {
if (result = value.match(/^\d{3}-\d{2}-\d{4}$/)) {
return result[0];
}
return false;
}
Pourquoi c'est incorrect : Les affectations à l'intérieur des conditions rendent incertain si cela est intentionnel ou une faute de frappe. Le premier exemple pourrait être un bug où === était prévu, et le second mélange la correspondance d'expressions régulières avec l'affectation, rendant le flux de code difficile à suivre.
✅ Conforme :
function processUser(userData) {
const user = userData.user;
if (user) {
console.log(`Processing user: ${user.name}`);
return user.id;
}
return null;
}
function validateInput(value) {
const result = value.match(/^\d{3}-\d{2}-\d{4}$/);
if (result) {
return result[0];
}
return false;
}
Pourquoi c'est important : Séparer l'affectation de la conditionnelle rend l'intention parfaitement claire. Les lecteurs voient immédiatement que utilisateur est extrait en premier, puis testé. Le résultat de la correspondance regex est capturé, puis évalué. Pas d'ambiguïté, pas de surcharge cognitive, et les fautes de frappe comme = vs === deviennent évidentes.
Conclusion
Séparer les affectations des conditions est une règle simple qui prévient toute une catégorie de bugs. La charge cognitive liée à l'analyse des opérations combinées l'emporte sur tout avantage perçu en termes de concision. Un code clair et explicite où l'affectation et l'évaluation sont des opérations distinctes améliore la lisibilité, réduit les bugs et rend la revue de code plus efficace.
.avif)
