Flutter -- ohne Dart geht nicht 1 -- Typed Untyped Final Const

Ein Flutter Programm zu erstellen, ohne sich näher mit Dart zu beschäftigen, ist nicht wirklich sinnvoll. Wer von Java / Javascript her kommt, kann das versuchen. Besser scheint mir aber, den "kleinen" Umweg zu gehen und sich mindestens rudimentär mit Dart zu beschäftigen.

Als erstes ist dabei wichtig, sich vor Augen zu führen, das Dart von Anfang an, als Sprache konzipiert wurde, die die Entwicklung von Webapplikationen erleichtern bzw möglich machen sollte. Sie steht deshalb oft im direkten Vergleich zu Java / Javascript. Es ist deshalb kein Wunder, das mit AngularDart ein Framework entstanden ist, welches genau dieses unterstützt. Bei der Flutter Programmierung ist noch interessant zu wissen, das im Debug Mode, der Code in einer Dart VM (Virtual Machine) läuft.

Typed oder Untyped ?


Wenn wir folgenden Code schreiben:

var frageZeichen = "Antwort";

Hier haben wir frageZeichen, als Variable vom Typ "var" deklariert und weisen ihr den Wert zu. Die Aufgabe einer solchen Deklaration ist es, der Entwicklungsumgebung die Möglichkeit zu geben, uns zu warnen, sollten wir einer Variablen, einen falschen Wert zu weisen. Wir können aber in unserem Fall das Beispiel ändern:

var frageZeichen = 3.21465655;

Beide Variablen Deklarationen werden werden keine Fehlermeldung hervorrufen, den var steht in diesem Zusammenhang für Variable, welcher Art auch immer.

int meineGrosseZahl = 20;
meineGrosseZahl = "Grossmutter";
print("$meineGrosseZahl");

Der Code oben wird eine Fehlermeldung der IDE provozieren. Die Variable meineGrosseZahl ist ja eigentlich für eine Zahl gedacht. Wichtig dabei ist zu wissen, das man ein Flutter Programm in zwei Modi laufen lassen kann: den Debug-Modus (er wird die Fehlermeldung anzeigen) und im "Production Mode" (er wird das Programm erstellen, obwohl hier eine unkorrekte Zuweisung erfolgt ist. Dies macht aber in meinen Augen keinen wirklichen Sinn. 

var frageZeichen ist also eine UNTYPED Variable

Im späteren Code einen Fehler zu finden der im Zusammenhang mit dieser Variable steht kann schwierig und Zeitaufwendig sein. Im übrigen wird der Typ var intern zum Typ dynamic umgesetzt. Diesen Typ sieht man jedoch selten in Codebeispielen.

int meineGrosseZahl ist eine TYPED Variable.
Unsere IDE (Entwicklungsumgebung) wird uns warnen, sollten wir versuchen dieser Variable etwas anderes, als eine Zahl zu zuweisen.

Final und Const


Nehmen wir noch einmal die Variable frageZeichen, ihr haben wir oben einen String (Zeichenkette) zugewiesen. Im Verlauf des Programmes können wir ihr einen neuen Wert zuweisen, z.b. einen anderen String oder eine andere Zahl etc. Es gibt aber Fälle, wo wir das explizit ausschließen möchten. Eine Variable soll den Wert, der ihr bei der Erstellung zugewiesen wurde behalten und wir wollen gewarnt werden, wenn wir im späteren Code versuchen ihn zu ändern.

final var frageZeichen = "Antwort";
frageZeichen = "keine Lösung";

Der Versuch frageZeichen den String "keine Lösung" zu zuweisen, wird eine Fehlermeldung provozieren. Selbst der Production Mode, wird hier stoppen.

const int meineGrosseZahl = 10;

Der Typ const ist ein naher Verwandter vom Typ final. Auch const steht hier für einen Typ Variable der nicht veränderbar ist. Der große Unterschied zu final ist, das die Vorgaben bei const strenger sind.
Der folgende Code zeigt den Unterschied:

int tageInDerWoche = 7;
final tageImJahr = tageInDerWoche*52;

const tageImJahr =tageInDerWoche*52;

Unsere ID wird den Code mit final ohne murren verarbeiten. Wir erstellen eine final Variable durch eine Berechnung. Würden wir anschließend versuchen dieser Variable einen neuen Wert zuzuweisen, bekommen wir einen Fehler. Die Zeile const generiert umgehend einen Fehler. Wir versuchen einer const Variablen einen Wert zuzuweisen, der durch eine Berechnung entsteht, welche eine veränderbare Variable enthält. Hier noch zwei Beispiele für zulässige const Konstruktionen:

const zahl = 60;
const neuezahl = zahl*10*2;

neuezahl ist deshalb zulässig, da zahl selbst eine definierte Konstante ist und *10*2 ein fest implemenierter Ausdruck ist, der während der Laufzeit des Programmes nicht mehr geändert werden kann, also auch konstant ist. Zum zweiten Teil dieser kleinen Serie geht es hier!

Zusammenfassung: Dart verarbeitet Variablen, die nicht einen Typ haben. Wenn man von dieser Möglichkeit Gebrauch macht, muss man sich bewusst sein, das die IDE dann weniger Möglichkeiten hat, Fehler oder Probleme aufzuzeigen. Auf der anderen Seite hat Dart die gängigen Variablen Typen "eingebaut", wie wir sie auch aus anderen Programmiersprachen kennen.




Kommentare

Beliebte Posts aus diesem Blog

Flutter -- ohne Dart geht es nicht 2 -- einfache Variablen Typen

Material Design in Flutter Teil 2

Dart Final Const