Consejo de programación: Don’t Repeat Yourself (DRY)

Muchas veces toca crear código que se va a utilizar en varias partes, por ejemplo, supongamos que tenemos un programa que debe contar el número de veces que un caracter se repite dentro de un 3 strings que insertes consecutivamente y sumar los totales, una solución con un ejemplo en Java podría ser esta:

public static void main(String[] args) {
    System.out.println("Inserta una letra para buscar, si insertas más de una se tomará la primera");
    Scanner scanner = new Scanner(System.in);
    char charToSearch = scanner.next().charAt(0);

    System.out.println("Inserta el primer String");
    String myString = scanner.next();

    int firstTotal = 0;
    for (int i = 0 ; i < myString.length() ; i++) {
        char currentChar = myString.charAt(i);
        if (currentChar == charToSearch) {
            firstTotal++;
        }
    }

    System.out.println("Inserta el segundo String");
    myString = scanner.next();

    int secondTotal = 0;
    for (int i = 0 ; i < myString.length() ; i++) {
        char currentChar = myString.charAt(i);
        if (currentChar == charToSearch) {
            secondTotal++;
        }
    }

    System.out.println("Inserta el tercer String");
    myString = scanner.next();

    int thirdTotal = 0;
    for (int i = 0 ; i < myString.length() ; i++) {
        char currentChar = myString.charAt(i);
        if (currentChar == charToSearch) {
            thirdTotal++;
        }
    }

    int total = firstTotal + secondTotal + thirdTotal;
    System.out.println(total);
}

Como ves es mucho código repetido, imagina que hay un error dentro del for, lo tendrías que corregir 3 veces, además de que si en algún punto necesitas que en vez de evaluar 3 strings sean 4 tendrás que agregar todavía más código.

Hay un convenio en programación llamado DRY, «Don’t Repeat Yourself » o «No te repitas», básicamente se refiere a que si ves código repetido, metas ese código en un método en vez de ponerlo aquí y allá.

Una vez aplicado el consejoDRY, el ejemplo de arriba quedaría como:

public class Main {

    public static void main(String[] args) {
        System.out.println("Inserta una letra para buscar, si insertas más de una se tomará la primera");
        Scanner scanner = new Scanner(System.in);
        char charToSearch = scanner.next().charAt(0);

        System.out.println("Inserta el primer String");
        int firstTotal = getTotalCharsInString(scanner, charToSearch);

        System.out.println("Inserta el segundo String");
        int secondTotal = getTotalCharsInString(scanner, charToSearch);

        System.out.println("Inserta el tercer String");
        int thirdTotal = getTotalCharsInString(scanner, charToSearch);

        int total = firstTotal + secondTotal + thirdTotal;
        System.out.println(total);
    }

    private static int getTotalCharsInString(Scanner scanner, char charToSearch) {
        String myString = scanner.next();
        int total = 0;
        for (int i = 0; i < myString.length(); i++) {
            char currentChar = myString.charAt(i);
            if (currentChar == charToSearch) {
                total++;
            }
        }
        return total;
    }
}

Como puedes ver ahora el código se redujo y todo se hace en el método getTotalCharsInString, al cual le pasamos el scanner y el caracter a buscar, si tenemos que editar el código solo editaríamos getTotalCharsInString una vez en vez de las 3.

Esto ya es un extra, pero si quieres que tu código funcione para una cantidad n de strings, puedes usar un while, así:

public class Main {

    public static void main(String[] args) {
        System.out.println("Inserta una letra para buscar, si insertas más de una se tomará la primera");
        Scanner scanner = new Scanner(System.in);
        char charToSearch = scanner.next().charAt(0);

        System.out.println("¿En cuantos Strings vas a buscar?");
        int n = scanner.nextInt();
        int i = 0;
        int total = 0;
        while (i < n) {
            // Esto es para que aparezca Inserta el string 1, porque i comienza en 0
            int stringIndexToDisplay = i + 1;
            System.out.println("Inserta el String " + stringIndexToDisplay);
            total += getTotalCharsInString(scanner, charToSearch);
            i++;
        }

        System.out.println(total);
    }

    private static int getTotalCharsInString(Scanner scanner, char charToSearch) {
        String myString = scanner.next();
        int total = 0;
        for (int i = 0; i < myString.length(); i++) {
            char currentChar = myString.charAt(i);
            if (currentChar == charToSearch) {
                total++;
            }
        }
        return total;
    }
}

Publicado por Jesus Almaral

Soy ingeniero en Mecatrónica con maestría en Machine Learning, tengo experiencia en lenguajes como Java, Kotlin, Matlab, Android, Python, etc. Actualmente soy desarrollador de aplicaciones móviles, me gusta la música y toco la guitarra, me gusta mucho saber cosas sobre el universo, leer y comer tacos. También me apasiona enseñar.

Deja una respuesta

Introduce tus datos o haz clic en un icono para iniciar sesión:

Logo de WordPress.com

Estás comentando usando tu cuenta de WordPress.com. Salir /  Cambiar )

Foto de Facebook

Estás comentando usando tu cuenta de Facebook. Salir /  Cambiar )

Conectando a %s

Este sitio usa Akismet para reducir el spam. Aprende cómo se procesan los datos de tus comentarios.

A %d blogueros les gusta esto: