Faire deux fonctions avec un nom différent qui seraient identiques serait en effet étrange et pourrait prêter à confusion. Mais même ça, ça existe (typiquement quand tu as une grosse librairie qui décide de changer de nom pour certaines fonctions : pendant quelques versions, ils gardent la fonction avec l'ancien nom en plus du nouveau nom, de manière à ce que les vieux programmes continuent à fonctionner (souvent ils ajoutent un avertissement que l'ancienne fonction n'existera plus dans les nouvelles fonctions)).
Une seconde possibilité, est que deux fonctions donnent le même résultat, mais en y aboutissant de manière différente, avec une méthode plus efficace que l'autre selon les cas (par exemple, il existe des dizaines d'algorithmes différents de tri, avec chacun leurs avantages et inconvéniants : l'un sera très rapide en moyenne mais lent dans quelques cas particuliers, un autre sera un peu plus lent en moyenne, mais plus rapide si on compare les pires des cas, un troisième utilisera moins de mémoire, un quatrième sera très efficace si les données sont déjà presque triées, un cinquième sera efficace si on connait à l'avance les valeurs possibles et qu'il y en a peu, ...)
Le dernier cas que je vois, qui est le tien, c'est que plusieurs fonctions différentes permettent d'aboutir à un même résultat, mais qu'il est possible d'utiliser l'une (ou les deux) fonctions également d'une manière différente.
runToNewPosition est en soit "inutile", vu qu'on peut la remplacer par moveTo suivit de runToPosition. Sauf que c'est plus rapide/clair/concis d'utiliser une seule fonction plutôt que les deux succéssivement : on a donc créé une fonction en guise de "raccourci".
Avoir les fonctions moveTo et runToPosition séparés, peut être utile dans certains cas :
- on peut utiliser moveTo suivit de runSpeedToPosition au lieu de runToPosition
- on peut utiliser moveTo, puis faire autre chose, puis exécuter runToPosition plus tard (par exemple tu pourrais fixer la destination depuis une fonction, puis lancer le déplacement quand tu appuis sur un bouton)
- on peut utiliser moveTo suivit de run (dans une boucle). On peut aussi imaginer une combinaison : on utilise moveTo, puis run dans une boucle avec une certaine condition, puis on finit le déplacement avec runToPosition. Par exemple si ton servomoteur sert à faire tourner le treuil qui catapulte un planeur d'aéromodélisme : au début, dans ta boucle, tu vérifie qu'on n'appuie pas sur un bouton "stop", puis quand le planeur à commencer à découler, tu vas jusqu'au bout peu importe le bouton (si le planeur vient de décoller mais n'est pas encore assez haut, il est impossible de lui faire faire un demi-tour pour ré-atérir, du coup il est sur de s'écraser)
- tu peux utiliser moveTo, puis la fonction distanceToGo pour savoir la distance à parcourir, et seulement ensuite décider si tu veux bouger ou pas
- ...
Bref, il y a plein de cas où avoir les deux fonctions séparées peut être utile, même si dans ton cas (et dans celui d'un bon nombre de personnes), avoir une fonction qui fait les deux en même temps est plus pratique.