¿Cómo se llama el proceso de tomar parte de una función y convertirla en una función individual?

8

Sé que había un término técnico para esto. No puedo recordar de qué se trataba.

Si el título necesita aclaración, esto es lo que quiero decir; Si este es el código anterior:

Result foobar(Param1,Param2,Param3) {
  code that does abc
  code that does xyz
  code that does asdf
  more code that does something
}

y se cambia a:

SomeResult do_xyz(SomeParams) {
  code that does xyz
}
Result foobar() {
  code that does abc
  do_xyz(args);
  code that does asdf
  more code that does something
}
máscara de bits
fuente
Lo habría llamado 'ordenar'. No puedo creer que alguien haya decidido llamar a esto algo especial, deben haber necesitado relleno para su libro.
James
@James: 'ordenar' es mucho más genérico. Tiene sentido dar cosas de las que necesita hablar a menudo nombres, para que pueda hablar de ellas de manera más eficiente. Esa es la única razón de los patrones.
bitmask el

Respuestas:

21

El término técnico para esto es Método de extracción

Ver http://www.refactoring.com/catalog/extractMethod.html

Convierta el fragmento en un método cuyo nombre explique el propósito del método.

void printOwing() {
    printBanner();

    //print details
    System.out.println ("name:    " + _name);
    System.out.println ("amount    " + getOutstanding());
}

                                                                                                         http://www.refactoring.com/catalog/arrow.gif

void printOwing() {
    printBanner();
    printDetails(getOutstanding());
}

void printDetails (double outstanding) {
    System.out.println ("name:    " + _name);
    System.out.println ("amount    " + outstanding);
}
herby
fuente
55
extracción - eso es todo!
bitmask el
Método de extracción Deberías consultar Patrones de diseño .
Larry Hector
99
@LarryHector: No estoy seguro de que sean patrones de diseño (GoF) . Hay algo llamado Método de plantilla allí que es un poco similar, y por supuesto, DP es una lectura fundamental, pero el Método de extracción, así como muchas otras refactorizaciones, se encuentran en otra literatura y esa es la Refactorización de Martin Fowler .
herby
1
@herby: Tienes razón, está definido en Refactorización de Fowler , gracias por la corrección. También hay una buena sección sobre cómo / por qué muchos de los métodos de refactorización en Michael Feathers ' Working with Legacy Code .
Larry Hector
8

El proceso en sí se llama Refactorización del código, y el método se llama Método de extracción , y es una buena combinación para aplicar SRP (principio de responsabilidad única) al código.

Yusubov
fuente
¿Es "Refacturing" un error tipográfico? (¡pregunta honesta!)
bitmask el
@bitmask Probablemente sea
marktani
Sí, es un error tipográfico, como puede parecer por los enlaces, estaba destinado a ser "Refactorización"
Yusubov
55
La refactorización es menos específica. El método de extracción es uno de los muchos tipos de refactorización. Y ninguno de los dos está implícitamente relacionado con SRP, aunque esa es una de las muchas razones por las que es posible que desee refactorizar.
pdr