En este vídeo, Me gustaría mostrarle que Nautilus
permite refactorizaciones. Que es una refactorización.
Es una operación que transformará un codigo
preservando su comportamiento.
Debería saber que históricamente la refactorización fue
implementada por primera vez en el antepasado de Pharo,
y más tarde en todos los demás lenguajes, como Java
Así pues desde el '95, Smalltalk disponía de una herramienta de refactorización
y la de Pharo está inspirada en esta herramienta.
Así, que abramos el Nautilus para mirar un poco los tipos
de refactorización que nos propone.
Trabajaremos en nuestra clase.
Tiene refactorizaciones en diferentes niveles.
Tiene refactorizaciones en el nivel de la clase, en el nivel del
método y en el nivel del código. Así que en el nivel de la clase dispone
de todos esos tipos de refactorización.
Puede tener refactorización en el nivel de las variables instancia
y en el nivel de las variables de clase.
Cuando una refactorización es muy útil aparece
en el nivel más alto de los menús, para que pueda
ir más rápido, no necesita hacer clic en clase,
refactoring, Rename está aquí.
De la misma manera, para los métodos
las refactorizaciones, tendremos todos estos métodos aqui,
también con rename, que es una refactorización importante
en este nivel. Ahora si elijo otro
trozo de código, no son muy complicados
en esta clase, tendremos las refactorizaciones siguientes
que trabajaran al nivel del código del método.
Si cambio de nombre, si hago un Rename de la clase Counter,
la llamaré Class Counter 2, el sistema me dice ok.
Hago un rename, de acuerdo.
Me devuelve un retorno, no sé exactamente qué significa esto.
pero no importa, lo ignoro.
Y aquí voy a ver, que en los lugares donde
se llamaba a la Class Counter, ahora me muestra Counter 2 en su lugar.
Este es una típica refactorización de rename (renombrar).
una clase.
Ahora, si quiero cambiar el nombre, y este es un muy
buen ejemplo, imaginemos que desea renombrar el método increment.
Haré un Rename, y como no estoy muy inspirado,
lo llamaré Increment2.
El sistema me dice: "Cuidado"
Así que tengo cuidado.
Ten cuidado, estás a punto de cambiar el nombre
de alrededor una decena de implementadores en el
sistema, estás a punto de renombrarlos todos, realmente quieres hacer esto?
Primero, no quiero hacerlo, segundo tampoco
quiero seleccionar y deseleccionar.
podríamos hacerlo, lo que me permite mostrarle que,
al final, el programador está en disposición de
escoger. Pero yo no quiero hacerlo.
Sin embargo, lo que puedo hacer es decir:
estoy trabajando en el paquete MyCounter
y no tengo muchas ganas que se modifique el resto
del sistema automáticamente.
Entonces le digo a Nautilus: Me gustaría que abrieras
el browser (navegador) solo en mi paquete y que
todas las operaciones se realicen solo en la selección.
Así que lo que haré es browse scoped.
Eso lo que también puede obtener presionando
el botón Scoped, es lo mismo
Es una característica tan interesante que se ha implementado mediante un
botón propio. La diferencia entre estos 2 mundos,
es que que aquí tengo todos mis paquetes
y aquí solo tengo un paquete.
Podría tener varios, solo tengo una selección de estos paquetes.
Y ahora, si quiero modificar increment
Puedo decir: "Rename"
en increment2 y lo hará solo
locamente en el paquete o en la selección del navegador con Scoped.
Hago clic en Aceptar y ahora correremos nuestras pruebas.
Mis pruebas aún funcionan, Todas son verdes.
Y veo que ahora todos mis
increment ha cambiado de nombre a increment2.
En este video hemos visto que Pharo
nos ofrece una variedad de operaciones,
selecciones y manipulaciones de código, con el plus de la posibilidad de
restriccion al subconjuntos de paquetes
para poder controlar donde se aplican los cambios.
En Pharo, también dispone de
una herramienta que le permitirá reescribir el código
automáticamente, no me extenderé al respeto, si lo necesita
solo tiene que pedirlo, hay una herramienta concreta
para realizar este tipo de acciones.
Ahora el último punto que me gustaría mostrarle
es que a menudo tiene operaciones que le son propuestas
que están generadas.
Los aplicará, el sistema le propondrá ejecutarlos
pero no le garantiza que funcione, que realmente sea apropiado.
Lo que Pharo propone es lo que Nautilus también propone,
és lo que llamamos Smart Suggestions.
Así las Smart Suggestions, és una herramienta que conoce
y le propondrá operaciones basadas en la selección actual.
Por ejemplo, aquí puede proponerme de realizar un
Extract Method, no és muy interesante en este caso
o un Inline method. Esto significa que si selecciono
la afectación, no tendré siempre
las mismas operaciones disponibles
Si estoy en una clase, me pedirá de
navegar por las referencias, de renombrar la clase.
Y puede ver que dependiendo de la posición del cursor,
no le ofrece las mismas operaciones.