Skip to content

Commit 1bd8153

Browse files
committed
Refine YAGNI principles and examples in Readme.md for clarity and documentation
1 parent 473a205 commit 1bd8153

File tree

1 file changed

+102
-28
lines changed

1 file changed

+102
-28
lines changed

content/sesion12/Readme.md

Lines changed: 102 additions & 28 deletions
Original file line numberDiff line numberDiff line change
@@ -948,7 +948,7 @@ Se resume en
948948

949949
---
950950

951-
Una forma de aplicarlo es:
951+
Una forma de aplicarlo es
952952

953953
- **Identificar** y eliminar código duplicado
954954
- **Utilizar** funciones, clases y módulos para reutilizar código
@@ -1136,50 +1136,56 @@ tienda.pagar(100, "qr")
11361136

11371137
#### YAGNI (You Aren't Gonna Need It)
11381138

1139-
El principio YAGNI enfatiza la importancia de no agregar funcionalidades
1140-
o características que no son necesarias en el momento.
1139+
El principio YAGNI enfatiza la importancia de *NO agregar* funcionalidades
1140+
o características que *no son necesarias* en el momento
11411141

1142-
Esto ayuda a evitar la sobreingeniería y a mantener el código simple y enfocado.
1142+
Ayuda a evitar la *sobreingeniería* y a mantener el código simple y enfocado
11431143

11441144
---
11451145

1146-
Se puede resumir en:
1146+
Se resume en
11471147

1148-
- Necesidad: No agregue funcionalidades o características que no son necesarias.
1149-
- Simplicidad: Mantenga el código simple y enfocado en el propósito actual.
1150-
- Eficiencia: Evite la complejidad innecesaria que puede afectar el rendimiento.
1148+
- **Necesidad**: No agregue funcionalidades o características que no son necesarias
1149+
- **Simplicidad**: Mantenga el código simple y enfocado en el propósito actual
1150+
- **Eficiencia**: Evite la complejidad innecesaria que puede afectar el rendimiento
11511151

11521152
---
11531153

1154-
- Mantenimiento: Un código sin características innecesarias es más fácil de mantener.
1155-
- Claridad: Un código sin características innecesarias es más claro y fácil de entender.
1156-
- Flexibilidad: Un código sin características innecesarias es más flexible y adaptable a cambios futuros.
1154+
- **Mantenimiento**: Un código sin características innecesarias es más fácil de mantener
1155+
- **Claridad**: Un código sin características innecesarias es más fácil de entender
1156+
- **Flexibilidad**: Un código sin características innecesarias es más flexible y adaptable a cambios futuros
11571157

11581158
---
11591159

1160-
Una forma de aplicarlo es:
1160+
Una forma de aplicarlo es
11611161

1162-
- Enfocarse en los requisitos actuales y no en posibles requisitos futuros.
1163-
- Evitar la sobreingeniería y centrarse en lo esencial.
1164-
- Revisar y eliminar características innecesarias durante la refactorización.
1162+
- **Enfocarse** en los **requisitos actuales** y NO en posibles requisitos futuros
1163+
- *Evitar* la sobreingeniería y centrarse en lo esencial
1164+
- Revisar y *eliminar características innecesarias* durante la refactorización
11651165

11661166
---
11671167

1168-
- Priorizar la simplicidad y claridad del código.
1169-
- Mantener el código enfocado en el propósito actual.
1170-
- Evitar la tentación de agregar características "por si acaso".
1168+
- **Priorizar** la simplicidad y claridad del código
1169+
- **Mantener** el código enfocado en el propósito actual
1170+
- **Evitar** la tentación de agregar características
1171+
1172+
*"por si acaso"*
11711173

11721174
---
11731175
#### Ejemplo YAGNI
11741176

1177+
Crear el archivo `yagni.py` en la carpeta `sesion12`
1178+
11751179
```text
11761180
Un estudiante esta aprendiendo a sumar dos números, y le dieron
11771181
una calculadora para para que pueda practicar la suma, pero
1178-
la calculadora tiene muchas funciones que no va a usar aún.
1182+
tiene muchas funciones que no va a usar aún
1183+
Simplifica el código aplicando el principio YAGNI
1184+
Deja solo la funcionalidad necesaria para sumar dos números
1185+
agrega anotaciones y documentación
11791186
```
11801187

1181-
```python [1-14|15-20]
1182-
# Característica innecesaria
1188+
```python [1-14]
11831189
class Calculadora:
11841190
def sumar(self, a, b):
11851191
return a + b
@@ -1188,12 +1194,16 @@ class Calculadora:
11881194
def multiplicar(self, a, b):
11891195
return a * b
11901196
def dividir(self, a, b):
1191-
if b == 0:
1192-
raise ValueError("No se puede dividir por cero")
11931197
return a / b
11941198
calc = Calculadora()
11951199
print(calc.sumar(5, 7))
1196-
# Solución enfocada
1200+
```
1201+
1202+
---
1203+
1204+
Solución simple
1205+
1206+
```python
11971207
class Calculadora:
11981208
def sumar(self, a, b):
11991209
return a + b
@@ -1202,7 +1212,28 @@ print(calc.sumar(5, 7))
12021212
```
12031213

12041214
---
1205-
#### Ejercicio 03
1215+
Solución con anotaciones y documentación
1216+
1217+
```python
1218+
class Calculadora:
1219+
"""Clase que representa una calculadora simple."""
1220+
def sumar(self, a: int, b: int) -> int:
1221+
"""Suma dos números enteros.
1222+
1223+
Args:
1224+
a (int): El primer número.
1225+
b (int): El segundo número.
1226+
1227+
Returns:
1228+
int: La suma de los dos números.
1229+
"""
1230+
return a + b
1231+
calc = Calculadora()
1232+
print(calc.sumar(5, 7))
1233+
```
1234+
1235+
---
1236+
#### Ejercicio para ti (03)
12061237

12071238
```text
12081239
Un profesor necesita una forma sencilla de llevar
@@ -1211,11 +1242,12 @@ las notas de sus exámenes. Quiere poder calcular
12111242
fácilmente el promedio de cada estudiante y saber
12121243
de si ha aprobado o no el curso,
12131244
con nota mayor a 51, además de tener
1214-
un resumen claro de sus resultados para mostrárselos.
1245+
un resumen claro de sus resultados para mostrárselos
12151246
Simplifica el código aplicando el principio YAGNI
1247+
Agrega anotaciones y documentación
12161248
```
12171249

1218-
En el archivo `estudiantes.py` en la carpeta `sesion12`
1250+
Crea archivo `estudiantes.py` en la carpeta `sesion12`
12191251

12201252
---
12211253
Realizar los cambios 4 minutos
@@ -1261,7 +1293,7 @@ print(estudiante1.resumen())
12611293
<iframe src="https://time-stuff.com/embed.html" frameborder="0" scrolling="no" width="391" height="140"></iframe>
12621294

12631295
---
1264-
#### Solución simple
1296+
Solución simple
12651297

12661298
```python
12671299
class Estudiante:
@@ -1291,6 +1323,48 @@ Estudiante: Ana, Notas: [85, 90, 78], Promedio: 84.33333333333333, Aprobado: Tru
12911323

12921324
---
12931325

1326+
Solución con anotaciones y documentación
1327+
1328+
```python
1329+
class Estudiante:
1330+
"""Clase que representa a un estudiante."""
1331+
def __init__(self, nombre: str, notas: list[int]) -> None:
1332+
"""Inicializa una nueva instancia de la clase Estudiante.
1333+
1334+
Args:
1335+
nombre (str): El nombre del estudiante.
1336+
notas (list[int]): Las notas del estudiante.
1337+
"""
1338+
self.nombre = nombre
1339+
self.notas = notas
1340+
def calcular_promedio(self) -> float:
1341+
"""Calcula el promedio de las notas del estudiante.
1342+
Returns:
1343+
float: El promedio de las notas.
1344+
"""
1345+
return sum(self.notas) / len(self.notas)
1346+
def aprobo(self) -> bool:
1347+
"""Determina si el estudiante aprobó el curso.
1348+
Returns:
1349+
bool: True si aprobó, False en caso contrario.
1350+
"""
1351+
return self.calcular_promedio() >= 51
1352+
def resumen(self) -> str:
1353+
"""Genera un resumen del estudiante.
1354+
Returns:
1355+
str: Un resumen con el nombre, notas, promedio y estado de aprobación.
1356+
"""
1357+
mensaje = f"Estudiante: {self.nombre}"
1358+
mensaje += f", Notas: {self.notas}"
1359+
mensaje += f", Promedio: {self.calcular_promedio()}"
1360+
mensaje += f", Aprobado: {self.aprobo()}"
1361+
return mensaje
1362+
estudiante1 = Estudiante("Ana", [85, 90, 78])
1363+
print(estudiante1.resumen())
1364+
```
1365+
1366+
---
1367+
12941368
#### Resumen
12951369

12961370
- Python es un lenguaje popular por su facilidad para escribir código y su tipado dinámico, lo que permite flexibilidad pero puede causar errores difíciles de detectar.

0 commit comments

Comments
 (0)