74 lines
1.5 KiB
Markdown
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.
|