1 00:00:01,250 --> 00:00:03,460 En este vídeo, Me gustaría mostrarle que Nautilus 2 00:00:03,870 --> 00:00:06,710 permite refactorizaciones. Que es una refactorización. 3 00:00:07,050 --> 00:00:11,560 Es una operación que transformará un codigo 4 00:00:11,727 --> 00:00:13,000 preservando su comportamiento. 5 00:00:13,320 --> 00:00:15,850 Debería saber que históricamente la refactorización fue 6 00:00:16,017 --> 00:00:18,700 implementada por primera vez en el antepasado de Pharo, 7 00:00:18,867 --> 00:00:21,840 y más tarde en todos los demás lenguajes, como Java 8 00:00:22,170 --> 00:00:26,470 Así pues desde el '95, Smalltalk disponía de una herramienta de refactorización 9 00:00:26,637 --> 00:00:27,890 y la de Pharo está inspirada en esta herramienta. 10 00:00:28,540 --> 00:00:31,070 Así, que abramos el Nautilus para mirar un poco los tipos 11 00:00:31,237 --> 00:00:32,020 de refactorización que nos propone. 12 00:00:33,320 --> 00:00:36,440 Trabajaremos en nuestra clase. 13 00:00:38,000 --> 00:00:39,800 Tiene refactorizaciones en diferentes niveles. 14 00:00:39,967 --> 00:00:41,790 Tiene refactorizaciones en el nivel de la clase, en el nivel del 15 00:00:41,957 --> 00:00:45,330 método y en el nivel del código. Así que en el nivel de la clase dispone 16 00:00:48,710 --> 00:00:49,343 de todos esos tipos de refactorización. 17 00:00:51,270 --> 00:00:53,120 Puede tener refactorización en el nivel de las variables instancia 18 00:00:53,287 --> 00:00:56,020 y en el nivel de las variables de clase. 19 00:00:57,550 --> 00:01:00,580 Cuando una refactorización es muy útil aparece 20 00:01:01,490 --> 00:01:05,320 en el nivel más alto de los menús, para que pueda 21 00:01:05,487 --> 00:01:07,490 ir más rápido, no necesita hacer clic en clase, 22 00:01:07,960 --> 00:01:09,210 refactoring, Rename está aquí. 23 00:01:10,140 --> 00:01:14,690 De la misma manera, para los métodos 24 00:01:14,857 --> 00:01:17,310 las refactorizaciones, tendremos todos estos métodos aqui, 25 00:01:19,850 --> 00:01:22,470 también con rename, que es una refactorización importante 26 00:01:22,637 --> 00:01:25,310 en este nivel. Ahora si elijo otro 27 00:01:25,477 --> 00:01:28,750 trozo de código, no son muy complicados 28 00:01:28,917 --> 00:01:33,820 en esta clase, tendremos las refactorizaciones siguientes 29 00:01:35,350 --> 00:01:38,040 que trabajaran al nivel del código del método. 30 00:01:41,300 --> 00:01:45,450 Si cambio de nombre, si hago un Rename de la clase Counter, 31 00:01:45,617 --> 00:01:50,020 la llamaré Class Counter 2, el sistema me dice ok. 32 00:01:50,187 --> 00:01:51,300 Hago un rename, de acuerdo. 33 00:01:55,130 --> 00:01:56,710 Me devuelve un retorno, no sé exactamente qué significa esto. 34 00:01:56,877 --> 00:01:57,960 pero no importa, lo ignoro. 35 00:01:58,870 --> 00:02:00,750 Y aquí voy a ver, que en los lugares donde 36 00:02:04,510 --> 00:02:08,710 se llamaba a la Class Counter, ahora me muestra Counter 2 en su lugar. 37 00:02:10,000 --> 00:02:14,780 Este es una típica refactorización de rename (renombrar). 38 00:02:14,947 --> 00:02:15,580 una clase. 39 00:02:16,490 --> 00:02:18,830 Ahora, si quiero cambiar el nombre, y este es un muy 40 00:02:19,000 --> 00:02:23,480 buen ejemplo, imaginemos que desea renombrar el método increment. 41 00:02:24,450 --> 00:02:27,230 Haré un Rename, y como no estoy muy inspirado, 42 00:02:27,397 --> 00:02:28,520 lo llamaré Increment2. 43 00:02:31,480 --> 00:02:33,670 El sistema me dice: "Cuidado" 44 00:02:33,837 --> 00:02:35,550 Así que tengo cuidado. 45 00:02:36,350 --> 00:02:40,520 Ten cuidado, estás a punto de cambiar el nombre 46 00:02:41,740 --> 00:02:44,630 de alrededor una decena de implementadores en el 47 00:02:44,797 --> 00:02:48,750 sistema, estás a punto de renombrarlos todos, realmente quieres hacer esto? 48 00:02:48,917 --> 00:02:50,600 Primero, no quiero hacerlo, segundo tampoco 49 00:02:50,767 --> 00:02:52,730 quiero seleccionar y deseleccionar. 50 00:02:53,470 --> 00:02:56,580 podríamos hacerlo, lo que me permite mostrarle que, 51 00:02:56,747 --> 00:02:58,700 al final, el programador está en disposición de 52 00:02:58,867 --> 00:03:00,490 escoger. Pero yo no quiero hacerlo. 53 00:03:01,000 --> 00:03:03,700 Sin embargo, lo que puedo hacer es decir: 54 00:03:03,867 --> 00:03:06,630 estoy trabajando en el paquete MyCounter 55 00:03:06,797 --> 00:03:09,450 y no tengo muchas ganas que se modifique el resto 56 00:03:09,617 --> 00:03:11,020 del sistema automáticamente. 57 00:03:11,310 --> 00:03:13,680 Entonces le digo a Nautilus: Me gustaría que abrieras 58 00:03:13,847 --> 00:03:17,280 el browser (navegador) solo en mi paquete y que 59 00:03:17,447 --> 00:03:20,380 todas las operaciones se realicen solo en la selección. 60 00:03:20,890 --> 00:03:23,770 Así que lo que haré es browse scoped. 61 00:03:26,530 --> 00:03:28,710 Eso lo que también puede obtener presionando 62 00:03:28,877 --> 00:03:30,180 el botón Scoped, es lo mismo 63 00:03:30,570 --> 00:03:32,940 Es una característica tan interesante que se ha implementado mediante un 64 00:03:33,107 --> 00:03:36,240 botón propio. La diferencia entre estos 2 mundos, 65 00:03:36,407 --> 00:03:40,780 es que que aquí tengo todos mis paquetes 66 00:03:40,947 --> 00:03:41,890 y aquí solo tengo un paquete. 67 00:03:42,057 --> 00:03:45,310 Podría tener varios, solo tengo una selección de estos paquetes. 68 00:03:45,477 --> 00:03:47,120 Y ahora, si quiero modificar increment 69 00:03:47,287 --> 00:03:52,200 Puedo decir: "Rename" 70 00:03:52,460 --> 00:03:57,180 en increment2 y lo hará solo 71 00:03:57,500 --> 00:04:01,510 locamente en el paquete o en la selección del navegador con Scoped. 72 00:04:03,380 --> 00:04:05,590 Hago clic en Aceptar y ahora correremos nuestras pruebas. 73 00:04:05,757 --> 00:04:08,150 Mis pruebas aún funcionan, Todas son verdes. 74 00:04:08,480 --> 00:04:11,890 Y veo que ahora todos mis 75 00:04:12,057 --> 00:04:13,790 increment ha cambiado de nombre a increment2. 76 00:04:16,800 --> 00:04:18,890 En este video hemos visto que Pharo 77 00:04:19,057 --> 00:04:21,610 nos ofrece una variedad de operaciones, 78 00:04:21,777 --> 00:04:25,080 selecciones y manipulaciones de código, con el plus de la posibilidad de 79 00:04:25,247 --> 00:04:27,960 restriccion al subconjuntos de paquetes 80 00:04:28,200 --> 00:04:30,630 para poder controlar donde se aplican los cambios. 81 00:04:31,110 --> 00:04:32,870 En Pharo, también dispone de 82 00:04:33,037 --> 00:04:35,240 una herramienta que le permitirá reescribir el código 83 00:04:35,407 --> 00:04:38,060 automáticamente, no me extenderé al respeto, si lo necesita 84 00:04:38,227 --> 00:04:40,650 solo tiene que pedirlo, hay una herramienta concreta 85 00:04:40,817 --> 00:04:42,310 para realizar este tipo de acciones. 86 00:04:43,160 --> 00:04:45,480 Ahora el último punto que me gustaría mostrarle 87 00:04:45,647 --> 00:04:50,410 es que a menudo tiene operaciones que le son propuestas 88 00:04:50,577 --> 00:04:51,210 que están generadas. 89 00:04:51,470 --> 00:04:54,900 Los aplicará, el sistema le propondrá ejecutarlos 90 00:04:55,067 --> 00:04:57,330 pero no le garantiza que funcione, que realmente sea apropiado. 91 00:04:57,890 --> 00:05:00,810 Lo que Pharo propone es lo que Nautilus también propone, 92 00:05:01,000 --> 00:05:03,460 és lo que llamamos Smart Suggestions. 93 00:05:03,627 --> 00:05:08,090 Así las Smart Suggestions, és una herramienta que conoce 94 00:05:08,520 --> 00:05:12,530 y le propondrá operaciones basadas en la selección actual. 95 00:05:14,120 --> 00:05:18,590 Por ejemplo, aquí puede proponerme de realizar un 96 00:05:18,757 --> 00:05:22,510 Extract Method, no és muy interesante en este caso 97 00:05:22,677 --> 00:05:25,900 o un Inline method. Esto significa que si selecciono 98 00:05:26,067 --> 00:05:29,230 la afectación, no tendré siempre 99 00:05:29,397 --> 00:05:32,490 las mismas operaciones disponibles 100 00:05:33,400 --> 00:05:36,110 Si estoy en una clase, me pedirá de 101 00:05:36,277 --> 00:05:37,710 navegar por las referencias, de renombrar la clase. 102 00:05:37,877 --> 00:05:41,000 Y puede ver que dependiendo de la posición del cursor, 103 00:05:41,710 --> 00:05:43,000 no le ofrece las mismas operaciones.