2012-01-30 20 views
5

Observando el código fuente de varias aplicaciones de Android (no escrito por mí), noté un patrón de colocar ciertas partes de código en sus propios métodos, aunque realmente no hay ninguna reutilización de código, porque esos métodos solo se llaman una vez a lo largo toda la aplicación.trozo de código que se llama solo una vez: ¿merece un método propio?

Hasta ahora tenía una regla de oro que dicta que si una parte del código se usa dos o más veces en el código de la aplicación, entonces merece su propio método, simplemente por el motivo de eliminar la redundancia del código.

Pero al ver esos trozos de código pulcramente divididos en métodos propios (y el propio método de llamada de sobrecarga), estoy comenzando a pensar que tal vez me falta algo.

Aparte de los fines de la documentación, ¿qué otras razones pueden justificar poner solo 4 líneas de código (que se llaman una sola vez) en su propio método?

+1

Legibilidad? Código de auto-documentación? La "sobrecarga de llamada de método" puede ignorarse bastante en Java ya que no es un gran problema. – Marcelo

Respuesta

5

Hay algunas razones que se me ocurren, aunque es cierto que hay algunas coincidencias:

  • Ayuda a hacer que su código de auto-documentado.
  • Hace las pruebas (unitarias) más fáciles.
  • Te ayuda a evitar que termines con métodos que tienen cientos de líneas de longitud.
  • Es posible que desee utilizar ese código en otro lugar en el futuro.

Por supuesto, todo esto se basa en la suposición de que esas 4 líneas de código están relacionadas y realizan una sola función. Encuentro que una buena regla general es: si no se le ocurre un nombre, probablemente no sea un método.

+4

+1 para la regla de oro. Voy a destacarlo: 'si no puedes pensar en un nombre para él, probablemente no sea un método. – an00b

2

Consulte las justificaciones dadas para la refactorización Compose Method.

4

la documentación y la legibilidad son muy buenas razones para poner el código en los métodos, incluso si esos métodos solo se ejecutarán una vez. Algunas aplicaciones pueden tener una serie de pasos lógicos para completar al iniciar ... ¿preferiría tener todo ese código mezclado en un método de inicio, o un método de inicio que llame a métodos que están apropiadamente nombrados?

8

Tres razones para empezar:

  • Puede probarlo en la separación de cualquier otra cosa. (Esto puede ir en contra del mantra de solo probar API públicas, pero eso está bien para mí. Es molesto si tengo que hacer un método a nivel de paquete en lugar de privado para probarlo, pero prefiero hacerlo que tiene que probar una gran cantidad de lógica de una vez.)
  • Puede construir un método más complicado a partir de métodos simples, donde todo el método complicado está en un solo nivel de abstracción, sin especificar detalles. Leer el método de alto nivel significa simplemente leer los nombres de los bloques de construcción de los que está compuesto; a continuación, puede sumergirse en solo los detalles que le interesan si es necesario.
  • Usted puede escribir métodos que cada hacer una cosa así, y nombre y sí el documento de una manera obvia

Por supuesto, esto puede ser exagerado, pero sin duda puede ser útil.

3

Es de esperar que facilite un código más limpio, y debería ser más fácil de probar.

Menciona la sobrecarga de llamadas de método, pero eso no debe preocupar si el método solo se llama una vez.

+0

Lo siento, por "solo llamé una vez" quise llamar solo desde un solo lugar. Ese código podría llamarse muchas veces en un bucle, por ejemplo. – an00b

+0

La sobrecarga aún debe ser insignificante, ya que el compilador puede realizar algunas optimizaciones de JIT en ese caso de todos modos. –

1

La legibilidad es mi principal razón para este tipo de comportamiento de codificación.

Si miro una larga lista de códigos, buscando un procedimiento específico o una sección de código, puede que no sea inmediatamente obvio dónde está ese procedimiento específico o sección de código.

¿Por qué escribimos libros en párrafos y capítulos? ¿Por qué las canciones tienen estrofas/versos, coros y puentes? Porque es más fácil captar una gran idea en trozos pequeños, altamente específicos.

Tanto como el desarrollo de software se trata de conducir eficientemente, limpie el código que hace el trabajo lo más rápido y elegantemente posible. También debe ser legible por los humanos que van a mantenerlo.

Al menos, esa es mi interpretación.

0

Las máquinas virtuales de Java en general tienen un límite en el tamaño máximo del método que será elegible para la alineación. Extraer el código llamado con poca frecuencia puede engrasar las ruedas, por así decirlo. ¿Puedes señalar ejemplos?

Cuestiones relacionadas