image: dart-logo.png

Dart (2011)

Lars Bak und Kaspar Lund

Dart, ent­wick­elt von Lars Bak und Kaspar Lund bei Google und erst­mals 2011 ver­öffent­licht, ist eine ob­jekt­orien­tierte Pro­gram­mier­spra­che, die für die Ent­wick­lung von Web- und mo­bi­len An­wen­dun­gen kon­zi­piert wur­de. Dart wird häufig in Verbindung mit dem Frame­work Flutter ver­wen­det, das es er­mög­licht, platt­form­über­grei­fen­de mobile An­wen­dun­gen mit einer einzigen Codebasis zu erstellen.

Bekannte Beispiele für An­wen­dun­gen, die mit Dart und Flutter ent­wick­elt wur­den, sind die mo­bi­len Apps Google Pay, Google Earth, Google Classroom und die App von Alibaba. Heutzutage ist Dart immer noch relevant, insbesondere in der mo­bi­len App-Ent­wick­lung, da Flutter eine wachsende Popularität genießt und eine ef­fi­zien­te und konsistente Ent­wick­lungserfahrung über verschiedene Plattformen hinweg bietet.

1. Hello, world!

Dart-Pro­gramme werden in Textdateien mit der Endung .dart geschrieben. Diese Da­tei­en werden anschließend von einem Compiler in ausführbare Da­tei­en übersetzt, die auf deinem Com­puter direkt ausgeführt werden können.

Stelle zuerst sicher, dass du keinen Ordner geöffnet hast. Um sicherzugehen, drücke einfach den Shortcut für »Ordner schließen«: StrgK und dann F. Dein Work­space sollte jetzt ungefähr so aussehen:

Quelltext schreiben

Klicke auf »New File« und wähle als Dateityp »Text File«.

Schreibe nun den folgenden Code in die Datei:

1
2
3
void main() {
    print('Hello, World!');
}

Da Visual Studio Code noch nicht weiß, dass es sich um Dart-Quelltext handelt, ist dein Programm momentan noch einfarbig, aber das wird sich gleich ändern. An dem weißen Punkt erkennst du, dass deine Änderungen noch nicht gespeichert sind.

Drücke nun StrgS, um die Datei zu speichern. Gib hello.dart ein – der vollständige Pfad zu deiner Datei lautet dann /workspace/hello.dart.

Sobald du die Datei gespeichert hast, wird sie automatisch als Dart-Datei erkannt und die Syntax wird hervorgehoben.

Programm ausführen

Um unser Programm auszuführen, müssen wir den Dart-Compiler aufrufen und ihm den Da­tei­na­men unseres Programms übergeben.

Öffne dazu ein Ter­mi­nal, indem du StrgJ drückst und gib folgenden Befehl ein:

dart run hello.dart
Du musst nicht den vollständigen Da­tei­na­men schreiben. Schreib einfach dart run he und drücke Tab, um den Da­tei­na­men automatisch zu hello.dart vervollständigen zu lassen. Du kannst danach ganz normal weiterschreiben.

Das Programm sollte die Nachricht Hello, World! im Ter­mi­nal ausgeben:

Was ist Telemetrie?

Telemetrie ist eine Funktion von Dart, die Informationen über die Ausführung des Programms sammelt und an Google sendet. Diese Informationen helfen den Entwicklern von Dart, die Spra­che zu verbessern. Um zu verhindern, dass Telemetrie-Daten gesendet werden, gib den folgenden Befehl wie angegeben ein:

dart --disable-analytics

Du solltest nun eine Bestätigung sehen, dass die Telemetrie deaktiviert wur­de:

Wenn wir das Programm erneut ausführen, sollte es die Nachricht Hello, World! ohne die Meldung zur Telemetrie ausgeben:

Dart kann Quelltext für viele verschiedene Plattformen kompilieren, z. B. für Web­an­wen­dun­gen, mobile Apps für Android und iOS (mit Flutter) und Desktopanwendungen unter Win­dows, Mac OS und Linux. In diesem Artikel probieren wir Dart auf der Kom­man­do­zei­le aus, aber du kannst Dart auch in anderen Umgebungen verwenden.

Fehler finden und beheben

Wenn du einen Fehler im Code machst, wird Ruby eine Fehlermeldung ausgeben. Versuche zum Beispiel, statt print das Wort prin zu schreiben:

prin('Hello, World!');

Speichere die Datei und führe das Programm erneut aus:

dart run hello.dart
Nutze die Pfeiltaste hoch , um den letzten Befehl erneut einzugeben. So kannst du schnell dein Programm testen, nachdem du es verändert hast.

Dart sollte eine Fehlermeldung ausgeben, die dir hilft, den Fehler zu finden:

Es lohnt sich, die Fehlermeldungen genau zu lesen, um den Fehler zu finden und zu beheben. Achte auf die Zeilennummer (in diesem Beispiel 2) und den Text, der dir sagt, was falsch ist. Denke daran, den Fehler wieder zu beheben, bevor du das nächste Beispiel ausprobierst.

2. Primfaktorzerlegung

Im zweiten Beispiel wollen wir eine Zahl in ihre Primfaktoren zerlegen. An diesem Beispiel kannst du sehen, wie man in Dart Be­nut­zer­ein­ga­ben verar­bei­tet und Schleifen ver­wen­det. Erstelle eine neue Datei mit StrgAltN und schreibe den folgenden Code hinein:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
import 'dart:io';

void main() {
  stdout.write('Enter a number: ');
  int number = int.parse(stdin.readLineSync()!);

  stdout.write('Prime factors of $number are: ');

  for (int i = 2; i <= number; i++) {
    while (number % i == 0) {
      stdout.write('$i ');
      number ~/= i;
    }
  }

  stdout.writeln();
}

Speichere die Datei unter dem Namen factor.dart und führe sie aus:

Das Programm hat die Zahl 123 in ihre Primfaktoren zerlegt und ausgegeben. Anders als andere Pro­gram­mier­spra­chen kann Dart auch die Zahl 3000000000 in Sekundenbruchteilen zerlegen. Auch mit einer sehr großen Zahl wie 123456789123456789 kommt das Programm problemlos zurecht. Falls du auf eine Zahl stoßen solltest, die so groß ist, dass das Programm sehr lange braucht, kannst du das Programm mit StrgC abbrechen.

3. Bubblesort

Im dritten Beispiel wollen wir eine Liste von 10 Zufallszahlen sortieren. Dafür verwenden wir den Bubblesort-Al­go­rith­mus, der zwar nicht besonders effizient ist, aber sehr einfach zu verstehen und zu implementieren. Der Bubblesort-Al­go­rith­mus funktioniert, indem er die Liste mehrmals durchläuft und benachbarte Elemente vertauscht, wenn sie in der falschen Reihenfolge sind.

An diesem Beispiel kannst du sehen, wie man in Dart Listen ver­wen­det, Funk­tio­nen ver­wen­det und Schleifen verschachtelt.

Erstelle eine neue Datei und schreibe den folgenden Code hinein:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
import 'dart:math';

void main() {
  List<int> numbers = generateRandomNumbers(10);
  print('Original array: $numbers');

  bubbleSort(numbers);
  print('Sorted array: $numbers');
}

List<int> generateRandomNumbers(int count) {
  Random random = Random();
  List<int> numbers = [];

  for (int i = 0; i < count; i++) {
    numbers.add(random.nextInt(100));
  }

  return numbers;
}

void bubbleSort(List<int> numbers) {
  int n = numbers.length;

  for (int i = 0; i < n - 1; i++) {
    for (int j = 0; j < n - i - 1; j++) {
      if (numbers[j] > numbers[j + 1]) {
        int temp = numbers[j];
        numbers[j] = numbers[j + 1];
        numbers[j + 1] = temp;
      }
    }
  }
}

Speichere das Skript unter dem Namen bubblesort.dart und führe es aus:

Das Programm hat eine Liste von 10 Zufallszahlen sortiert. Versuche, den Quelltext so zu verändern, dass statt 10 Zahlen 100 oder mehr Zahlen sortiert werden.

4. Zusammenfassung

In diesem Kapitel hast du an drei Beispielen gesehen, wie man ein einfaches Dart-Programm schreiben und ausführen kann. Das ist natürlich nur ein erster Eindruck. Um Dart wirklich zu beherrschen, musst du noch viel mehr lernen – am besten, indem du eigene Skripte schreibst und ausprobierst. Die Buchhandlungen, Bib­lio­theken und Youtube sind voll von Material für dich. Viel Spaß beim Pro­gram­mier­en!