Lors de l'écriture d'une API ou d'un objet réutilisable, y a-t-il une raison technique pour laquelle tous les appels de méthode qui renvoient 'void' ne devraient pas simplement retourner 'this' (* ceci en C++)?Pourquoi une API doit-elle renvoyer "void"?
Par exemple, en utilisant la classe de chaîne, nous pouvons faire ce genre de chose:
string input= ...;
string.Join(input.TrimStart().TrimEnd().Split("|"), "-");
mais nous ne pouvons pas le faire:
string.Join(input.TrimStart().TrimEnd().Split("|").Reverse(), "-");
..car Array.Reverse() retourne nul.
Il y a beaucoup d'autres exemples où une API a beaucoup d'opérations de vide-retour, de sorte que le code finit par ressembler à:
api.Method1();
api.Method2();
api.Method3();
..mais il serait parfaitement possible d'écrire:
api.Method1().Method2().Method3()
..si le concepteur de l'API l'avait autorisé.
Y a-t-il une raison technique pour suivre cette voie? Ou est-ce juste une chose de style, pour indiquer la mutabilité/nouvel objet?
(x-ref Stylistic question concerning returning void)
ÉPILOGUE
J'ai accepté la réponse de Luvieere que je pense que cela représente le mieux l'intention/conception, mais il semble qu'il ya populaires exemples de l'API sur là qui dévient de ceci:
En C++ cout << setprecision(..) << number << setwidth(..) << othernumber;
semble modifier l'objet cout afin de modifier la donnée suivante insérée.
Dans .NET, Stack.Pop()
et Queue.Dequeue()
, les deux retournent un élément, mais modifient également la collection.
Propose à ChrisW et à d'autres pour obtenir des détails sur les coûts de performance réels.
Le motif que vous décrivez est également connu sous le nom * method chaining * (http://martinfowler.com/dslwip/MethodChaining.html). –
Méthode de chaînage, ou interfaces fluides (bien que les puristes prétendent que quelque chose de plus est nécessaire pour ce dernier, je crois!). –
Ahhh - ça a un nom! Il semble tout à fait lisible, et populaire dans des choses comme JQuery – JBRWilkinson