La plupart des blogs ou tutoriels ou livres ont des méthodes privées au bas de n'importe quelle classe / module. Est-ce la meilleure pratique?
Je trouve plus pratique d'avoir des méthodes privées au besoin. Par exemple:
public
def my_method
# do something
minion_method
end
private
def minion_method
# do something
end
public
def next_method
end
De cette façon, je trouve le code plus lisible au lieu de faire défiler de haut en bas en continu, ce qui est très irritant.
Y a-t-il quelque chose qui ne va pas dans cette approche? Avoir des méthodes privées à la base n'est-il pas seulement une meilleure pratique et autre chose?
ruby
conventions
ZX12R
la source
la source
private def my_method...end
Réponses:
La meilleure pratique à mon avis est d'aller de manière séquentielle et de déclarer vos méthodes sans garder un point de vue privé.
À la fin, vous pouvez rendre toute méthode privée en ajoutant simplement:
private :xmethod
Exemple:
Cela justifie-t-il votre question?
la source
Il existe également la possibilité d'ajouter un préfixe
private
à la définition de méthode depuis Ruby 2.1.En regardant la définition, vous savez instantanément si une méthode est privée, peu importe où dans le fichier elle est définie. C'est un peu plus de frappe (si vous ne la complétez pas automatiquement) et tous vos
def
s ne seront pas bien alignés.la source
private
une seule fois, avant leymethod
, fonctionne également. Il n'est pas nécessaire de l'ajouter plusieurs fois.zmethod
sansprivate
, cette méthode ne serait pas privée. Donc, vous devez le répéter (au moins avec Ruby 2.3).Comme d'autres l'ont déjà souligné, la convention consiste à placer les méthodes privées en bas, sous une classe privée. Cependant, vous devriez probablement aussi savoir que de nombreux programmeurs utilisent une méthode à double retrait (4 espaces au lieu de 2) pour cela. La raison en est que souvent, vous ne verrez pas «privé» dans votre éditeur de texte et supposez qu'ils pourraient être publics. Voir ci-dessous pour une illustration:
Cette méthode devrait vous éviter d'avoir à faire défiler vers le haut et le bas et rendra les autres programmeurs plus à l'aise dans votre code.
la source
begin..end
juste aprèsprivate
. Ensuite, l'indentation peut être définie automatiquement par l'éditeur puisque le code à l'intérieur dubegin
est (dans l'exemple ci-dessus) sémantiquement indenté avec 4 espaces.public
et ensuiteprivate
Je pense que les méthodes publiques sont une sorte d'interface de l'objet, et il est logique de les placer à l'endroit le plus proéminent, c'est-à-dire en haut du fichier.
la source
Vous n'avez pas besoin de mettre
public
ouprivate
au - dessus de chaque méthode. Je mets généralement toutes mes méthodes privées au bas de ma classe. De plus, il n'est pas nécessaire de le dire explicitementpublic
car les méthodes sont publiques par défaut. Par exemple:la source
Je viens de fond java et je déteste avoir à faire défiler pour voir le type de méthode. Je pense que c'est insensé qu'on ne puisse pas spécifier la visibilité des méthodes par méthode sans laideur. J'ai donc fini par mettre un commentaire
#private
avant chaque méthode suck et ensuite déclarerprivate :...
.la source
private def method...
pour l'avoir plus gentilJe n'aime pas avoir à spécifier public ou privé pour chaque méthode. Mettre toutes les méthodes privées en bas me permet d'avoir une seule instance de "privé" par fichier. Je suppose que c'est une question de goût.
la source
Un style est aux méthodes de regrouper de sorte que vous utilisez uniquement
private
etprotected
une fois par classe au maximum. Un autre style consiste à spécifier la visibilité juste après la définition de la méthode:Depuis Ruby 2.1.0
def
renvoie le nom de la méthode sous forme de symbole, donc un style plus simplifié est possible:(Notez que nous utilisons
private_class_method
pour les méthodes de classe - sinon nous obtiendrionsNameError: undefined method
depuisprivate
attend une méthode d'instance. Même si vous l'utilisez comme macro comme dans l'exemple d'origine, cela n'affecte que la visibilité des méthodes d'instance.)J'aime mieux ce style de visibilité en ligne, car il vous permet d'organiser les méthodes comme vous le souhaitez. Cela réduit le risque d'ajouter une nouvelle méthode au mauvais endroit et de la rendre privée par inadvertance.
En ce qui concerne la syntaxe de la méthode de classe, vous pouvez la gérer de cette façon à la place:
la source
private_class_method
appel auparavant, et la dernière partie sur l'utilisation duclass << self
bloc pour éviter d'avoir à l'utiliser est un bon conseil. Jusqu'à présent, je ne savais pas que les méthodes de classe "nornal" (déclarées avecdef self.foo; end
au lieu declass << self; def foo; end
ne seraient pas affectées par leprivate
spécificateur.Dennis avait la réponse parfaite, c'est-à-dire que lorsque vous utilisez ruby> = 2.1, préfixez simplement la définition avec private (ou protected, public)
Mais je pense qu'il est désormais également possible d'utiliser private comme bloc comme dans:
la source
Je commande généralement mes méthodes comme suit:
private
, écrit une seule foisJ'utilise les fonctionnalités «aller à la définition» dans mon éditeur pour que cela n'implique pas beaucoup de défilement, et dans tous les cas, si la classe est suffisamment grande pour que le défilement devienne problématique, elle devrait probablement être divisée en plusieurs classes.
la source
to_s
) à la fin de la section publique.