Middle
¿Qué criterios de evaluación del código en estilo procedural se pueden considerar buenos y cuáles malos?
sobes.tech AI
Respuesta de la IA
Criterios buenos:
- Legibilidad: Qué tan fácil es entender qué hace el código leyendo de arriba hacia abajo.
- Claridad de variables y funciones: Uso de nombres descriptivos que reflejen su propósito y lógica.
- Descomposición: Dividir tareas complejas en funciones más pequeñas y manejables. Cada función debe realizar una tarea específica.
- Ausencia de variables globales: Minimizar el uso de variables globales para reducir dependencias y efectos secundarios.
- Manejo de errores: Manejo explícito de errores y excepciones posibles.
- Comentarios: Presentes donde el código no es obvio o para explicar la lógica.
- Consistencia en el estilo: Estilo uniforme de formato y nomenclatura en todo el proyecto.
- Minimización de duplicación de código: Evitar repetir bloques de código iguales.
# Buen ejemplo de descomposición y nombres claros
def calculate_average(numbers):
"""Calcula el promedio de una lista de números."""
if not numbers:
return 0
total = sum(numbers)
return total / len(numbers)
def process_data(data):
# Suponemos que 'data' es una lista de listas de números
averages = []
for row in data:
avg = calculate_average(row)
averages.append(avg)
return averages
Criterios malos:
- Falta de claridad: El código es difícil de entender debido a lógica confusa, nombres poco descriptivos o falta de estructura.
- "Código espagueti": Muchas transiciones y dependencias que hacen difícil seguir la secuencia de ejecución.
- Código "lazo": Funciones largas y monolíticas que realizan muchas tareas no relacionadas.
- Uso de "números mágicos": Constantes numéricas sin explicación en el código.
- Falta de manejo de errores: El programa "se cae" ante situaciones imprevistas.
- Duplicación de código: Bloques iguales o muy similares repetidos en diferentes lugares.
- Estilo inconsistente: Diferentes formatos y nombres que dificultan la lectura.
# Ejemplo pobre de "lazo" y números mágicos
def process(d):
t = 0
for r in d:
s = 0
c = 0
for n in r:
s += n
c += 1
if c > 0:
t += s / c
return t / len(d) if len(d) > 0 else 0
Comparación:
| Buenos criterios | Criterios malos |
|---|---|
| Legibilidad | Falta de claridad ("espagueti", "lazo") |
| Variables y funciones comprensibles | Nombres ilegibles |
| Descomposición | Funciones monolíticas |
| Ausencia de variables globales | Uso excesivo de variables globales |
| Manejo explícito de errores | Falta de manejo de errores |
| Comentarios donde son necesarios | Ausencia de comentarios |
| Estilo consistente | Estilo inconsistente |
| Minimización de duplicación de código | Duplicación de código |