Sobes.tech
Junior

Habla sobre las expresiones lambda y los métodos de referencia en el contexto de la programación en Java y su aplicación en el desarrollo de Android.

sobes.tech AI

Respuesta de la IA

Las expresiones lambda son una notación concisa para crear funciones anónimas. Permiten pasar funcionalidad como argumento a un método o crear una función sin especificar su nombre. Sintaxis: (parámetros) -> { cuerpo }. Se utilizan para implementar interfaces con un solo método abstracto (interfaces funcionales).

Aplicación en Android:

  • Manejadores de eventos (clics, eventos táctiles).
  • Implementación de interfaces de oyentes (por ejemplo, OnClickListener, OnCompleteListener).
  • Trabajo con la API Stream para procesar colecciones (filtrado, transformación).
// Antes de Java 8
button.setOnClickListener(new View.OnClickListener() {
    @Override
    public void onClick(View v) {
        Toast.makeText(context, "¡Clickeado!", Toast.LENGTH_SHORT).show();
    }
});

// Usando expresión lambda
button.setOnClickListener(v -> {
    Toast.makeText(context, "¡Clickeado!", Toast.LENGTH_SHORT).show();
});

Los métodos de referencia son una forma más concisa de referirse a métodos o constructores existentes sin ejecutarlos. Se usan para reemplazar expresiones lambda que simplemente llaman a un método.

Tipos de métodos de referencia:

  • Referencia a método estático: Clase::nombreMétodoEstático
  • Referencia a método de instancia de un objeto: objeto::nombreMétodo
  • Referencia a método de instancia de un tipo arbitrario: Tipo::nombreMétodo
  • Referencia a constructor: Clase::new

Aplicación en Android:

  • Acortar expresiones lambda al trabajar con oyentes.
  • En la API Stream para aplicar métodos a los elementos del stream.
// Expresión lambda
List<String> nombres = Arrays.asList("Alice", "Bob");
nombres.forEach(nombre -> System.out.println(nombre));

// Método referencia
nombres.forEach(System.out::println);

Ventajas:

  • Mejor legibilidad del código, especialmente en operaciones simples.
  • Código más compacto.
  • El uso en la API Stream hace que el procesamiento de colecciones sea más funcional y eficiente.