|
| 1 | +# Técnicas de Refactorización en TypeScript usando AST |
| 2 | + |
| 3 | +## 1. Introducción |
| 4 | +La refactorización consiste en **mejorar el código sin alterar su funcionalidad**. |
| 5 | +En TypeScript, una herramienta poderosa para refactorizar es el **AST (Abstract Syntax Tree)**, que representa la estructura del código en forma de árbol. |
| 6 | + |
| 7 | +- **Código fuente ➝ Parser ➝ AST ➝ Transformaciones ➝ Código refactorizado** |
| 8 | +- Permite cambios automáticos, seguros y consistentes. |
| 9 | + |
| 10 | +--- |
| 11 | + |
| 12 | +## 2. Técnicas de Refactorización con AST |
| 13 | + |
| 14 | +### 2.1 Renombrado de variables y funciones |
| 15 | +- **Problema:** Nombres poco claros. |
| 16 | +- **Solución con AST:** Localizar identificadores en el árbol y reemplazarlos de forma sistemática. |
| 17 | + |
| 18 | +```ts |
| 19 | +// Antes |
| 20 | +let x = 10; |
| 21 | +function calc(y: number) { return x + y; } |
| 22 | + |
| 23 | +// Refactorizado con AST |
| 24 | +let baseValue = 10; |
| 25 | +function calculateTotal(amount: number) { return baseValue + amount; } |
| 26 | +``` |
| 27 | + |
| 28 | +--- |
| 29 | + |
| 30 | +### 2.2 Extracción de funciones |
| 31 | +- **Problema:** Funciones muy largas. |
| 32 | +- **Solución:** Identificar bloques de código en el AST y moverlos a una nueva función. |
| 33 | + |
| 34 | +```ts |
| 35 | +// Antes |
| 36 | +function process(data: number[]) { |
| 37 | + let sum = 0; |
| 38 | + for (let d of data) sum += d; |
| 39 | + console.log(sum / data.length); |
| 40 | +} |
| 41 | + |
| 42 | +// Después |
| 43 | +function process(data: number[]) { |
| 44 | + console.log(average(data)); |
| 45 | +} |
| 46 | + |
| 47 | +function average(data: number[]) { |
| 48 | + return data.reduce((a, b) => a + b, 0) / data.length; |
| 49 | +} |
| 50 | +``` |
| 51 | + |
| 52 | +--- |
| 53 | + |
| 54 | +### 2.3 Eliminación de código duplicado |
| 55 | +- AST permite detectar patrones repetidos y consolidarlos en una sola función o clase. |
| 56 | + |
| 57 | +```ts |
| 58 | +// Antes |
| 59 | +function areaRect(w: number, h: number) { return w * h; } |
| 60 | +function areaSquare(s: number) { return s * s; } |
| 61 | + |
| 62 | +// Después |
| 63 | +function area(shape: { w: number, h: number }) { return shape.w * shape.h; } |
| 64 | +``` |
| 65 | + |
| 66 | +--- |
| 67 | + |
| 68 | +### 2.4 Aplicación de patrones de diseño |
| 69 | +Con AST se pueden automatizar transformaciones hacia **patrones comunes** (Factory, Singleton, Strategy). |
| 70 | +Ejemplo: convertir instanciaciones repetidas en una **Factory** centralizada. |
| 71 | + |
| 72 | +--- |
| 73 | + |
| 74 | +## 3. Relación con Calidad y Patrones |
| 75 | +- **Calidad:** menos duplicación, mejor legibilidad, más mantenible. |
| 76 | +- **Patrones de diseño:** AST ayuda a transformar código hacia estructuras más limpias. |
| 77 | +- **Prevención de errores humanos:** la refactorización manual es propensa a fallos, AST lo evita. |
| 78 | + |
| 79 | +--- |
| 80 | + |
| 81 | +## 4. Ejemplos y Comparaciones |
| 82 | +- **Manual vs AST**: |
| 83 | + - Manual: buscar/reemplazar con riesgo de errores. |
| 84 | + - AST: cambios conscientes de contexto (ej. distingue `id` de variable vs string `"id"`). |
| 85 | + |
| 86 | +- **Ejemplo práctico**: |
| 87 | + - **Editor**: VS Code usa el AST de TypeScript para sugerir refactorizaciones. |
| 88 | + |
| 89 | +--- |
| 90 | + |
| 91 | +## 5. Análisis Crítico y Reflexión |
| 92 | +- **Ventajas:** Precisión, automatización, escalabilidad. |
| 93 | +- **Limitaciones:** Curva de aprendizaje, herramientas adicionales (ej. `ts-morph`, `typescript-eslint`). |
| 94 | +- **Reflexión:** El uso de AST es más relevante en equipos grandes y proyectos de larga duración. Para proyectos pequeños puede ser demasiado costo/beneficio. |
| 95 | + |
| 96 | +--- |
| 97 | + |
| 98 | +## 6. Conclusión |
| 99 | +Refactorizar con AST en TypeScript: |
| 100 | +- **Asegura consistencia.** |
| 101 | +- **Facilita patrones de diseño.** |
| 102 | +- **Eleva la calidad del software.** |
| 103 | + |
| 104 | +En el contexto del curso de **PDD (Patrones de Diseño y Desarrollo)**, AST es una herramienta que conecta teoría (patrones) con práctica (refactorización automatizada). |
| 105 | + |
| 106 | +--- |
| 107 | + |
| 108 | +## 7. Referencias |
| 109 | + |
| 110 | +- Gamma, E., Helm, R., Johnson, R., & Vlissides, J. (1994). *Design Patterns: Elements of Reusable Object-Oriented Software.* Addison-Wesley. |
| 111 | +- Fowler, M. (2018). *Refactoring: Improving the Design of Existing Code (2nd Edition).* Addison-Wesley. |
| 112 | +- TypeScript Team. (2023). *TypeScript Handbook.* Microsoft. https://www.typescriptlang.org/docs/ |
| 113 | +- Ts-morph. (2023). *TypeScript Compiler API wrapper.* https://ts-morph.com |
| 114 | + |
| 115 | +--- |
| 116 | + |
| 117 | +## 8. ANEXO: Uso de LLMs |
| 118 | + |
| 119 | +### Prompts utilizados |
| 120 | +> "Técnicas de refactorización en TypeScript usando AST con ejemplos prácticos para un trabajo en .md" |
| 121 | +
|
| 122 | +### Reflexión ética |
| 123 | +El uso de LLMs (como ChatGPT) apoyó en la **redacción estructurada** y en la **claridad de ejemplos**, pero no sustituye la comprensión personal. |
| 124 | +Es mi responsabilidad **validar, complementar y citar fuentes académicas** para garantizar la calidad y honestidad del trabajo. |
0 commit comments