Dart Eine Programmiersprache - flutter-tutorial-de/dart-basics-tutorial GitHub Wiki

Table of Contents

Programmiersprache

Eine Programmiersprache ist eine formale (im Gegensatz zu natürlicher) Sprache, die ein Problem beschreibt, das ein Rechner lösen soll. Diese Problembeschreibung ("Programmcode" oder "Programm") wird von einem "Compiler" gelesen und in eine dem Rechner verständliche Form ("Binärcode") umgesetzt.

Eine Programmiersprache ist also so ausgelegt, dass sowohl Menschen als auch Maschinen (mittels Compiler) den Inhalt "verstehen" können. Wegen der Maschinenlesbarkeit leiten sich strikte Regeln ab, die sogenannte "Syntax". Der Compiler prüft den Programmcode und gibt er einen Fehler aus, wenn gegen eine Regel verstoßen wird.

Formatfreiheit

Dart ist eine formatfreie Sprache, d. h. die Sprachelemente können beliebig auf verschiedene Zeilen verteilt und mit Leerzeichen ergänzt werden. Im Gegensatz dazu sind die Einrückungen bei der Programmiersprache Python Teil der Syntax.

Auf der anderen Seite gibt es ein Werkzeug, das ein Dart-Programm in eine "normierte" Form bringt, das sogenannte "Formatieren". Ich rate dringendst dazu, dieses Werkzeug zu benutzen und nicht Zeit mit eigenem Formatieren zu verschwenden!

Der Zeichensatz bei Namen

  • Werden in Dart Namen definiert, so sind nur folgende Zeichen zugelassen:
abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789_
  • Es dürfen also bei Namen keine Umlaute, keine Buchstaben mit Akzent, Leerzeichen oder Bindestriche verwendet werden.
  • Namen dürfen nicht mit einer Ziffer beginnen.

Empfohlene Vorgehensweise

Für das Tutorial gibt es ein Problem, das mit dem "Henne-Ei"-Problem verwandt ist:

  • Der Leser weiß zu wenig, um ein lauffähiges Programm zu erstellen.
  • Lauffähige Programme helfen dabei, Programmieren zu verstehen.
Daher meine Empfehlung: Dieses Tutorial zweimal durcharbeiten! Beim ersten Mal muss nicht alles verstanden werden. Konzentriere dich auf das, was erklärt wird. Und habe Spaß dabei, schnell die Fortschritte und das Ergebnis deiner Versuche zu sehen!

Beim zweiten Durchlauf sollte dann genug Wissen angesammelt sein um alles zu verstehen.

Das erste Programm

Für das erste Programm verwenden wir einen Browser mit der Adresse https://dartpad.dev. Öffne diese Adresse in einem zweiten Fenster des Browsers, damit du diese Anleitung und das Dartpad gleichzeitig auf dem Bildschirm sehen kannst.

  • Klicke rechts oben auf Samples, dann auf den Eintrag Hello World.
Es erscheint links das Programm:
void main() {
  for (var i = 0; i < 4; i++) {
    print('hello $i');
  }
}

Das änderst du bitte in:

void main() {
  print("Hi");
}
Danach auf den Button "Run" klicken. Es erscheint rechts:
Hi
Erklärung:
  • Jedes Dart-Programm muss die Definition einer Funktion main enthalten.
  • Eine Funktion hat einen Namen, hier "main" und einen "Rumpf", der mit "{" anfängt und mit "}" aufhört.
  • Der genaue Aufbau einer Funktion wird später erklärt.
  • Im Rumpf gibt es "Anweisungen", englisch "statements".
  • Unser Rumpf hat die Anweisung print("Hi");, die dafür sorgt, dass das, was zwischen den runden Klammern "(" sowie ")" steht, ausgegeben wird.
  • Der Compiler muss Programmcode von Texten unterscheiden können: Texte werden in Anführungszeichen gesetzt, entweder Gänsefüßchen " oder Apostrophe '.
  • print("Hi"); Diese Anweisung bedeutet: Gib den Text "Hi" aus. Wie du siehst, erscheinen die Anführungszeichen nicht in der Ausgabe, sie dienen nur dem Compiler als Hinweis, dass "Hi" ein Text ist.
  • Warum sind die Anführungszeichen nötig? Beispiel: Du willst ein komplettes Dartprogramm ausgeben, das folgendermaßen aussieht:
void main() {
 print("void main { print('Hallo'); }"); 
}
Wenn der Text nicht durch die Anführungszeichen geschützt wäre, würde der Compiler zweimal die Funktion main erkennen, was ein Fehler wäre. Jetzt wird auch klar, warum sowohl " als auch ' als Textbegrenzer (engl. "delimiter") verwendet werden dürfen: Kommt im Text " vor, verwenden wir ' als Textbegrenzer, kommt der Apostroph ' vor, verwenden wir " als Textbegrenzer!

Einschub: die Funktion main()

Ein Programm besteht im Allgemeinen aus mehreren Funktionen. Es stellt sich die Frage, mit welcher Funktion bei der Prgrammausführung angefangen werden soll.

Für Dart gilt: Der auszuführende Programmcode beginnt stets mit der Funktion main()!

Ein Formelrechner

Bitte ändere das vorige Programm um: (markiere den Programmtext mit der Maus, kopiere mit Strg-C und füge ihn im Dartpad ein mit Strg-V):

/* Dieses Programm demonstriert eine Art Taschenrechner:
Einfach die Formel hinter die Klammer von print() schreiben und ausführen.
*/
void main() {
  print(3.5*2+4*9-3/(36-30));
}
  • Zum Ausführen des Programms immer den Button "Run" drücken.
  • Anmerkung: Zahlen werden im Englischen mit Dezimalpunkt statt Dezimalkomma geschrieben, daher steht im Programmtext statt "3,5" die Zahl als "3.5" usw.
  • Am Anfang steht ein "Kommentar": Das ist Text, der vom Compiler ignoriert wird und nur zur Erklärung für den menschlichen Leser gedacht ist. Ein mehrzeiliger Kommentar beginnt mit /* und endet mit */.
  • Es gibt auch einzeilige Kommentare, die mit // beginnen und mit dem Zeilenende enden. Ein Beispiel folgt im nächsten Abschnitt.
  • Das Programm beherrscht die Regel "Punkt vor Strich" und berücksichtigt Klammern, im Beispiel 3/(36-30).
  • Das Ergebnis kannst du mit einem Taschenrechner überprüfen.
  • Denk dran: die äußeren runden Klammern sind Teil der Syntax der Anweisung print, dürfen also nicht weggelassen werden.

Aufgabe

Berechne, wie viel Sekunden ein Tag und ein normales Jahr (kein Schaltjahr) hat.

// Sekundenrechnungen:
void main() {
  print('Tag:');
  print(24*60*60);
  print('Jahr:');
  print(24*60*60*365);
}
  • Die erste Zeile ist ein einzeiliger Kommentar, sie wird vom Compiler ignoriert und dient nur der Lesbarkeit für den Menschen. Ein einzeiliger Kommentar beginnt mit // und endet mit dem Zeilenende.
  • Wir können nicht nur eine print-Anweisung geben, sondern auch mehrere hintereinander.
  • Wir geben abwechselnd einen Text und dann eine Zahl aus.
  • Die print-Anweisung fügt automatisch einen Zeilenwechsel ein.

Aufgaben

Berechne:

  • Wie groß ist das Volumen des Zimmers, in dem du bist, in m³.
  • Wieviel Tonnen Teer braucht eine Autobahnstrecke mit Länge 100 km, mit 2 Bahnen (hin und rück), 2 Fahrstreifen von je 4m und Standstreifen von 3 m, Fahrbahndicke 20 cm. Masse eines m³ Teer: 1.8 t
  • Wieviel Tonnen Bauholz kann man aus einem Wald entnehmen? Waldfläche: 10 * 5 km? Ein Baum hat die Dicke unten von 1 m, oben cm, Höhe 20 m, nutzbare Höhe: 10 m, Abstand zu Nachbarn: 5m, ein m³ Holz hat 0.9 t Masse, alle 30 Jahre soll der Wald erneuert werden.

Anweisungsblock

Syntax

{ anweisung1 anweisung2 ... }

  • Ein Anweisungsblock ist also eine Folge von Anweisungen, umrahmt von geschweiften Klammern.
  • Die Elemente eines Anweisungsblocks werden in der Reihenfolge abgearbeitet, in der sie notiert sind.
  • Die Funktion main enthält einen Anweisungsblock.
Hinweis: Ein Anweisungsblock kann auch eine einzelne Anweisung (dann ohne Klammern) sein. Viele Programmierer (und ich auch) befolgen die Konvention, immer die Klammervariante zu benutzen, auch wenn nur eine einzige Anweisung enthalten ist.

Der Grund dafür ist die geringere Verwechslungsgefahr und die leichte Änderbarkeit.

Weiter geht's mit dem Kapitel Variable.

⚠️ **GitHub.com Fallback** ⚠️