Die Bibliothek dart:core ist die zentrale Standardbibliothek von Dart. Sie wird implizit und automatisch importiert und stellt grundlegende Kernfunktionen der Sprache bereit. Unten sind die wichtigsten Funktionen mit Codebeispielen nach Modulen gegliedert.
Das bedeutet: Entwickler müssen keinen Import-Befehl schreiben, die Bibliothek wird standardmäßig automatisch geladen.
I. Konsolenausgabe
Top-Level-Funktion print(): Ruft automatisch die Methode toString() des Objekts auf, um Text auszugeben.
void main() {
var tea = "milk tea";
print(tea);
print('I drink $tea.');
}Code-Sprache: Dart (dart)
II. Numerische Typen: num / int / double
- Vererbung:
intunddoubleerben vonnum - Umwandlung String → Zahl:
parse(); int unterstützt den Parameter radix zur Angabe der Zahlbasis - Umwandlung Zahl → String:
toString(): einfache UmwandlungtoStringAsFixed(n): behält n Nachkommastellen beitoStringAsPrecision(n): n signifikante Ziffern
void main() {
// String zu Zahl umwandeln
assert(int.parse('42') == 42);
assert(int.parse('42', radix:16) == 66);
assert(double.parse('0.5') == 0.5);
// Zahl zu String umwandeln
assert(123.456.toStringAsFixed(2) == '123.46');
assert(123.456.toStringAsPrecision(2) == '1.2e+2');
}Code-Sprache: Dart (dart)
III. Zeichenketten String & Reguläre Ausdrücke RegExp
- String-Objekte sind unveränderlich (alle ändernden Methoden geben eine neue Zeichenkette zurück); speichern UTF-16-Codeeinheiten
- Häufige Methoden: Suchen, Ausschneiden, Aufteilen, Groß-/Kleinschreibung, Leerzeichen entfernen
void main() {
var str = 'Never odd or even';
// Suche
assert(str.contains('odd'));
assert(str.startsWith('Never'));
assert(str.endsWith('even'));
assert(str.indexOf('odd') == 6);
// Ausschneiden & Aufteilen
assert(str.substring(6,9) == 'odd');
var parts = 'a b c'.split(' ');
// Leerzeichen entfernen & Leerprüfung
assert(' abc '.trim() == 'abc');
assert(''.isEmpty);
assert(' '.isNotEmpty);
// Groß-/Kleinschreibung
assert('dart'.toUpperCase() == 'DART');
// Für Zeichenkettenverkettung bevorzugt StringBuffer nutzen (höhere Leistung)
var sb = StringBuffer();
sb.write('Hello ');
sb.writeAll(['A','B','C'], ',');
print(sb.toString());
}Code-Sprache: Dart (dart)
Reguläre Ausdrücke RegExp
void main() {
var reg = RegExp(r'\d+'); // Aufeinanderfolgende Ziffern abgleichen
var text = 'llamas live 15 to 20 years';
assert(reg.hasMatch(text));
// Alle Treffer durchlaufen
for(var m in reg.allMatches(text)){
print(m.group(0));
}
// Ersetzen von Treffern
var res = text.replaceAll(reg, 'XX');
print(res);
}Code-Sprache: Dart (dart)
Hinweis: Eine Codeeinheit entspricht nicht immer einem sichtbaren Zeichen. Für komplexe Unicode-Zeichen (Emoji-Kombinationen) nutzen Sie das externe Paket
characters.
IV. Sammlungen (List / Set / Map)
1. List: geordnet, erlaubt Duplikate, Zugriff über Index
void main() {
var fruits = ['apple','orange'];
fruits.add('kiwi');
fruits.addAll(['grape']);
fruits.removeAt(0);
fruits.sort((a,b)=>a.compareTo(b)); // Elemente sortieren
// Generische Einschränkung
var strList = <String>[];
}Code-Sprache: Dart (dart)
2. Set: ungeordnet, eindeutige Elemente, kein Indexzugriff
void main() {
var set = <String>{};
set.addAll(['gold','xenon']);
set.add('gold'); // Hinzufügen eines Duplikats ohne Wirkung
assert(set.contains('xenon'));
// Schnittmenge berechnen
var set2 = Set.from(['xenon','argon']);
var inter = set.intersection(set2);
}Code-Sprache: Dart (dart)
3. Map: Sammlung von Schlüssel-Wert-Paaren; Schlüssel sind eindeutig
void main() {
var map = {54: 'xenon'};
print(map[54]);
assert(map.containsKey(54));
map.remove(54);
// Wert nur zuweisen, wenn Schlüssel nicht existiert
map.putIfAbsent('name', () => 'Dart');
// Einträge durchlaufen
map.forEach((k,v)=>print('$k:$v'));
}Code-Sprache: Dart (dart)
4. Generische Iterable-Operationen (List und Set implementieren Iterable)
Gängige Funktionen höherer Ordnung: forEach, map, where, any, every
void main() {
var list = ['green','black','chamomile'];
list.forEach(print);
// map arbeitet verzögert, toList löst sofort aus
var upperList = list.map((e)=>e.toUpperCase()).toList();
// Elemente filtern
var filter = list.where((e)=>e == 'chamomile');
assert(list.any((e)=>e == 'chamomile'));
assert(!list.every((e)=>e.contains('tea')));
}Code-Sprache: Dart (dart)
V. URI-Verarbeitung (Uri)
Dient zur Kodierung, Dekodierung, Auswertung und Erstellung von URLs
encodeFull: kodiert nur Leerzeichen und ähnliche Zeichen, behält URL-Symbole/ : ? &encodeComponent: maskiert alle Sonderzeichen (optimal für Parameterwerte)
void main() {
// URL parsen
var uri = Uri.parse('https://example.org:8080/foo?lang=dart#frag');
print(uri.scheme);
print(uri.host);
print(uri.queryParameters);
// URL erstellen
var newUri = Uri.https('example.org','/foo', {'lang':'dart'});
}Code-Sprache: Dart (dart)
VI. Datum & Uhrzeit DateTime & Duration
DateTime: Zeitpunkt, unterstützt Ortszeit und UTCDuration: Zeitintervall, zum Addieren/Subtrahieren von Zeitpunkten und Berechnen von Differenzen
void main() {
var now = DateTime.now();
var y2k = DateTime.utc(2000);
// Zeit addieren/subtrahieren
var nextYear = y2k.add(const Duration(days:366));
var diff = nextYear.difference(y2k);
print(diff.inDays);
// Zeitstempel (Millisekunden seit Unix-Epoche 1970-01-01 UTC)
print(y2k.millisecondsSinceEpoch);
}Code-Sprache: Dart (dart)
Achtung: Tagesbasierte Zeitverschiebungen können bei Sommer-/Winterzeit zu Fehlern führen. Nutzen Sie bevorzugt UTC-Zeit.
VII. Nützliche Basisschnittstellen und Klassen
1. Comparable: Ermöglicht den Vergleich von Objekten für Sortiervorgänge
class Line implements Comparable<Line> {
final int length;
const Line(this.length);
@override
int compareTo(Line other) => length - other.length;
}Code-Sprache: Dart (dart)
2. Eigene Schlüssel für Map: Überschreiben von == und hashCode
Regel: Gleiche Objekte müssen denselben hashCode besitzen
class Person {
final String first, last;
Person(this.first,this.last);
@override
int get hashCode => Object.hash(first, last);
@override
bool operator ==(Object other) =>
other is Person && other.first == first && other.last == other.last;
}Code-Sprache: Dart (dart)
- 3. Iterable + Iterator
Die Implementierung von Iterable erlaubt die Nutzung von for-in-Schleifen mit individueller Iterationslogik.
VIII. Ausnahmebehandlung
- Error: Schwerwiegender Fehler, normalerweise nicht abfangbar (z.B. NoSuchMethodError)
- Exception: Vorhersehbare Anomalie, die abgefangen werden kann; eigene Ausnahmen lassen sich definieren
class FooException implements Exception {
final String? msg;
const FooException([this.msg]);
@override
String toString() => msg ?? 'FooException';
}Code-Sprache: Dart (dart)
IX. Schwache Referenzen und Finalisierer
WeakReference: Schwache Referenz, hindert den Garbage Collector nicht an der Freigabe des ObjektsFinalizer / NativeFinalizer: Führt einen Callback aus, wenn das Objekt freigegeben wird, um native Ressourcen freizugebenFinalizable: Verhindert vorzeitiges Einsammeln durch den GC
Hauptbibliothek dart:core