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...