Programmieren_2/lambdas.md

1.5 KiB

Lambdas


Grundlagen

Erlauben das Implementieren von Interfaces mit nur einer Methode.

Klassischerweise wurde dieses Problem mithilfe von anonymen inneren Klassen gelöst. Lambda-Ausdrücke sparen im Vergleich dazu deutlich an Code.


Beispiel

Lambda

_zaehlerUI.gibErhoeheButton().setOnAction(event -> {
    _zaehler.zaehleHoch();
    informiereUeberAenderung();
  });

Anonyme innere Klasse

_zaehlerUI.gibErhoeheButton().setOnAction(new EventHandler<ActionEvent>() {	
    @Override
    public void handle(ActionEvent event) {
        _zaehler.zaehleHoch();
        informiereUeberAenderung();
    }
});

Beispiel

// Lambda ohne explizite Typen und return (type inference)
x -> x * 2

// Lambda mit explitizen Typen der formalen Parameter
(int x, int y) -> x + y

// Lambda mit return
(int x, int y) -> { return x * y + 2  }

Deklaration

@FunctionalInterface
public interface Filter<T> {
    bool istGueltig(T obj);
}
Filter<String> langGenug = (String text) -> text.length() > 10;

Aufgabe

  1. Die Klasse ZaehlerWerkzeug nutzt das Interface Observer um Änderungen von Subwerkzeugen zu erhalten. ZaehlerWerkzeug registriert sich mithilfe von anonymen inneren Klassen. Baue das System der Observer um, sodass Lambdas genutzt werden.