2 votes

méthodes : paramètres multiples ou structure ?

J'ai remarqué en regardant des exemples de code d'Apple, qu'ils ont tendance à concevoir des méthodes qui reçoivent des structures au lieu de paramètres multiples. Comment cela se fait-il ? Pour ce qui est de la facilité d'utilisation, je préfère personnellement la seconde méthode, mais pour ce qui est des performances, y a-t-il un meilleur choix que l'autre ?

[pencil drawPoint:Point3Make(20,40,60)]
[pencil drawPointAtX:20 Y:50 Z:60]

5voto

shek Points 6107

Ne confondez pas cette question avec des préoccupations liées aux performances. Ne faites pas d'optimisations prématurées (jusqu'à ce que vous sachiez que vous avez un problème) et lorsque vous pensez aux points chauds de votre code en matière de performances, c'est presque toujours dans les zones traitant des E/S (par exemple, la base de données, les fichiers). Donc, séparez votre question sur le style de passage des messages avec les performances. Vous voulez prendre d'abord la meilleure décision en matière de conception puis optimiser les performances seulement si nécessaire .

Cela dit, Apple ne recommande ni ne préfère le passage de plusieurs paramètres par rapport à une structure/un objet. Pour généraliser ce point en dehors du cadre de l'Objective-C, utilisez des paramètres ou des objets individuels lorsque cela a un sens dans un scénario particulier. En d'autres termes, il n'y a pas de réponse noire et blanche à suivre. Utilisez plutôt les lignes directrices suivantes pour prendre votre décision :

  • Transmettre des objets/structures lorsqu'il est logique que la méthode comprenne plusieurs/toutes les composantes de l'objet.
  • Passez des objets/structures lorsque vous souhaitez valider certaines règles sur la relation entre les différents membres de l'objet. Cela vous permet de vous assurer que le consommateur de votre méthode construit un objet valide avant d'appeler votre méthode (éliminant ainsi le besoin de la méthode de valider ces conditions).
  • Transmettre des arguments individuels lorsqu'il est clair que la méthode a du sens et qu'elle n'a besoin que de certains éléments plutôt que de l'objet entier.

En utilisant une variation de votre exemple, une méthode de peinture qui prend deux coordonnées (X et Y) aurait avantage à prendre un objet Point plutôt que deux variables, X et Y.

Une méthode retrieveOrderByIdAndName serait mieux conçue en prenant le paramètre unique id et name plutôt qu'un objet conteneur.

S'il existait une méthode permettant de récupérer les commandes en fonction de nombreux critères différents, il serait plus judicieux de créer un retrieveOrderByCriteria et de lui transmettre une structure de critères.

1voto

grepsedawk Points 3413

Si vous transmettez le même ensemble de paramètres, il est utile de les transmettre dans une structure car ils sont sémantiquement liés.

L'impact sur les performances est probablement négligeable pour une structure aussi simple que 3 points. Utilisez la solution lisible/réutilisable et profilez ensuite votre code si vous pensez qu'il est lent :)

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X