Je me demandais, quand devrions-nous réellement utiliser Parfois, je ne peux pas ne pas être dérangé de grouper mes méthodes dans merci. p> privé code> ou protégé code> pour certaines méthodes dans le modèle? P>
privé code> ni protégé code>. Je viens de le laisser tel quel. Mais je sais que cela doit être une mauvaise pratique, sinon ces 2 groupements ne seront pas créés dans la programmation. P>
3 Réponses :
Je ne sais pas Ruby comme cas particulier, mais je suppose que la réponse serait aussi la même que pour d'autres langues aussi, c'est pourquoi c'est ici: P>
Une méthode privée ne peut être consultée que par des membres de la même classe, tandis qu'une protection est également disponible pour un membre des classes qui étendent la classe de base où la méthode est déclarée. P>
Yupp, c'est une question de programmation générale. J'ai lu ce que privé code> et protégé code> fait, mais quand ne devez-nous pas l'ignorer?
Voulez-vous dire le cas, où une méthode n'est pas déclarée publique, privée ou protégée du tout?
@Victor Vous n'ignorez pas l'encapsulation «ignorer», mais de manière générale, gardez des choses privées code> sauf indication contraire à eux d'être protégé code> ou public code >
@fkerber privé code> Les membres ne sont visibles que sur la classe, Les membres protégés > sont visibles pour les enfants de cette classe et Les membres du public code> sont visibles à toutes les classes. Si ce sont des membres de l'instance, ils sont, et peut-être plus pertinemment, encapsulés dans l'instance de cette classe (c'est-à-dire un objet)
@Tom privé code> Les membres sont disponibles pour les sous-classes ainsi que dans Ruby.
record.method () code>, puis "public" li>
- S'il sera utilisé uniquement en interne,
self.method () code>, puis "privé" li>
- Si vous envisagez de l'utiliser en interne, mais aussi dans les descendants,
self.method () # dans la sous-classe code>, puis "protégé" li>
ul> Cela me semble un peu ... votre 3ème point b>. Une sous-classe peut accéder aux méthodes code> privées code> de sa superclasse en interne. Une méthode code> code> est la possibilité de transmettre un objet de la même classe et d'exécuter des méthodes protégées sur cet objet.
weblog.jamisbuck.org/2007/2/23/Method- Les méthodes protégées de visibilité-in-ruby "peuvent être appelées à tout moment le récepteur est de la même classe que" Self '"
Je vais donner mon avis Et c'est pourquoi j'aime bien, c'est votre responsabilité. Mon sentiment est que pour marquer quelque chose comme protégé ou privé, vous faites deux choses: p>
Et en outre, vous rendant plus difficile à tester, car il peut s'agir d'une réelle douleur à tester des méthodes privées (voir Quelle est la meilleure façon de tester les méthodes protégées et privées d'unités à Ruby? pour les façons d'elle) p>
Pour ces deux dernières raisons, je ne m'embête pas avec eux. Si vous vouliez vraiment une sorte de barrière entre vos classes / méthodes et les consommateurs (qu'elles soient du code ou des développeurs), il existe des moyens autres, plus efficaces (proxy, obscurpation, cryptage, méthodes protégées par mot de passe, etc.). Sinon, pourquoi ne pas leur donner accès aux mêmes outils que vous avez utilisés? P>
+1 J'ai des pensées similaires. La seule raison pour laquelle I B> l'utiliser: RDOC a l'option - visibilité code>. Avec public, protégé et privé, je peux générer différentes versions de documentation avec plus ou moins de détails.
@knut C'est une idée intéressante, je vais devoir garder cela à l'esprit. J'ai tendance à utiliser yardoc et il a la balise @private code>, mais je n'ai jamais vu quelle utilisation il pourrait être. Merci.