En plus: J'ai écrit ceci en réponse à la question de dallin (maintenant fermée) mais je pense toujours que cela pourrait être utile à quelqu'un alors voilà
Je pense que la raison des fonctions d'atomisation est double, et comme @jozefg le mentionne dépend du langage utilisé.
Séparation des préoccupations
La raison principale pour cela est de garder différents morceaux de code séparés, donc tout bloc de code qui ne contribue pas directement au résultat / intention souhaité de la fonction est une préoccupation distincte et pourrait être extrait.
Supposons que vous ayez une tâche d'arrière-plan qui met également à jour une barre de progression, la mise à jour de la barre de progression n'est pas directement liée à la tâche de longue durée et doit donc être extraite, même si c'est le seul morceau de code qui utilise la barre de progression.
Dites en JavaScript que vous avez une fonction getMyData (), qui 1) construit un message de savon à partir de paramètres, 2) initialise une référence de service, 3) appelle le service avec le message de savon, 4) analyse le résultat, 5) renvoie le résultat. Cela semble raisonnable, j'ai écrit cette fonction exacte plusieurs fois - mais cela pourrait vraiment être divisé en 3 fonctions privées, y compris le code pour 3 et 5 (si cela), car aucun des autres codes n'est directement responsable de l'obtention des données du service .
Expérience de débogage améliorée
Si vous avez des fonctions complètement atomiques, votre trace de pile devient une liste de tâches, répertoriant tout le code exécuté avec succès, c'est-à-dire:
- Obtenir mes données
- Créer un message de savon
- Initialiser la référence du service
- Réponse du service analysé - ERREUR
serait beaucoup plus intéressant que de découvrir qu'il y avait une erreur lors de l'obtention des données. Mais certains outils sont encore plus utiles pour déboguer des arborescences d'appels détaillées que cela, par exemple, Microsofts Debugger Canvas .
Je comprends également vos préoccupations selon lesquelles il peut être difficile de suivre le code écrit de cette façon, car à la fin de la journée, vous devez choisir un ordre de fonctions dans un seul fichier alors que votre arborescence d'appels serait plus complexe que celle . Mais si les fonctions sont bien nommées (intellisense me permet d'utiliser 3-4 mots de casse camal dans n'importe quelle fonction que je veux sans me ralentir) et structurées avec une interface publique en haut du fichier, votre code se lira comme un pseudo-code qui est de loin le moyen le plus simple d'obtenir une compréhension de haut niveau d'une base de code.
Pour info - c'est une de ces choses "fais ce que je dis pas comme je fais", garder le code atomique est inutile à moins que vous ne soyez impitoyablement cohérent avec lui à mon humble avis, ce que je ne suis pas.