Skip to article frontmatterSkip to article content
Site not loading correctly?

This may be due to an incorrect BASE_URL configuration. See the MyST Documentation for reference.

0x6 - Restricciones sobre Programación Funcional

Universidad Nacional de Rio Negro - Sede Andina

Serie 0x6 - Restricciones sobre Programación Funcional

0x6000 - No usar expresiones lambda ni referencias a métodos

Explicación

Las expresiones lambda (->) y las referencias a métodos (::) no están permitidas en esta materia. Esta restricción te obliga a internalizar la sintaxis y el control de flujo explícito de Java.

Incorrecto ❌:

lista.forEach(elemento -> System.out.println(elemento));
nombres.stream().map(String::toUpperCase).collect(Collectors.toList());

Correcto ✅:

for (String elemento : lista) {
    System.out.println(elemento);
}

List<String> nombresMayusculas = new ArrayList<>();
for (String nombre : nombres) {
    nombresMayusculas.add(nombre.toUpperCase());
}
importan - Unknown Directive
Esta regla no aplica a los tests, ya que `assertThrows` es sumamente mas compacta y expresiva.

0x6001 - No usar la API de Streams ni Collectors

Explicación

La API java.util.stream y sus operaciones de reducción (Collectors, .sum(), etc.) abstraen los bucles. En esta etapa, es necesario usar bucles explícitos (for, while, for-each) para manejar el estado de las variables y comprender algorítmicamente las transformaciones de datos.

Incorrecto ❌:

int suma = numeros.stream()
    .filter(n -> n % 2 == 0)
    .mapToInt(Integer::intValue)
    .sum();

Correcto ✅:

int suma = 0;
for (Integer numero : numeros) {
    if (numero % 2 == 0) {
        suma = suma + numero;
    }
}

0x6002 - No usar métodos funcionales de colecciones ni encadenamiento

Explicación

Se agrupan aquí restricciones sobre métodos funcionales preexistentes en las colecciones de Java, tales como forEach(), removeIf(), replaceAll(), y el patrón de composición funcional o encadenamiento. Se deben usar iteradores explícitos o bucles tradicionales. Esto asegura la comprensión de cómo y en qué momento muta el estado.

Incorrecto ❌:

nombres.removeIf(n -> n.startsWith("A"));

Correcto ✅:

Iterator<String> it = nombres.iterator();
while (it.hasNext()) {
    if (it.next().startsWith("A")) {
        it.remove();
    }
}