Programmieren_2/lambdas.md

74 lines
1.5 KiB
Markdown

<!--
title: Lambdas
description: Folien für Lambdas in Programmieren 2
url: https://git.henriburau.de/tutorien/programmieren-2
header: Programmieren 2 **Tutorium**
footer: Henri Burau
-->
# 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
```java
_zaehlerUI.gibErhoeheButton().setOnAction(event -> {
_zaehler.zaehleHoch();
informiereUeberAenderung();
});
```
Anonyme innere Klasse
```java
_zaehlerUI.gibErhoeheButton().setOnAction(new EventHandler<ActionEvent>() {
@Override
public void handle(ActionEvent event) {
_zaehler.zaehleHoch();
informiereUeberAenderung();
}
});
```
---
# Beispiel
```java
// 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
```java
@FunctionalInterface
public interface Filter<T> {
bool istGueltig(T obj);
}
```
```java
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.