La plupart des blogs, des tutoriels ou des livres ont des méthodes privées au bas de tout cours/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 ce qui est très irritant.
Y at-il quelque chose de terriblement faux dans cette approche? Avoir des méthodes privées à la base n'est-il pas simplement une pratique exemplaire et autre chose?
La meilleure pratique à mes yeux est d'aller séquentiellement et de déclarer vos méthodes sans rester privé.
A la fin, vous pouvez rendre n'importe quelle méthode privée en ajoutant simplement: private :xmethod
Exemple:
class Example
def xmethod
end
def ymethod
end
def zmethod
end
private :xmethod, :zmethod
end
Cela justifie-t-il votre question?
Il y a aussi l'option pour ajouter private
à la définition de la méthode depuis Ruby 2.1.
class Example
def xmethod
end
private def ymethod
end
private def zmethod
end
end
En regardant la définition, vous savez instantanément si une méthode est privée, peu importe où elle est définie dans le fichier. C'est un peu plus de frappe (si vous ne complétez pas automatiquement) et tous vos def
s ne seront pas bien alignés.
Comme d'autres l'ont déjà souligné, la convention est de placer les méthodes privées au bas de la classe, sous un même cours privé. Cependant, vous devriez probablement savoir aussi que beaucoup de programmeurs utilisent une méthode à double retrait (4 espaces au lieu de 2) pour cela. La raison en est que bien souvent, vous ne verrez pas "privé" dans votre éditeur de texte et supposerez qu'ils pourraient être publics. Voir ci-dessous pour une illustration:
class FooBar
def some_public_method
end
def another_public_method
end
private
def some_private_method
end
def another_private method
end
end
Cette méthode devrait vous éviter d'avoir à faire défiler de haut en bas et rendra les autres programmeurs plus à l'aise dans votre code.
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 visible, c’est-à-dire en haut du fichier.
Vous n'avez pas besoin de mettre public
ou private
au-dessus de chaque méthode. Je mets généralement toutes mes méthodes privées au bas de ma classe. De plus, n’avez pas à dire explicitement public
car les méthodes sont publiques par défaut. Par exemple:
class FooBar
def some_public_method
end
def another_public_method
end
private
def some_private_method
end
def another_private method
end
end
Je viens de l'arrière-plan Java et je déteste devoir faire défiler pour voir le type de méthode. Je pense qu'il est insensé de ne pas pouvoir spécifier la visibilité de méthode par méthode sans laideur. J'ai donc fini par mettre un commentaire. #private
avant chaque méthode suck puis en déclarant private :...
.
C'est une question de goût, je suppose, mais je préférerais explicitement nommer chaque méthode privée sur la ligne après cette méthode, comme suit:
class Example
def cthulhu
end
def rlyeh
end
def foo
end
private :foo
def bar
end
private :bar
def baz
end
private :baz
end
Je n'aime pas avoir à spécifier public ou privé pour chaque méthode. Placer 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.
Un style consiste à regrouper les méthodes afin que vous n'utilisiez que private
et protected
au maximum une fois par classe. Un autre style consiste à spécifier la visibilité juste après la définition de la méthode:
class Example
def my_private_method
end
private :my_private_method
def my_public_method
end
end
A partir de Ruby 2.1.0 def
renvoie le nom de la méthode sous forme de symbole, un style plus simple est donc possible:
class Example
private def my_private_method
end
def my_public_method
end
protected def my_protected_method
end
private_class_method def self.my_private_class_method
end
end
(Notez que nous utilisons private_class_method
pour les méthodes de classe - sinon, nous aurions NameError: undefined method
depuis private
attend une méthode d’instance. Même si vous l'utilisez comme une macro, comme dans l'exemple d'origine, cela affecte uniquement 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 à votre guise. 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:
class Example
private def my_private_method
end
class << self
private def my_private_class_method
end
end
end
Dennis avait la réponse parfaite, c’est-à-dire que, lorsque vous utilisez Ruby> = 2.1, préfixez simplement def avec private (ou protected, public)).
Mais je crois qu’il est maintenant aussi possible d’utiliser un bloc privé comme dans:
private begin
def foo
end
def bar
end
end
def Zip
end
J'ordonne généralement mes méthodes comme suit:
private
, écrit une seule foisJ'utilise les fonctionnalités "Aller à la définition" de mon éditeur pour que cela ne nécessite pas beaucoup de défilement, et dans tous les cas, si la classe est suffisamment grande pour que le défilement devienne problématique, il devrait probablement être divisé en plusieurs classes.