Appearance
Kapitel 9: Spezielle Klassen und Eigenschaften
9.1 Aufzählungen (Enum)
Enum-Definition und Verwendung
dart
enum Farbe {
rot,
grün,
blau
}
void main() {
Farbe farbe = Farbe.rot;
if (farbe == Farbe.rot) {
print('Farbe ist rot');
}
// Alle Enum-Werte durchlaufen
for (Farbe f in Farbe.values) {
print(f);
}
}Enum-Anwendungsszenarien
- Statusbeurteilung
- Feste Optionen
9.2 Generics
Definition von Generics
dart
// Generische Klasse
class Behälter<T> {
T inhalt;
Behälter(this.inhalt);
T getInhalt() {
return inhalt;
}
}
void main() {
Behälter<String> stringBehälter = Behälter('Hallo');
print(stringBehälter.getInhalt());
Behälter<int> intBehälter = Behälter(123);
print(intBehälter.getInhalt());
}Generische Methoden
dart
T getFirst<T>(List<T> list) {
return list[0];
}
void main() {
print(getFirst([1, 2, 3])); // 1
print(getFirst(['a', 'b', 'c'])); // a
}Generische Einschränkungen
dart
// T muss von Comparable erben
T getMax<T extends Comparable>(T a, T b) {
return a.compareTo(b) > 0 ? a : b;
}9.3 Mixin
Mixin-Definition
dart
mixin Flugfähig {
void fliegen() {
print('Kann fliegen');
}
}
mixin Schwimmfähig {
void schwimmen() {
print('Kann schwimmen');
}
}
class Vogel with Flugfähig {}
class Ente with Flugfähig, Schwimmfähig {}
void main() {
Vogel vogel = Vogel();
vogel.fliegen();
Ente ente = Ente();
ente.fliegen();
ente.schwimmen();
}Mixin-Anwendungsszenarien
- Code-Wiederverwendung
- Vermeidung von Mehrfachvererbungskonflikten
9.4 Praxisbeispiel
dart
enum Status {
ausstehend,
inBearbeitung,
abgeschlossen
}
mixin Protokollierung {
void protokollieren(String nachricht) {
print('[' + DateTime.now().toString() + '] ' + nachricht);
}
}
class Aufgabe with Protokollierung {
String titel;
Status status;
Aufgabe(this.titel) : status = Status.ausstehend;
void starten() {
status = Status.inBearbeitung;
protokollieren('Aufgabe gestartet: ' + titel);
}
void abschließen() {
status = Status.abgeschlossen;
protokollieren('Aufgabe abgeschlossen: ' + titel);
}
}
void main() {
Aufgabe aufgabe = Aufgabe('Dart lernen');
aufgabe.starten();
aufgabe.abschließen();
}