Kernbibliothek dart:core

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

  1. Vererbung: int und double erben von num
  2. Umwandlung String → Zahl: parse(); int unterstützt den Parameter radix zur Angabe der Zahlbasis
  3. Umwandlung Zahl → String:
  • toString(): einfache Umwandlung
  • toStringAsFixed(n): behält n Nachkommastellen bei
  • toStringAsPrecision(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

  1. encodeFull: kodiert nur Leerzeichen und ähnliche Zeichen, behält URL-Symbole / : ? &
  2. 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 UTC
  • Duration: 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 Objekts
  • Finalizer / NativeFinalizer: Führt einen Callback aus, wenn das Objekt freigegeben wird, um native Ressourcen freizugeben
  • Finalizable: Verhindert vorzeitiges Einsammeln durch den GC

Hauptbibliothek dart:core

Schreibe einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert