Funktionen
int addiere(int a, int b) => a + b; // Pfeilsyntax für Einzeiler
String gruss(String name, {String anrede = 'Hallo', int? alter}) { // benannte Parameter
var text = '$anrede, $name!';
if (alter != null) text += ' ($alter)';
return text;
}
int summe(List<int> zahlen, [int start = 0]) { // optionale Positionsparameter
var s = start;
for (final z in zahlen) { s += z; }
return s;
}
(int, int) minMax(List<int> liste) { // Record als Rückgabe (Dart 3)
return (liste.reduce((a, b) => a < b ? a : b), liste.reduce((a, b) => a > b ? a : b));
}
int fakultaet(int n) => n <= 1 ? 1 : n * fakultaet(n - 1);
Function(int) addierer(int n) => (x) => x + n; // Closure als Rückgabewert
void main() {
print(addiere(2, 3));
print(gruss('Mia'));
print(gruss('Tom', anrede: 'Hi', alter: 25));
print(summe([1, 2, 3]));
print(summe([1, 2, 3], 10));
final (kleinster, groesster) = minMax([4, 9, 1, 7]);
print('$kleinster $groesster');
print(fakultaet(10));
var plus5 = addierer(5);
print(plus5(10));
var verdopple = (int x) => x * 2; // anonyme Funktion
print([1, 2, 3].map(verdopple).toList());
print([1, 2, 3].map((e) => e * e).toList());
}Ausgabe
5 Hallo, Mia! Hi, Tom! (25) 6 16 1 9 3628800 15 [2, 4, 6] [1, 4, 9]
Listen
void main() {
var f = ['Apfel', 'Birne', 'Kirsche'];
f.add('Dattel');
f.insert(0, 'Ananas');
f.remove('Birne');
print('$f ${f.length} ${f.first} ${f.last} ${f[1]} ${f.indexOf('Kirsche')}');
print('${f.contains('Apfel')} ${f.sublist(1, 3)} ${f.reversed.toList()} ${f.join(', ')}');
var z = [5, 3, 9, 1, 7];
z.sort();
print(z);
z.sort((a, b) => b.compareTo(a));
print(z);
print('${z.reduce((a, b) => a + b)} ${z.fold(0, (s, x) => s + x)} ${z.where((x) => x > 4).toList()}');
print('${z.map((x) => x * 2).toList()} ${z.any((x) => x > 8)} ${z.every((x) => x > 0)}');
print('${z.take(2).toList()} ${z.skip(3).toList()} ${z.firstWhere((x) => x < 6)} ${z.indexWhere((x) => x == 3)}');
var mehr = [...z, 100]; // Spread-Operator
var bedingt = [1, if (z.isNotEmpty) 2, for (var i in [3, 4]) i * 10]; // collection if/for
print('$mehr $bedingt');
var matrix = [[1, 2], [3, 4]];
print('${matrix[1][0]} ${matrix.expand((r) => r).toList()}');
var festeListe = List<int>.filled(3, 0);
var generiert = List.generate(5, (i) => i * i);
print('$festeListe $generiert');
var unveraenderlich = List.unmodifiable([1, 2, 3]);
try { unveraenderlich.add(4); } catch (e) { print('Fehler: ${e.runtimeType}'); }
}Ausgabe
[Ananas, Apfel, Kirsche, Dattel] 4 Ananas Dattel Apfel 2 true [Apfel, Kirsche] [Dattel, Kirsche, Apfel, Ananas] Ananas, Apfel, Kirsche, Dattel [1, 3, 5, 7, 9] [9, 7, 5, 3, 1] 25 25 [9, 7, 5] [18, 14, 10, 6, 2] true true [9, 7] [3, 1] 5 3 [9, 7, 5, 3, 1, 100] [1, 2, 30, 40] 3 [1, 2, 3, 4] [0, 0, 0] [0, 1, 4, 9, 16] Fehler: UnsupportedError
Maps und Sets
void main() {
var alter = {'Mia': 17, 'Tom': 25};
alter['Zoe'] = 31;
alter.putIfAbsent('Ben', () => 9);
alter.remove('Tom');
print('${alter['Mia']} ${alter['Nix']} ${alter.length} ${alter.containsKey('Zoe')}');
alter.forEach((k, v) => print('$k => $v')); // Einfügereihenfolge bleibt erhalten
print('${alter.keys.toList()} ${alter.values.toList()}');
print(alter.map((k, v) => MapEntry(k.toUpperCase(), v + 1)));
print(Map.fromEntries(alter.entries.where((e) => e.value > 10)));
var zaehler = <String, int>{};
for (final w in 'a b a c a b'.split(' ')) {
zaehler[w] = (zaehler[w] ?? 0) + 1;
}
print(zaehler);
var sortiert = zaehler.entries.toList()..sort((a, b) => b.value.compareTo(a.value));
print(sortiert.map((e) => '${e.key}:${e.value}').join(' '));
var s = {3, 1, 2, 3, 1};
s.add(9);
print('${s.length} ${s.contains(2)} ${s.union({10})} ${s.intersection({1, 9, 7})} ${s.difference({1})}');
}Ausgabe
17 null 3 true
Mia => 17
Zoe => 31
Ben => 9
[Mia, Zoe, Ben] [17, 31, 9]
{MIA: 18, ZOE: 32, BEN: 10}
{Mia: 17, Zoe: 31}
{a: 3, b: 2, c: 1}
a:3 b:2 c:1
4 true {3, 1, 2, 9, 10} {1, 9} {3, 2, 9}Records und Muster (Dart 3)
void main() {
var person = (name: 'Mia', alter: 17); // benannter Record
var punkt = (3, 4); // positioneller Record
print('${person.name} ${person.alter} ${punkt.$1} ${punkt.$2}');
var (x, y) = punkt;
var (:name, :alter) = person;
print('$x $y $name $alter');
List<int> wert = [1, 2, 3];
switch (wert) {
case [var a, var b, var c]:
print('Liste mit drei Elementen: ${a + b + c}');
case [var a] when a > 10:
print('ein großes Element');
default:
print('anderes');
}
var json = {'name': 'Tom', 'tags': ['a', 'b']};
if (json case {'name': String n, 'tags': [var erstes, ...]}) {
print('$n $erstes');
}
}Ausgabe
Mia 17 3 4 3 4 Mia 17 Liste mit drei Elementen: 6 Tom a
Merke
- Funktionen: Pfeilsyntax
=>, benannte{...}und optionale[...]Parameter, Records als Mehrfachrückgabe List,Map,Setmit vielen Methoden (map,where,reduce,fold); Spread..., collectionif/for- Maps behalten die Einfügereihenfolge
- Records und Muster (Dart 3) zerlegen Daten elegant
Aufgabe
Zähle die Wörter eines Satzes mit einer Map und gib sie nach Häufigkeit sortiert aus.