Arithmetische Operatoren in Dart

Grundlegende binäre arithmetische Operatoren

Dienen zur Berechnung zwischen zwei Zahlenwerten, es gibt insgesamt 7 Typen. Darunter fallen die vier Grundrechenarten, Ganzzahldivision, Restberechnung und der unäre Minusoperator.

OperatorBeschreibung der Funktion
+Addition
-Subtraktion
-AusdruckUnäres Minus (Vorzeichenwechsel, kehrt das Vorzeichen einer Zahl um)
*Multiplikation
/Normale Division, Ergebnis ist immer vom Typ double (Gleitkommazahl)
~/Ganzzahldivision, schneidet den Nachkommabereich ab und gibt einen int zurück
%Modulo (ermittelt den Rest der Ganzzahldivision)

Die Division hat im Vergleich zu anderen Programmiersprachen eine Besonderheit: Der Operator / liefert immer eine Gleitkommazahl. Wenn ein Ganzzahlergebnis benötigt wird, muss ~/ verwendet werden. Das ist ein wichtiger Hinweis für Leser mit Programmiererfahrung.

Code-Beispiel:

void main() {
        // Überprüfung von Addition, Subtraktion, Multiplikation, Division, Ganzzahldivision und Modulo
	print(2 + 3 == 5);
	print(2 - 3 == -1);
	print(2 * 3 == 6);
	print(5 / 2 == 2.5);  // Normale Division gibt double-Gleitkommazahl aus
	print(5 ~/ 2 == 2);   // Ganzzahldivision behält nur den ganzzahligen Teil (int)
	print(5 % 2 == 1);    // % Modulo-Operator liefert ausschließlich den Rest der Ganzzahldivision

	// Beispiel für String-Verkettung mit Quotient und Rest
	print('5/2 = ${5 ~/ 2} r ${5 % 2}' == '5/2 = 2 r 1');
}Code-Sprache: Dart (dart)

Bild mit dem Ausführungsergebnis

Inkrement / Dekrement Operatoren

Dart unterstützt zwei Varianten: Präfix und Postfix für Inkrement ++ und Dekrement --. Der entscheidende Unterschied: Wird die Variable zuerst verändert oder zuerst ihr ursprünglicher Wert verwendet?

OperatorAusführungslogikRückgabewert des Ausdrucks
++varVariable zuerst um 1 erhöhen, dann neuen Wert für Berechnungen nutzenNeuer Wert nach dem Inkrement
var++Ursprünglichen Variablenwert zuerst für Berechnung nutzen, danach Variable um 1 erhöhenUrsprungswert vor dem Inkrement
--varVariable zuerst um 1 verringern, dann neuen Wert für Berechnungen nutzenNeuer Wert nach dem Dekrement
var--Ursprünglichen Variablenwert zuerst für Berechnung nutzen, danach Variable um 1 verringernUrsprungswert vor dem Dekrement
void main() {
	int a;
	int b;

	// 1. Präfix-Inkrement ++a: Zuerst erhöhen, dann zuweisen
	a = 0;
	b = ++a;
	print(a == b); // a=1, b=1 → true

	// 2. Postfix-Inkrement a++: Zuerst alten Wert zuweisen, dann erhöhen
	a = 0;
	b = a++;
	print(a != b); // a=1, b=0 → true

	// 3. Präfix-Dekrement --a: Zuerst verringern, dann zuweisen
	a = 0;
	b = --a;
	print(a == b); // a=-1, b=-1 → true

	// 4. Postfix-Dekrement a--: Zuerst alten Wert zuweisen, dann verringern
	a = 0;
	b = a--;
	print(a != b); // a=-1, b=0 → true
}
Code-Sprache: PHP (php)

Alle Ausgaben im Beispiel ergeben true.

Wichtiger Hinweis: Die Position von ++ oder — (vor oder nach der Variable) führt in Ausdrücken zu unterschiedlichem Verhalten.

Bei alleiniger Verwendung, Beispiel:

int a = 1;
++a;

int b  = 1;
b++;

print(a);
print(b);Code-Sprache: PHP (php)

Der obige Code gibt am Ende für beide Variablen 2 aus.

D:\dartdemo\firstdart>dart run
Building package executable...
Built firstdart:firstdart.
2
2
Code-Sprache: CSS (css)

Dasselbe gilt für –: Die Variable wird am Ende stets um +1 oder -1 verändert.

Wenn ++ / — aber innerhalb einer Rechenformel vorkommt, Beispiel:

void main() {
  int a = 5;
  // Postfix: Zuerst mit dem Wert 5 rechnen, danach a auf 6 setzen
  int res1 = a++ * 2;
  print(res1); // 10
  print(a);  // 6

  int b= 5;
  // Präfix: Zuerst b auf 6 setzen, dann damit rechnen
  int res2 = ++b * 2;
  print(res2); // 12
  print(b); // 6
}Code-Sprache: PHP (php)

a und b haben am Ende beide den Wert 6, res1 und res2 liefern aber unterschiedliche Ergebnisse – nur durch die andere Position des ++.

Erklärung Postfix a++: Zuerst wird a*2=10 mit dem Wert a=5 berechnet, das Ergebnis an res1 übergeben, danach wird a um 1 auf 6 erhöht.

Beim Präfix ++b wird zuerst b um 1 auf 6 erhöht, anschließend die Rechnung 6*2=12 ausgeführt und an res2 zugewiesen.

Die Zeile int res1 = a++ * 2; lässt sich aufteilen in:

int res1 = a * 2;
a = a +1;

Die Zeile int res2 = ++b * 2; lässt sich aufteilen in:

b = b+1;
int res2 = b * 2;

Einfache Merkregel zum Merken:

Präfix zuerst ändern, Postfix zuerst verwenden;

Präfix gibt neuen Wert zurück, Postfix gibt alten Wert zurück.

Zusammenfassung

Präfix ++a / --a: Zuerst die Variable verändern, dann den veränderten Wert für Berechnungen oder Zuweisungen nutzen

Postfix a++ / a--: Zuerst den ursprünglichen Variablenwert für Berechnungen oder Zuweisungen nutzen, nach Abschluss der Operation die Variable verändern

Sie können die folgenden Beispiele ausprobieren:

void main() {
  int a = 0;
  int b = ++a; 
  // Schritt1: a = a + 1 → a wird 1
  // Schritt2: Den neuen Wert a (1) an b zuweisen
  print(a); // 1
  print(b); // 1
}
void main() {
  int a = 0;
  int b = a++;
  // Schritt1: Den alten Wert von a (0) an b zuweisen
  // Schritt2: Ausführen a = a + 1 → a wird 1
  print(a); // 1
  print(b); // 0
}
void main() {
  int a = 0;
  int b = --a;
  // Schritt1: a = a - 1 → a wird -1
  // Schritt2: Den neuen Wert a (-1) an b zuweisen
  print(a); // -1
  print(b); // -1
}
void main() {
  int a = 0;
  int b = a--;
  // Schritt1: Den alten Wert von a (0) an b zuweisen
  // Schritt2: Ausführen a = a - 1 → a wird -1
  print(a); // -1
  print(b); // 0
}

Das sind die einfachsten Beispiele für Präfix- und Postfix-Inkrement/Dekrement. Kompilieren und führen Sie den Code selbst aus, um den Unterschied zu erkennen.

Schreibe einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert