Aikido

Pourquoi rendre l'objectif d'une fonction explicite pour un code plus clair

Lisibilité

Règle
Faire une fonction évident évident.
Fonction des doivent clairement communiquer ce que fonction fonction
fait sans besoin aux lecteurs d' examiner la mise en œuvre.

Langues prises en charge : 45+

Introduction

Les noms de fonctions qui ne révèlent pas leur objectif forcent les développeurs à lire l'intégralité de l'implémentation pour comprendre le comportement. Une fonction nommée process() ou handle() pourrait faire n'importe quoi, exigeant un effort mental pour en déduire le but réel. Des noms clairs et descriptifs comme validateUserEmail() ou calculateOrderTotal() communiquer l'intention immédiatement, rendant le code auto-documenté.

Pourquoi c'est important

Maintenabilité du code : Les noms de fonctions peu clairs ralentissent la compréhension. Les développeurs perdent du temps à lire les implémentations pour comprendre ce que font les fonctions au lieu de se concentrer sur la logique métier. Cela s'aggrave lors du retour au code des mois plus tard ou lorsque de nouveaux membres rejoignent l'équipe.

Utilisation incorrecte : Les noms de fonctions ambigus augmentent le risque de mauvaise utilisation. Une fonction nommée update() pourrait valider, transformer, persister ou notifier, ce qui conduit les développeurs à l'utiliser de manière incorrecte car le nom ne spécifie pas le comportement. Des noms clairs préviennent les erreurs d'utilisation en documentant les contraintes et les effets secondaires.

Exemples de code

❌ Non conforme :

function process(data) {
    const result = data.map(item => ({
        ...item,
        processed: true,
        timestamp: Date.now()
    }));
    db.save(result);
    notifyService.send(result);
    return result;
}

Pourquoi c'est incorrect : Le nom process() ne révèle rien sur ce qui arrive aux données. Les lecteurs doivent examiner l'implémentation pour savoir qu'elle transforme des éléments, les enregistre dans la base de données et envoie des notifications. Les effets secondaires et les responsabilités de la fonction sont masqués.

✅ Conforme :

function markItemsAsProcessedAndSave(data) {
    const processedItems = data.map(item => ({
        ...item,
        processed: true,
        timestamp: Date.now()
    }));
    db.save(processedItems);
    notifyService.send(processedItems);
    return processedItems;
}

Pourquoi c'est important : Le nom indique explicitement que la fonction marque les éléments comme traités et les enregistre. Les lecteurs comprennent immédiatement le but principal de la fonction sans lire l'implémentation. Le nom suggère des effets secondaires (enregistrement en base de données), établissant des attentes appropriées.

Conclusion

Les noms de fonctions devraient répondre à la question « que fait cette fonction ? » sans nécessiter d'inspection du code. Ils devraient inclure des verbes décrivant les actions et des noms décrivant les cibles. Si un nom devient trop long, la fonction en fait probablement trop et devrait être scindée.

FAQ

Des questions ?

Quelle peut être la longueur des noms de fonctions ?

Aussi longtemps que nécessaire pour être clair. calculateTotalPriceWithTaxAndShipping() est préférable à calc(). Les IDE modernes disposent de l'autocomplétion, ce qui facilite la saisie de noms plus longs. Privilégiez la clarté à la concision. Si un nom dépasse 5-6 mots, la fonction pourrait avoir trop de responsabilités.

Les noms de fonctions doivent-ils inclure des détails d'implémentation ?

Non, décrivez le comportement et l'intention, pas l'implémentation. Nommez les fonctions par ce qu'elles accomplissent, pas par la manière. sortUsersByName() est mieux que quickSortUsers(). Les détails d'implémentation peuvent changer, mais l'objectif reste stable. Cela maintient la pertinence des noms pendant le refactoring.

Qu'en est-il des fonctions d'aide ou des fonctions utilitaires ?

Elles ont toujours besoin de noms clairs. Au lieu de helper() ou util(), utilisez des noms spécifiques comme formatCurrency() ou validateEmail(). Si vous ne trouvez pas de nom spécifique, le but de la fonction pourrait être flou et nécessiter une meilleure définition.

Comment nommer les fonctions qui font plusieurs choses ?

Divisez-les. Les fonctions qui nécessitent des noms comme validateAndTransformAndSave() violent le principe de responsabilité unique. Créez des fonctions distinctes : validate(), transform(), save(). Si les opérations doivent se produire ensemble, utilisez une fonction d'orchestration avec un nom décrivant le flux de travail : processUserRegistration().

Sécurisez-vous maintenant.

Sécuriser votre code, votre cloud et votre runtime dans un système centralisé unique.
Détectez et corrigez les vulnérabilités rapidement et automatiquement.

Pas de carte de crédit requise | Résultats du scan en 32 secondes.