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 dans les instructions conditionnelles sont une source fréquente de bogues qui échappent souvent aux compilateurs et aux liseurs. L'erreur classique consiste à 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 conditionnelles 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 mentalement déterminer quelle opération est prioritaire et quelle valeur est réellement testée.
Pourquoi c'est important
Pourquoi c'est important
Introduction de bogues : Une faute de frappe qui modifie === à = ne provoque pas d'erreur de syntaxe, mais modifie silencieusement le comportement. La condition évalue la valeur attribuée (vrai/faux), et non le résultat de la comparaison.
Lisibilité du code : Les lecteurs attendent des conditionnels qu'ils testent les valeurs et non qu'ils les modifient. Lorsque les deux se produisent simultanément, les responsables doivent savoir 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 faux : Les affectations à l'intérieur des conditionnelles ne permettent pas de savoir s'il s'agit d'une intention ou d'une erreur de frappe. Le premier exemple pourrait être un bogue où === était prévu, et le second mélange la correspondance regex avec l'assignation, ce qui rend 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 cela est-il important ? En séparant l'affectation du conditionnel, l'intention est parfaitement claire. Le lecteur voit immédiatement que utilisateur est d'abord extraite, puis testée. Le résultat de la correspondance des expressions rationnelles est capturé, puis évalué. Il n'y a pas d'ambiguïté, pas de surcharge cognitive, et les fautes de frappe comme les = vs === deviennent évidentes.
Conclusion
Séparer les affectations des conditionnelles est une règle simple qui permet d'éviter toute une série de bogues. Le surcoût cognitif lié à l'analyse des opérations combinées l'emporte sur tout avantage perçu en termes de brièveté. Un code clair et explicite dans lequel l'affectation et l'évaluation sont des opérations distinctes améliore la lisibilité, réduit les bogues et rend la révision du code plus efficace.
.avif)
