Dart Final Const

Der Einsatz von  Final und Const in Dart ist nicht ganz einfach zu verstehen. Beide Schlüsselwörter deklarieren eine Variable, die explizit im Code initialisiert werden muss und im weiteren Verlauf nicht mehr veränderbar ist. Wir können zum Beispiel  deklarieren:  int zahl; .


Die Variable zahl ist nicht initialisiert und wird von Dart mit dem Wert null belegt. Das sollte man nicht mit 0 verwechseln. null lässt sich am besten mit "undefiniert" übersetzen und ist ein Sprachkonstrukt, welches sich innerhalb von Dart auch benutzen bzw abfragen lässt.
Im weiteren Verlauf des Programms können wir der Variable zahl werte zuweisen, sprich den Inhalt von zahl ändern. Bei final und const sieht das anders aus.


const


Beispiel Code:


Die erste Variable wird const int tage deklariert. Jeder Versuch sie im weiteren Programmverlauf zu ändern, wird eine Fehlermeldung hervorrufen. Die zweite Variable entsteht aus einer Berechnung, wobei die erste mit einbezogen wird. Das ist zulässig und ermöglicht uns im Code Konstanten zu generieren. Man beachte das diese Generierung mit der const Variable tage und dem fixen Wert 2 vollzogen wird. const deklariert eine "compile time" Variable d.h. wenn das Programm erstellt wird, werden const Variablen und generierte const Variablen, zu nicht veränderbaren Werten. Die Folge ist das man keine Konstanten aus Werten generieren kann, die während der Laufzeit des Programms eruiert werden und dementsprechend dynamisch ausfallen können.

final


final ist ein enger Verwandter von const. Der Name suggeriert schon das endgültige und dementsprechend ist er zu verwenden. Mit

final int alter = 150;

definieren wir einen nicht mehr änderbaren Wert. Auch eine final Variable kann während der "Compile Time" generiert werden. Dart intern ist eine final Variable auch immer eine const Variable.

Was ist aber nun der Unterschied zwischen const und final ?


Dart initialisiert final Variablen wenn auf sie zugegriffen wird. Damit ist gemeint, das Dart die final Variablen während der Laufzeit des Programmes initialisiert. Eine final Variable kann zum Beispiel eine Liste enthalten, die auch nach der Initialisierung verändert werden kann. const Variablen hingegen werden während der "Compile Time", der Erstellungszeit des Programms, initialisiert. Das heißt, selbst wenn man die const Variable während der Laufzeit des Programms nicht verwenden würde, wird sie in der "Compile Time" initialisiert und mit einem Speicherplatz versorgt.
Kurz und vereinfachend: const = ein "Compile Time" Variablentyp, final = ein "Laufzeit" Variablentyp.

Hier noch ein Beispiel Code zum Thema:

Wie man sieht kann man einer final Variable das Ergebnis einer Funktion zu weisen, das erst während der Laufzeit des Programms verfügbar ist. Der gleiche Versuch würde bei einer const Variable zu einer Fehlermeldung führen, da das Ergebnis der Funktion, ja währen der "Compile Time" noch nicht verfügbar ist. Wer mehr zum Thema wissen möchte, liest am besten diesen Artikel (englisch).

Kommentare

Beliebte Posts aus diesem Blog

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

Material Design in Flutter Teil 2