Un método es una colección de declaraciones que realizan alguna tarea específica y devuelven el resultado a la persona que llama. Un método puede realizar alguna tarea específica sin devolver nada. Los métodos nos permiten reutilizar el código sin volver a escribir el código. En Java, cada método debe ser parte de alguna clase que sea diferente de lenguajes como C, C++ y Python. En este artículo, entenderemos un tipo de funciones llamadas clausuras.
Antes de entrar en los cierres, primero comprendamos qué es una expresión lambda. Una expresión lambda básicamente expresa instancias de las interfaces funcionales (una interfaz con un único método abstracto se denomina interfaz funcional). Un ejemplo es java.lang.Runnable. Las expresiones lambda implementan la única función abstracta y, por lo tanto, implementan interfaces funcionales. Las expresiones lambda se agregan en Java 8 y brindan las siguientes funcionalidades:
- Habilite para tratar la funcionalidad como un argumento de método o el código como datos.
- Una función que se puede crear sin pertenecer a ninguna clase.
- Una expresión lambda puede transmitirse como si fuera un objeto y ejecutarse a pedido.
La principal limitación de la expresión lambda es que el alcance de las expresiones lambda solo será definitivo. Es decir, no podemos cambiar el valor de las variables en las expresiones lambda. Supongamos que definimos una expresión lambda en la que incrementamos el valor de una variable, simplemente arroja un error. Para solucionar este error se han definido los cierres.
Cierresson las expresiones valoradas de funciones en línea, lo que significa que son funciones de clase con variables limitadas. Los cierres se pueden pasar a otra función como parámetro. Una clausura nos da acceso a la función exterior desde una función interior. Pero a partir de Java 1.6, Java no se basa en cierres o Java no tiene cierres. Además, las clases internas anónimas no son cierres en Java. El uso de cierres ayuda en la privacidad de los datos y el curring (curring significa romper una función con muchos parámetros como varias funciones en un solo argumento). Aunque el concepto de cierre está mucho más definido en Javascript , los cierres aún se pueden implementar mediante expresiones lambda. La sintaxis para implementar un cierre es:
(argument_list) -> {func_body}
Ahora, comprendamos cómo implementar los cierres con ejemplos:
- Ejemplo 1: en este ejemplo, primero implementaremos una expresión lambda sin un parámetro o un argumento.
Java
// Java program to demonstrate // how a closure is implemented // using lambda expressions import java.io.*; // Defining an interface whose // implementation is given in // the lambda expression. // This uses the concept of // closures interface SalutationInterface { public String salHello(); } class GFG { // Driver code public static void main(String[] args) { // Lambda Expression SalutationInterface obj = () -> { return "Hello, GFGians!"; }; // Calling the above interface System.out.println(obj.salHello()); } }
Hello, GFGians!
- Ejemplo 2: En este ejemplo, entenderemos cómo implementar la expresión lambda que toma múltiples parámetros.
Java
// Java program to demonstrate // how a closure is implemented // using lambda expressions import java.io.*; // Defining an interface whose // implementation is given in // the lambda expression. // This uses the concept of // closures interface concatStrings { public String concat(String a, String b); } class GFG { // Driver code public static void main(String[] args) { // Lambda Expression concatStrings s = (s1, s2) -> s1 + s2; System.out.println( s.concat("Hello, ", "GFGians!")); } }
Hello, GFGians!
- Ejemplo 3: En este ejemplo, vamos a utilizar una interfaz funcional personalizada para mostrar el mes a partir del número proporcionado.
Java
// Java program to demonstrate // how a closure is implemented // using lambda expressions import java.io.*; // Defining an interface whose // implementation is given in // the lambda expression. // This uses the concept of // closures interface NumToMonth { public String convertToMonth(int x); } class GFG { // Driver code public static void main(String[] args) { // Lambda Expression NumToMonth obj = new NumToMonth() { String[] months = { "Jan", "Feb", "Mar", "Apr", "May", "Jun", "Jul", "Aug", "Sep", "Oct", "Nov", "Dec" }; public String convertToMonth(int n) { return (n > 0 && n <= months.length) ? months[n - 1] : null; }; }; System.out.println(obj.convertToMonth(8)); } }
Aug
Publicación traducida automáticamente
Artículo escrito por utkarsh_kumar y traducido por Barcelona Geeks. The original can be accessed here. Licence: CCBY-SA