Me di cuenta de que un compañero de trabajo y yo tenemos prácticas opuestas con respecto al orden de los métodos en nuestras clases de Java. Uno de nosotros comienza una clase con sus principales métodos públicos, y luego pone a todos los ayudantes privados después. El otro de nosotros se asegura de que los métodos públicos estén al final.
Claramente, esto es solo una cuestión de estilo y no hay una respuesta correcta. Sin embargo, antes de decidir que este asunto es solo otra pelea entre Yooks y Zooks y simplemente elegir una u otra arbitrariamente, me preguntaba si quizás había una recomendación estándar de guía de estilo Java o alguna razón práctica por la cual un enfoque es mejor que el otro.
java
coding-style
Brandon Yarbrough
fuente
fuente
Respuestas:
Si bien se reduce a la preferencia normalmente, sin duda debe tratar de cumplir con un estándar común dentro de su organización. Entonces, sea lo que sea que decida, elija un estándar y adopte universalmente.
En cuanto a qué elegir, si siguiera las sugerencias que se ofrecen en Clean Code , podría leer el archivo de arriba a abajo como un artículo de periódico, lo que naturalmente sugeriría que los métodos auxiliares aparezcan después de los métodos que son ración. Esto llevaría a la máxima legibilidad de la estructura del código. Entonces si tuvieras que tener
Su archivo estaría estructurado como
Otro efecto secundario de esto es que descubres que tus ayudantes tienen sus propios ayudantes, y te ayuda a descubrir lo que realmente tienes es otra clase que vive dentro de tu archivo, y puedes refactorizar limpiamente para extraerlo a su propia clase ya que esos métodos son ya agrupados en orden. Pero eso es un beneficio secundario.
fuente
Los métodos públicos son la interfaz de la clase. Alguien interesado en usar su clase solo se preocupará por la interfaz. Desde la perspectiva de un usuario de clase, sería útil tener primero los métodos públicos para reducir el desplazamiento.
fuente
En C y C ++, los métodos auxiliares a menudo se colocan primero porque luego no necesita una declaración. Mucha gente llevó ese hábito a otros idiomas donde no importa.
Prefiero los métodos públicos en la parte superior porque generalmente cuando abro un archivo estoy buscando su interfaz pública. No quiero tener que pasar por todos los detalles de implementación. También es el estilo más popular que he visto, así que hay que decirlo para la convención.
fuente
Me gusta que el orden de los métodos en una clase se base en la legibilidad y el contexto, no en la visibilidad.
es decir, un método 'abierto' probablemente pertenece antes que un 'cierre'. Si dos métodos públicos 'a' y 'b' llaman a una 'c' privada, y son los únicos que la llaman, entonces me gusta que 'c' esté junto a ellos.
No creo que una convención de ordenar métodos basada en la visibilidad sea algo bueno.
fuente
Tiendo a preferir ver mis clases donde los miembros se enumeran en orden de importancia / visibilidad (aquí por importancia quiero decir que tienen un impacto directo en la interfaz pública).
Por lo tanto, las funciones privadas tienden a ser empujadas hacia abajo.
Hay excepciones a esto en las que también tenderé a agrupar funcionalidades similares, por lo que aún es posible encontrar pequeñas funciones privadas entremezcladas con lo público.
Esto es, como dijiste, una cuestión de gustos.
Sin embargo, cuando trabaje en código que no sea mío, intentaré seguir las convenciones que se utilicen en el proyecto.
Una buena manera que encontré para hacer un seguimiento de esto es (suponiendo que trabaje aquí con Eclipse) crear una configuración de formato de código y exportarla con la fuente del proyecto y comprometerla al control de la fuente. De esa manera, la última y mejor convención de código para el proyecto está a solo unos pocos clics de distancia para configurar y hacer un habito de CTRL-SHIFT-F antes de comprometer evitará muchos argumentos.
La ventaja adicional de usar formateadores automáticos es que puedes hacer cosas en cualquier convención que te haga feliz y simplemente formatear el código antes de confirmar. YMMV según dicha convención y herramienta de formateo.
fuente