Skip to content

Commit 6c64c41

Browse files
authored
Merge pull request #35 from Thejimmy246/main
Técnicas de refactorización en TypeScript usando AST
2 parents 11bcf0c + 4a88533 commit 6c64c41

File tree

2 files changed

+157
-0
lines changed

2 files changed

+157
-0
lines changed
Lines changed: 33 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,33 @@
1+
# ANEXO: Uso de LLMs en el Trabajo
2+
3+
## 1. Prompts utilizados
4+
A continuación, se documentan los prompts que se usaron en la elaboración del archivo principal:
5+
6+
> "Técnicas de refactorización en TypeScript usando AST con ejemplos prácticos"
7+
8+
---
9+
10+
## 2. Reflexión ética
11+
12+
El uso de **Modelos de Lenguaje de Gran Escala (LLMs)** como ChatGPT fue de apoyo en este trabajo.
13+
Mi reflexión personal sobre su uso es la siguiente:
14+
15+
- **Ventajas:**
16+
- Aporta rapidez en la organización de ideas y redacción.
17+
- Permite generar ejemplos prácticos de código claros y consistentes.
18+
- Ayuda a dar una estructura académica en formato Markdown.
19+
20+
- **Limitaciones:**
21+
- El contenido generado puede contener errores o simplificaciones.
22+
- No reemplaza el estudio personal ni la consulta de fuentes académicas oficiales.
23+
- Requiere verificación crítica para asegurar exactitud.
24+
25+
- **Uso ético:**
26+
- Se usó como herramienta de apoyo, no como sustituto del análisis personal.
27+
- Se citan referencias de libros y documentación oficial de TypeScript.
28+
- Se reconoce explícitamente la asistencia de la IA en este anexo para mantener transparencia académica.
29+
30+
---
31+
32+
## 3. Conclusión
33+
El LLM fue un recurso de **apoyo complementario** para mejorar la claridad del trabajo, pero el **criterio, validación y reflexión crítica** pertenecen al autor del documento.
Lines changed: 124 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,124 @@
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

Comments
 (0)