Variable - flutter-tutorial-de/dart-basics-tutorial GitHub Wiki

Table of Contents

Motivation für Variable

In der vorigen Aufgabe Dart-Eine-Programmiersprache#ein-formelrechner ist eine Wiederholung enthalten: 24*60*60 kommt doppelt vor. Das wollen wir nun ändern: Wir merken uns das Zwischenergebnis von 24*60*60 und verwenden es zur Berechnung der Jahressekunden:

void main() {
  var day = 24*60*60;
  var year = day * 365;
  print('Tag: $day Jahr: $year');
}
  • Wir definieren eine Variable, das ist nichts anderes als ein Platzhalter für einen Wert. Das geschieht mit dem Wort var und einem Namen, hier day.
  • der Variablen namens day weisen wir einen Wert zu, hier das Ergebnis der Formel 24*60*60: var day = 24*60*60;
  • Jetzt können wir statt der Formel die Variable verwenden und benutzen die für die Berechnung der zweiten Variable: var year = day*365;
  • Wir können also die Variable day einfach in einer Formel verwenden. Der Compiler schaut nach, welchen Wert die Variable day hat und setzt diesen Wert in die Formel day * 365 ein.
  • Wir dürfen Variablen auch in einem Text verwenden und zwar mit einem vorausgehenden Dollarzeichen '$'. Daher funktioniert die Anweisung print('Tag: $day Jahr: $year');

Namenskonvention

  • Der Name einer Variablen beginnt mit einem Kleinbuchstaben.
  • Verwende wenn möglich ein Substantiv, z. B. eine Eigenschaft als Name: farbe = 'rot';
  • Setzt sich der Name aus mehreren Teilen zusammen, ist die "Kamelschreibweise" (camel case) üblich: Die Anfangsbuchstaben von Wörtern werden groß geschrieben. Beispiel: hintergrundFarbe

Variablentyp

Wir können den Wert einer Variable ändern, z. B. wenn ein Schaltjahr vorliegt:

void main() {
  var day = 24*60*60;
  var year = day * 365;
  print('Tag: $day Jahr: $year');
  year = year + day;
  print('Schaltjahr: $year');
}
  • Wir addieren zu year einfach noch einen Tag und weisen das Ergebnis der Variablen year zu.
  • Da die Variable year bereits existiert, darf nicht mehr das Schlüsselwort var davor stehen. Dies ist nur bei der jeweils ersten Verwendung einer Variablen, der sogenannten Definition, notwendig.
Da wir nun den Wert einer Variablen ändern können, probieren wir folgendes aus:
void main() {
  var day = 24*60*60;
  day = 'Tag';
}
Dartpad unterstreicht jetzt 'Tag', was einen Fehler anzeigt: Rechts unten steht die Fehlermeldung:
  • A value of type 'String' can't be assigned to a variable of type 'int' - line 7
  • Der Wert des Typs 'String' darf nicht einer Variablen mit Typ 'int' zugewiesen werden - Zeile 7
Wir haben der Variablen day zuerst eine Zahl zugewiesen, nämlich das Ergebnis der Formel 24*60*60. Dart ist eine "typisierte" Sprache, d. h. eine Variable darf ihren Datentyp nicht ändern. Das ist höchst sinnvoll, da damit viele Fehler schon vom Compiler und nicht erst beim Ausführen des Programms erkannt werden.

Dart kennt unter anderem folgende Datentypen:

  • int: Ganzzahlen, auch negativ
  • double: Kommazahlen
  • String: Texte
  • bool: Wahrheitswerte
void main() {
  var number = 4*3600+3*60+22;
  var pi = 3.1415926535;
  var text = 'number: $number pi: $pi';
  String text2;
  print(text);
  text2 = text + '!';
  print(text2);
}
  • number = 4*3600+3*60+22; ist eine Zuweisung: die Variable number bekommt den Wert 4*3600+3*60+22, also 14602.
  • Warum steht da eine Formel und nicht gleich das Ergebnis 14602? Weil das beispielsweise eine Umrechnung von Stunden, Minuten und Sekunden in Sekunden ist, was mit der Formel nachvollzogen werden kann. Und der Programmierer muss seinen Kopf nicht mit Kopfrechnen "belasten".
  • Der Compiler erkennt den Typ oft selbstständig: die Formel 33+2 ist die Summe von 2 Ganzzahlen, was wieder eine Ganzzahl ist.
  • Wenn der Typ nicht erkannt werden kann, dann darf nicht var bei der Definition der Variablen verwendet werden, sondern der Datentyp: String text2;
  • text2 = text + '!';: text2 wird aus dem Wert von Variable text und einem dahintergesetzten Ausrufezeichen berechnet. Näheres in Formel.
Hinweis: Es ist also ein Unterschied, ob var number = 3; oder var number = 3.0; dasteht. Im ersten Fall wird eine Variable mit Datentyp int, im zweiten Fall mit Datentyp double vereinbart.

Konstanten

Es gibt noch eine andere Art, einem Wert einen Namen zu geben, die Konstante. Im Unterschied zu einer Variablen hat eine Konstante einen festen Wert und kann vom Compiler berechnet werden.

Hinweis: Es gibt noch eine zweite Bedingung für "...vom Compiler berechnet werden kann", diese wird jedoch später erklärt.

Syntax

const name = wert ;

  • Klassisches Beispiel ist für eine Konstante ist die mathematische Kreiszahl Pi.
void main(){
  const pi = 3.14159265;
  print('pi: $pi');
}

Finale Variablen

Dart kennt einen häufig vorkommenden Sonderfall von Variablen, nämlich unveränderliche. Ein Zwischenergebnis ist ein typisches Beispiel. Eine unveränderlichen Variable wird mit final statt var gekennzeichnet.

Eine final-Variable muss immer initialisiert werden, etwa mit final x = 12;. Dagegen führt final String x; zu einem Fehler.

Hintergrund: Wenn der Compiler weiß, dass sich die Variable nicht ändern wird, kann er besser optimieren. Für Spezialisten: Der Wert kann in einem Register gehalten werden, ohne dass das Register am Ende zurückgeschrieben werden muss.

Da optimierte Programme schneller sind als nicht optimierte, gewöhnen wir uns von Anfang an, wo immer möglich final zu verwenden.

Also hier das obige Beispiel in verbesserter Form:

void main() {
  final number = 4*3600+3*60+22;
  const pi = 3.1415926535;
  final text = 'number: $number pi: $pi';
  String text2;
  print(text);
  text2 = text + '!';
  print(text2);
}

Weiter geht es mit Kapitel Schleife.
⚠️ **GitHub.com Fallback** ⚠️