Dart Grundlagen

Dart Grundlagen

Was ist Dart?

Dart ist eine von Google entwickelte objektorientierte Programmiersprache. Obwohl technisch nicht eingeschränkt, wird es hauptsächlich für die Erstellung von Frontend-Benutzeroberflächen für das Web (mit AngularDart oder Flutter for Web) und mobile Anwendungen (Flutter) verwendet.

Es befindet sich in aktiver Entwicklung, kompiliert zu nativem Maschinencode (wenn er für den Bau mobiler Anwendungen verwendet wird), inspiriert von modernen Funktionen anderer Programmiersprachen (hauptsächlich Java, JavaScript, C#) und stark typisiert.

Wie bereits erwähnt, ist Dart eine kompilierte Sprache. Das bedeutet, dass Ihr Code nicht so ausgeführt wird, wie Sie ihn schreiben, sondern ein Compiler parst + transformiert ihn (in Maschinencode).

Was sind “Typen”?

Nicht alle Programmiersprachen sind stark typisiert – aber Dart schon. Was bedeutet das aber?

Jeder Wert, den Sie in Ihrem Programm verwenden (z.B. einige Benutzereingaben, die Sie speichern), hat einen Typ – es könnte z.B. “Text” sein. In Dart (und in so ziemlich allen anderen Programmiersprachen) würde das allerdings nicht “text”, sondern “string” heißen.

Andererseits, wenn Sie mit dem Alter eines Benutzers arbeiten, können Sie eine Zahl ohne Nachkommastellen verwenden – einen sogenannten “Integer-Wert”. Zahlen mit Nachkommastellen werden als “Doubles” (oder “float” – in anderen Programmiersprachen) bezeichnet.

Dies sind einige Grundtypen – Dart hat aber weit mehr als diese Grundtypen. Sie werden im Laufe des Kurses viel mehr über diese (und alle anderen wichtigen) Typen erfahren.

Im Moment sind dies Typen, die Sie im Hinterkopf behalten sollten:

Zeichenkette => “Hallo” oder “Hallo” => Text, muss in Anführungszeichen in Ihrem Code eingeschlossen werden (Sie können doppelte oder einfache Anführungszeichen verwenden, nur konsistent sein, sobald Sie Ihre Wahl getroffen haben).

int => 20 oder -54 => Zahlen ohne Nachkommastellen

double => -3.99 oder 85.9421 => Zahlen mit Nachkommastellen

num => Der “übergeordnete Typ” von double und int. Du solltest es selten verwenden – sei genauer, welche Art von Wert du brauchst (int oder double), wenn möglich

Es ist auch wichtig zu beachten, dass JEDER Wert in Dart ein Objekt ist. Mehr dazu erfahren Sie weiter unten (=> “Was bedeutet “Objektorientiert”?”).

Variablen & Funktionen

In Ihren Programmen müssen Sie in der Regel einige Werte speichern. Nicht unbedingt in einer Datenbank oder in einer Datei, sondern im Speicher. Möglicherweise müssen Sie ein Zwischenergebnis, die Eingabe eines Benutzers vor der Verarbeitung oder Informationen über Ihr Flutter-Widget speichern (z.B. “Soll es aktuell auf dem Bildschirm angezeigt werden?”).

Diese Informationen (=Werte) speichern Sie in sogenannten Variablen.

Variablen sind Datencontainer – sie haben Namen und Speicherwerte jeglicher Art.

Zum Beispiel:

var myAge = 30;

ist eine Variable, die eine ganze Zahl (int) des Wertes 30 speichert.

Das Schlüsselwort var teilt Dart mit, dass myAge eine Variable ist. Alternativ zu var können Sie auch den Typnamen verwenden – zusätzlich zur Information von Dart über die Variable würden Sie dann auch “Dart informieren” über die Art der in der Variable gespeicherten Daten:

int myAge = 30;

Dart hat jedoch eine Funktion namens “Typ Inferenz”. Das bedeutet, dass Dart ziemlich klug ist, wenn es darum geht, Arten von Werten abzuleiten. Wenn Sie die Variable mit var erstellt haben, kann Dart immer noch ableiten, dass myAge vom Typ int ist, weil Sie die Variable mit einem ganzzahligen Wert initialisieren (d.h. Sie weisen von Anfang an einen Wert zu).

Aufgrund dieser eingebauten Typ-Inferenz gilt es als eine gute Praxis, den Typ NICHT explizit zu definieren, sondern stattdessen var bei der Definition von Variablen zu verwenden. Daher wäre dieser Ausschnitt zu bevorzugen:

var myAge = 30;

Das ändert sich, wenn Sie eine Variable ohne Initialwert anlegen – dann sollten Sie Dart darüber informieren, welche Art von Daten Sie dort speichern möchten:

in myAge;

myAge = 30;

Neben Variablen sind “Funktionen” ein weiteres Kernelement jeder Programmiersprache.

Funktionen ermöglichen es Ihnen, Code in “wiederverwendbare Code-Ausschnitte” “auszulagern”. Hier ist ein Beispiel:

var-Preis1 = 9,99;
var Preis2 = 10,99;
var total = Preis1 + Preis2;
var numOfRounds1 = 10;
var numOfRounds2 = 45;
var totalRounds = numberOfRounds1 + numberOfRounds2;

In diesem Beispiel haben wir die gleiche Logik, zwei Zahlen an zwei verschiedenen Stellen unseres Codes hinzuzufügen. Anstatt uns zu wiederholen, wäre es toll, diese Logik in eine Funktion zu bringen, die wir jederzeit und so oft aufrufen können, wie wir wollen. Hier ist der geänderte Ausschnitt mit einer Funktion:

num addNumbers(nummer n1, nummer n2) { // verwenden Sie nummer als Typ, da es mit int und double funktionieren sollte.
    Rückgabe n1 + n2;
}
var-Preis1 = 9,99;
var Preis2 = 10,99;
var total = addNumbers(price1, price2);
var numOfRounds1 = 10;
var numOfRounds2 = 45;
var totalRounds = addNumbers(numberOfRounds1, numberOfRounds2);

Auf den ersten Blick wurde dieser Code natürlich länger und komplexer. Aber der Vorteil ist, dass, wenn Sie jemals Ihre Additionslogik ändern müssen, Sie es an einer Stelle tun => Innerhalb der Funktion. Sie müssen nicht mehrere Stellen im Code bearbeiten, nur um das + in ein – zum Beispiel – zu ändern (wenn Sie das tun wollten).

Funktionen können Argumente annehmen (die Daten zwischen den (), die im Wesentlichen Variablen sind, die auf die Funktion zugeschnitten sind. “Scoping” bedeutet, dass Sie die Variablen nur innerhalb der Blockanweisung (= Funktionsteil, der Code zwischen den { }) verwenden können, wo Sie sie definiert haben.

Darüber hinaus können Funktionen auch Werte zurückgeben – wie das Ergebnis der Addition in diesem Beispiel.

Was bedeutet “Objektorientiert”?

Dart ist eine objektorientierte Programmiersprache – das bedeutet, dass jeder Wert in Dart ein Objekt ist. Auch eine einfache Zahl.

Was sind aber “Objekte”?

Objekte sind Datenstrukturen – man findet sie in vielen Programmiersprachen. In Dart ist jeder Wert ein Objekt, auch primitive Werte wie Text (= String) oder Zahlen (= ganze Zahlen und Doubles). Sie haben aber auch komplexere eingebaute Objekte (z.B. Datenlisten) und können eigene Objekte erstellen.

Häufig bauen Sie eigene Objekte, wenn Sie komplexere Beziehungen zwischen Daten ausdrücken wollen oder wenn Sie bestimmte Funktionen in “einem Baustein” kapseln wollen.

Objekte werden mit Hilfe von “Klassen” erstellt, da jedes Objekt einen Blueprint (=>die Klasse) benötigt, auf dessen Grundlage Sie es dann erstellen (“instanziieren”) können.

Hier ist ein Beispiel für eine Klassendefinition:

Klasse Person {
    var name ='Max';
    var Alter = 30;
 
    void greet() {) {
        print('Hallo, ich bin ' + Name + ' und ich bin ' + age.toString() + ' Jahre alt!';
    }
}

In diesem Beispiel definieren wir eine Personenklasse, die zwei Klassenvariablen (auch “Instanzfelder” oder “Eigenschaften” genannt) und eine Klassenfunktion (auch “Methode” genannt) enthält.

Wie du sehen kannst, verwenden wir auch Typen in Klassen – sowohl für Eigenschaften (Variablen) als auch für Methoden (Funktionen).

Sie können auch sehen, dass wir innerhalb der Greet-Methode ohne Probleme auf den Namen und das Alter der Klasseneigenschaften zugreifen können (age.toString() wird verwendet, um den ganzzahligen Wert in eine Zeichenkette umzuwandeln und ihn in einer längeren Zeichenkette auszugeben).

Die Klasse dient jedoch nur als Blaupause! Allein gibt er dir kein Objekt! Stattdessen können Sie nun Objekte anlegen, die auf dieser Klasse basieren:

Klasse Person {
    var name ='Max';
    var Alter = 30;
 
    void greet() {) {
        print('Hallo, ich bin ' + Name + ' und ich bin ' + age.toString() + ' Jahre alt!';
    }
}

void main() {) {
    var myself = Person();
    print(myself.name); // Verwenden Sie das ., um auf Klasseneigenschaften und Methoden zuzugreifen.
}

Als Nebenbemerkung: Die Hauptfunktion ist eine spezielle Funktion in Dart – es ist die Funktion, die Dart zuerst ausführen wird, wenn Ihre App startet.

Innerhalb von main erstellen wir dann ein neues Objekt basierend auf Person mit Person(). Dieser Prozess wird “Instanziierung der Klasse” genannt, daher erstellen wir “eine Instanz von Person”.

Der Typ von mir selbst wäre dann Person, weil Klassen immer auch als Typen fungieren!

Über den Autor: Frank
Ich betreibe seit 20 Jahren verschiedene Webseiten.

Machen Sie mit!

Verbinden Sie sich!
Komm und trete unserer Community bei. Erweitern Sie Ihr Netzwerk und lernen Sie neue Leute kennen!

Kommentare

Noch keine Kommentare