Où placer les méthodes privées dans Ruby?

La plupart des blogs ou des tutoriels ou des livres ont des méthodes privées au bas de chaque classe / module. Est-ce la meilleure pratique?

Je trouve qu’il est plus pratique d’avoir des méthodes privées en tant que de 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 défiler continuellement, 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 au fond n’est-il pas simplement une pratique exemplaire?

La meilleure pratique de mon sharepoint vue est de procéder séquentiellement et de déclarer vos méthodes sans garder de sharepoint vue privé.

A la fin, vous pouvez rendre privée toute méthode en ajoutant simplement: private :xmethod

Exemple:

 class Example def xmethod end def ymethod end def zmethod end private :xmethod, :zmethod end 

Est-ce que cela justifie votre question?

Comme d’autres l’ont déjà souligné, la convention consiste à placer les méthodes privées en bas, dans une classe privée. Cependant, vous devez probablement savoir que beaucoup de programmeurs utilisent une méthode à double retrait (4 espaces au lieu de 2). La raison en est que souvent, vous ne verrez pas “privé” dans votre éditeur de texte et que vous penserez qu’ils peuvent ê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 vers le haut et vers le bas et rendra les autres programmeurs plus à l’aise dans votre code.

Il y a aussi la possibilité d’append le 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 typé (si vous ne complétez pas automatiquement) et tous vos def ne seront pas bien alignés.

Je pense que les méthodes publiques sont une sorte d’interface de l’object, 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, vous 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 que c’est fou de ne pas pouvoir spécifier la visibilité de la méthode par méthode sans laideur. J’ai donc fini par mettre un commentaire #private avant chaque méthode d’ #private et ensuite déclarer private :...

Je 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.

Un style consiste à regrouper les méthodes afin que vous n’utilisiez que private et protected une fois par classe au maximum. 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 

Comme Ruby 2.1.0 def renvoie le nom de la méthode en tant que symbole, un style plus rationalisé est 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 obtiendrions NameError: undefined method car private attend une méthode d’instance. Même en l’utilisant comme une macro comme dans l’exemple original, cela n’affecte que la visibilité des méthodes d’instance.)

J’aime ce style de visibilité en ligne qui vous permet d’organiser les méthodes comme vous le souhaitez. Cela diminue le risque d’append 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 manière à la place:

 class Example private def my_private_method end class < < self private def my_private_class_method end end end 

Je suppose que c’est une question de goût, mais je préfère nommer explicitement chaque méthode 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 

Dennis a eu la réponse parfaite, c’est-à-dire que lorsque vous utilisez ruby> = 2.1, préfixez le def avec private (ou protected, public)

Mais je crois qu’il est maintenant aussi possible d’utiliser private comme un bloc comme dans:

 private begin def foo end def bar end end def zip end