One-minute shot: Clousure 🐙 in Java

Massin Laa.
2 min readJan 11, 2024

--

Una clase existe solo en el código fuente y no existe durante el tiempo de ejecución. Durante el tiempo de ejecución solo hay objetos del tipo clase (dicho de otra manera; “instancias”).
Un “closure” es una función que ha sido definida dentro del cuerpo de otra función externa (en el código fuente) y que tiene acceso a las variables locales de esa función en la cual fue creada.

Para que se pueda entender de forma abstracta, lo explico como una analogía de la pelicula Alien.

Imagina que el alien hospedador (función interna, Clousure) estuviese dentro del cuerpo de un humano (función externa), el cual recibe recursos del mundo exterior (parámetros) y del propio cuerpo humano (atributos locales, función externa). Cuando el alien escapa del cuerpo humano (return) se libera.

Ejemplo ilustrado
// Interfaz funcional para representar una criatura alienígena
public interface Alien {
public void showFeatures();
}

// Función principal que crea criaturas alienígenas
public class ManagementCreatures {

public static Alien humanBody(Object resources) {
List<String> organs = new ArrayList<>();
organs.add("heart");
organs.add("lung");

// Expresión lambda que actúa como un closure
return () -> {
System.out.println("Alien Creature: xenomorph");
System.out.println("Human resources: " + resources.toString());
System.out.println("Alien food: " + organs.toString());
System.out.println("Number of claws: x4");
};
}

public static void main(String[] args) {
// Crear una criatura llamada "Xenomorph" con 4 garras
Alien xenomorph = humanBody("Oxygen");

// Mostrar las características de la criatura
xenomorph.showFeatures();
}
}

--

--

Massin Laa.

Bienvenid@!! Aquí escribo todo lo que voy aprendiendo y resumen de algunas de mis notas