Codigo limpio y refactorización
Un efecto secundario ocurre cuando una función o método modifica el estado fuera de su alcance esperado (como variables globales, propiedades de clase u otros objetos) o produce cambios que no son evidentes a partir de su definición. Los efectos secundarios pueden introducir errores, dificultar la depuración y hacer que el código sea menos predecible y mantenible.
- Dificultan la Depuración: Si una función modifica variables externas, puede ser difícil rastrear el origen de los cambios.
- Reducen la Reusabilidad: Las funciones con efectos secundarios dependen del estado externo, lo que limita su uso en otros contextos.
- Generan Comportamientos Inesperados: Si múltiples funciones modifican el mismo recurso compartido, el estado puede volverse inconsistente.
- Complican el Paralelismo: En sistemas concurrentes, los efectos secundarios pueden causar conflictos cuando varias tareas intentan modificar el mismo recurso simultáneamente.
Ejemplo Malo: Código con Efectos Secundarios
1public class EfectosSecundariosJava { 2 3 public static void duplicarValor(int[] numeros) { 4 // Efecto secundario: modifica el contenido del array pasado como argumento 5 for (int i = 0; i < numeros.length; i++) { 6 numeros[i] *= 2; // Cambia directamente el array original 7 } 8 } 9 10 public static void main(String[] args) { 11 int[] valores = {1, 2, 3}; 12 duplicarValor(valores); // Modifica el array original 13 for (int valor : valores) { 14 System.out.println(valor); // Salida: 2, 4, 6 15 } 16 } 17}
Ejemplo Corregido: Evitando Efectos Secundarios
1import java.util.Arrays; 2 3public class SinEfectosSecundariosJava { 4 5 public static int[] duplicarValor(int[] numeros) { 6 // Crear un nuevo array en lugar de modificar el original 7 int[] duplicados = Arrays.copyOf(numeros, numeros.length); 8 for (int i = 0; i < duplicados.length; i++) { 9 duplicados[i] *= 2; 10 } 11 return duplicados; 12 } 13 14 public static void main(String[] args) { 15 int[] valores = {1, 2, 3}; 16 int[] duplicados = duplicarValor(valores); 17 18 System.out.println("Original: " + Arrays.toString(valores)); // [1, 2, 3] 19 System.out.println("Duplicados: " + Arrays.toString(duplicados)); // [2, 4, 6] 20 } 21}
- Loading...