Vous avez déjà regardé une fonction et vous êtes senti perdu dans sa complexité ? Explorons un principe fondamental du code propre : les fonctions ne doivent maintenir qu'un seul niveau d'abstraction.
Voici un exemple concret de création d'utilisateurs dans une application Web :
// ❌ A function doing too many things at different abstraction levels function createUser(userData) { // Validate data if (!userData.email || !userData.email.includes('@')) { return 'Invalid email'; } if (userData.password.lengthCette fonction mélange différents niveaux d'abstraction :
Refactorisons-le en suivant le principe du niveau unique d'abstraction :
// ✅ Clean version with one level of abstraction function createUser(userData) { const validationError = validateUserData(userData); if (validationError) return validationError; const securePassword = hashPassword(userData.password); const formattedUser = formatUserData(userData.email, securePassword); return saveUserToDatabase(formattedUser); } function validateUserData({ email, password }) { if (!email || !email.includes('@')) return 'Invalid email'; if (password.lengthAvantages de cette approche
- Lisibilité : la fonction principale se lit comme une histoire, décrivant ce qui se passe à un niveau élevé
- Maintenabilité : chaque fonction a une responsabilité unique, ce qui rend les changements plus sûrs
- Testabilité : vous pouvez tester chaque élément de logique indépendamment
- Réutilisabilité : ces fonctions ciblées peuvent être réutilisées dans d'autres contextes
Points clés à retenir
Lors de l'écriture de fonctions :
Rappelez-vous : Si vous mélangez « comment » et « quoi » dans la même fonction, vous avez probablement affaire à plusieurs niveaux d'abstraction. Séparez-les !
Clause de non-responsabilité: Toutes les ressources fournies proviennent en partie d'Internet. En cas de violation de vos droits d'auteur ou d'autres droits et intérêts, veuillez expliquer les raisons détaillées et fournir une preuve du droit d'auteur ou des droits et intérêts, puis l'envoyer à l'adresse e-mail : [email protected]. Nous nous en occuperons pour vous dans les plus brefs délais.
Copyright© 2022 湘ICP备2022001581号-3