Zahlen und Strings
void main() {
int a = 17, b = 5;
print('${a + b} ${a - b} ${a * b} ${a / b} ${a ~/ b} ${a % b}'); // ~/ : Ganzzahldivision
print('${-17 % 5} ${(-17).remainder(5)} ${2 * 3 + 4} ${a.isEven} ${a.isOdd}');
double d = 3.14159;
print('${d.round()} ${d.floor()} ${d.ceil()} ${d.toStringAsFixed(2)} ${d.truncate()}');
print('${int.parse('42') + 1} ${double.parse('2.5')} ${int.tryParse('x')} ${42.toString()}');
print('${10.compareTo(5)} ${(3.7).abs()} ${(-3).abs()} ${5.clamp(1, 3)} ${1e3} ${0.1 + 0.2}');
print('${a.toDouble()} ${d.toInt()} ${255.toRadixString(16)} ${int.parse('ff', radix: 16)}');
String s = 'Hallo Welt';
print('${s.length} ${s[0]} ${s.substring(0, 5)} ${s.toUpperCase()} ${s.toLowerCase()}');
print('${s.contains('Welt')} ${s.startsWith('Hal')} ${s.indexOf('W')} ${s.replaceAll('l', 'L')}');
print('${s.split(' ')} ${' trim '.trim()} ${'ab' * 3} ${'x'.padLeft(3, '0')} ${s.codeUnitAt(0)}');
print('${s.split('').reversed.join()} ${'a,b,,c'.split(',')}');
print('Zeile 1\nZeile 2\tTab \\ \$ ');
print(r'Roh: $kein\n Ersatz');
print('''Mehrzeiliger
String''');
StringBuffer sb = StringBuffer();
for (var i = 0; i < 3; i++) { sb.write('$i,'); }
print(sb.toString());
}22 12 85 3.4 3 2 3 -2 10 false true 3 3 4 3.14 3 43 2.5 null 42 1 3.7 3 3 1000.0 0.30000000000000004 17.0 3 ff 255 10 H Hallo HALLO WELT hallo welt true true 6 HaLLo WeLt [Hallo, Welt] trim ababab 00x 72 tleW ollaH [a, b, , c] Zeile 1 Zeile 2 Tab \ $ Roh: $kein\n Ersatz Mehrzeiliger String 0,1,2,
Null-Sicherheit
Typen sind standardmäßig nicht-nullable. Mit ? erlaubst du null. Der Compiler prüft deinen Umgang damit.
String? gibName(bool vorhanden) => vorhanden ? 'Mia' : null;
void main() {
String? n1 = gibName(true);
String? n2 = gibName(false);
print(n1?.length); // ?. : null statt Fehler
print(n2?.length);
print(n2 ?? 'Gast'); // ?? : Standardwert
n2 ??= 'gesetzt'; // ??= : nur zuweisen, wenn null
print(n2);
print(n1!.length); // ! : "ich weiß, dass es nicht null ist" (Laufzeitfehler möglich)
if (n1 != null) {
print(n1.toUpperCase()); // hier ist n1 automatisch nicht-null
}
List<int?> liste = [1, null, 3];
print(liste.whereType<int>().toList());
print(liste.map((e) => e ?? 0).toList());
int? zahl = int.tryParse('abc');
print(zahl == null ? 'keine Zahl' : 'Zahl $zahl');
late String spaeter; // wird später initialisiert
spaeter = 'jetzt gesetzt';
print(spaeter);
}3 null Gast gesetzt 3 MIA [1, 3] [1, 0, 3] keine Zahl jetzt gesetzt
Verzweigungen und Schleifen
void main() {
int punkte = 78;
if (punkte >= 90) {
print('sehr gut');
} else if (punkte >= 75) {
print('gut');
} else {
print('weiter üben');
}
print(punkte >= 50 ? 'bestanden' : 'durchgefallen');
int tag = 3;
switch (tag) {
case 1:
print('Montag');
case 2 || 3 || 4: // Dart 3: kein break nötig, Muster mit ||
print('Mitte der Woche');
default:
print('anderes');
}
String note = switch (punkte) { // switch-Ausdruck (Dart 3)
>= 90 => 'A',
>= 75 => 'B',
_ => 'C',
};
print(note);
for (var i = 1; i <= 3; i++) { print('i=$i'); }
for (final farbe in ['rot', 'grün', 'blau']) { print(farbe); }
var n = 3;
while (n > 0) { print(n); n--; }
do { n++; } while (n < 3);
print(n);
outer:
for (var i = 0; i < 3; i++) {
for (var j = 0; j < 3; j++) {
if (j == 2) continue outer;
if (i == 2) break outer;
print('$i$j');
}
}
var wert = 5;
assert(wert > 0, 'wert muss positiv sein'); // nur im Debug-Modus aktiv
}gut bestanden Mitte der Woche B i=1 i=2 i=3 rot grün blau 3 2 1 3 00 01 10 11
Merke
- Zahlen:
int,double;/ergibt double,~/Ganzzahldivision - Strings: Methoden wie
substring,split,replaceAll; Interpolation mit$ - Null-Sicherheit:
T?,?.,??,??=,!,late if,switch(mit Mustern, Ausdrucksform),for,for-in,while
Aufgabe
Schreibe FizzBuzz für 1 bis 30.