Uso de métodos genericos vs específicos
En código limpio, la decisión entre crear métodos genéricos o específicos depende del contexto y de principios de diseño como DRY (Don't Repeat Yourself), SRP (Single Responsibility Principle) y YAGNI (You Ain’t Gonna Need It). Analicemos ambas opciones:
1. Cuándo crear métodos genéricos #
Los métodos genéricos son útiles cuando:
- Evitan la repetición de código. Si varias partes del código requieren una lógica similar, un método genérico evita duplicaciones.
- Son reutilizables. Si la misma operación se aplica en múltiples contextos con variaciones mínimas, es mejor un método genérico con parámetros configurables.
- Facilitan el mantenimiento. Modificar una única función genérica es más fácil que actualizar múltiples métodos con lógica similar.
- Reducen el acoplamiento al hacer que el código sea más modular y reutilizable.
Cuándo evitar métodos genéricos #
- Si la abstracción no aporta claridad. Un método demasiado genérico puede ser difícil de entender y usar.
- Si la lógica es específica para un caso concreto. No tiene sentido generalizar algo que solo se usará en un contexto específico.
- Si es difícil de extender. A veces, agregar más lógica a un método genérico lo hace más complicado que simplemente tener métodos específicos.
Cuándo crear métodos específicos #
Los métodos específicos son ideales cuando:
- Tienen una única responsabilidad clara y están diseñados para un caso de uso concreto.
- Aumentan la legibilidad. Un método bien nombrado y con una funcionalidad clara mejora la comprensión del código.
- No se repiten innecesariamente. Si solo se usa en un contexto, no es necesario hacer una abstracción genérica.
- Evitan sobreingeniería. Generalizar demasiado puede llevar a métodos difíciles de entender y mantener.
Cuándo evitar métodos específicos #
- Si el código se repite en varios lugares. Esto va en contra del principio DRY.
- Si hay una clara oportunidad de reutilización en otros módulos o clases.
2. Ejemplo práctico 1 #
Ejemplo Malo: Código muy específico #
Opción mejor: Método más genérico y reutilizable #
- Código más flexible gracias a los parámetros inicio y fin.
- Evitamos código rígido que solo mostraba del 1 al 100.
- Ahora podemos mostrar cualquier rango de números fácilmente. 🚀
3. Ejemplo práctico 2 #
Ejemplo Malo: Código con Efectos Secundarios #
Supongamos que tenemos un sistema que filtra usuarios por diferentes criterios.
Aquí estamos repitiendo código con ligeras variaciones.
Opción mejor: Método genérico con un criterio dinámico #
📌 Ventajas de este enfoque:
- Elimina duplicación de código.
- Es más flexible y extensible.
- Usa una función de callback para personalizar el filtrado.
Conclusión #
No hay una única respuesta correcta, pero en general:
- Si la funcionalidad se repite en varios lugares, conviene un método genérico.
- Si la funcionalidad es muy específica y no se reutilizará, un método específico es mejor.
- Un método genérico no debe ser tan abstracto que dificulte la comprensión del código.
- Aplica el principio KISS (Keep It Simple, Stupid): si un método genérico complica más de lo que ayuda, es mejor evitarlo.
📢 Regla general: Usa métodos genéricos cuando tenga sentido y métodos específicos cuando la claridad sea más importante que la reutilización. 🚀
Resumen del tema
Conceptos clave #
- Equilibrio entre Abstracción y Especificidad: los métodos genéricos reutilizan lógica mediante funciones de orden superior (
callbacks,lambdas, predicados) o tipos genéricos (<T>). - Sobregeneralización: abstraer prematuramente cuando una función solo se usa en un contexto concreto genera complejidad innecesaria.
- Principio de Claridad: si un método específico comunica su intención con mayor nitidez que una abstracción compleja, prefiere la solución específica (KISS).
Qué debes recordar #
Generaliza cuando identifiques duplicación real de patrones y algoritmos, pero mantén métodos específicos cuando la claridad prime sobre la reutilización.