La mayoría de los blogs, tutoriales o libros tienen métodos privados al final de cualquier clase / módulo. ¿Es esta la mejor práctica?
Me parece más conveniente tener métodos privados cuando sea necesario. Por ejemplo:
public
def my_method
# do something
minion_method
end
private
def minion_method
# do something
end
public
def next_method
end
De esta manera, encuentro el código más legible en lugar de desplazarme hacia arriba y hacia abajo continuamente, lo cual es muy irritante.
¿Hay algo terriblemente mal en este enfoque? ¿Tener métodos privados en la parte inferior no es solo una mejor práctica y algo más?
ruby
conventions
ZX12R
fuente
fuente
private def my_method...end
Respuestas:
La mejor práctica desde mi punto de vista es ir secuencialmente y declarar sus métodos sin mantener la privacidad en el punto de vista.
Al final, puede convertir cualquier método en privado simplemente agregando:
private :xmethod
Ejemplo:
¿Esto justifica tu pregunta?
fuente
También existe la opción de anteponer
private
a la definición del método desde Ruby 2.1.Si observa la definición, sabrá instantáneamente si un método es privado, sin importar en qué parte del archivo esté definido. Es un poco más de escritura (si no se autocompleta) y no todos sus
def
s estarán bien alineados.fuente
private
solo una vez, antes deymethod
, también funciona. No es necesario agregarlo varias veces.zmethod
sin élprivate
, este método no sería privado. Entonces, necesitas repetirlo (al menos con Ruby 2.3).Como otros ya han señalado, la convención es poner los métodos privados al final, bajo una clase privada. Sin embargo, probablemente también debería saber que muchos programadores usan un método de doble sangría (4 espacios en lugar de 2) para esto. La razón es que muchas veces no verá "privado" en su editor de texto y asumirá que podría ser público. Vea a continuación para ver una ilustración:
Este método debería evitar que tengas que desplazarte hacia arriba y hacia abajo y hará que otros programadores se sientan más cómodos con tu código.
fuente
begin..end
inmediatamente despuésprivate
. Luego, el editor puede establecer automáticamente la sangría, ya que el código dentro debegin
(en el ejemplo anterior) está sangrado semánticamente con 4 espacios.public
y luegoprivate
Creo que los métodos públicos son una especie de interfaz del objeto, y es lógico colocarlos en el lugar más destacado, es decir, en la parte superior del archivo.
fuente
No es necesario poner
public
o porprivate
encima de cada método. Por lo general, pongo todos mis métodos privados al final de mi clase. Además, no es necesario que lo diga explícitamentepublic
que los métodos son públicos de forma predeterminada. Por ejemplo:fuente
Vengo de Java Background y odio tener que desplazarme para ver el tipo de método. Creo que es una locura que no se pueda especificar la visibilidad del método por método sin fealdad. Así que terminé poniendo un comentario
#private
antes de cada método de succión y luego declarandoprivate :...
.fuente
private def method...
para tenerlo mejorNo me gusta tener que especificar público o privado para cada método. Poner todos los métodos privados en la parte inferior me permite tener una sola instancia de "privado" por archivo. Supongo que es cuestión de gustos.
fuente
Un estilo es a métodos de grupo juntos para que utilice sólo
private
yprotected
una vez por clase como máximo. Otro estilo es especificar la visibilidad justo después de la definición del método:A partir de Ruby 2.1.0
def
devuelve el nombre del método como símbolo, por lo que es posible un estilo más simplificado:(Tenga en cuenta que usamos
private_class_method
para métodos de clase; de lo contrario, obtendríamosNameError: undefined method
ya queprivate
espera un método de instancia. Incluso cuando se usa como una macro como en el ejemplo original, solo afecta la visibilidad de los métodos de instancia).Me gusta más este estilo de visibilidad en línea, ya que le permite organizar los métodos como desee. Disminuye el riesgo de agregar un nuevo método en el lugar equivocado y hacerlo privado inadvertidamente.
En cuanto a la sintaxis del método de clase, puede manejarlo de esta manera:
fuente
private_class_method
llamada antes, y la última parte sobre cómo usar elclass << self
bloque para evitar tener que usarlo es un buen consejo. Hasta ahora, no sabía que los métodos de clase "nornal" (declarados con endef self.foo; end
lugar declass << self; def foo; end
no se verían afectados por elprivate
especificador.Dennis tenía la respuesta perfecta, es decir, cuando usa ruby> = 2.1, simplemente prefija la definición con privado (o protegido, público)
Pero creo que ahora también es posible usar privado como un bloque como en:
fuente
Generalmente ordeno mis métodos de la siguiente manera:
private
, escrito solo una vezUtilizo funciones de "ir a la definición" en mi editor para que esto no implique mucho desplazamiento y, en cualquier caso, si la clase es lo suficientemente grande como para que el desplazamiento se vuelva problemático, probablemente debería dividirse en varias clases.
fuente
to_s
) cerca del final de la sección pública.