1. Ausdrücke vs. Aussagen
In Java ist es hilfreich, zwischen zwei Kategorien zu unterscheiden: Anweisungen und Ausdrücke . Eine Anweisung wird normalerweise ausgeführt , während ein Ausdruck ausgewertet wird . Aber das ist nicht das Wichtigste.
Der Hauptunterschied zwischen einer Anweisung und einem Ausdruck besteht darin, dass die Auswertung eines Ausdrucks ein Ergebnis hat . Und dieses Ergebnis hat einen Typ und kann einer Variablen zugewiesen oder in einem anderen Ausdruck verwendet werden.
Beispiele:
Code | Anmerkungen |
---|---|
int x; |
Stellungnahme |
(a < 10) |
Ausdruck, dessen Typ istboolean |
i++; |
i Ausdruck, dessen Typ mit dem Typ der Variablen übereinstimmt |
x = 5; |
x Ausdruck, dessen Typ mit dem Typ der Variablen übereinstimmt |
Und was bringt uns das?
Erstens können wir uns die Tatsache zunutze machen, dass viele Anweisungen tatsächlich Ausdrücke sind (das heißt, sie ergeben einen Wert). Code wie dieser funktioniert beispielsweise:
Code | Anmerkungen |
---|---|
|
|
Zweitens können wir, wenn wir möchten, das Ergebnis der Auswertung eines Ausdrucks ignorieren.
Code | Code, bei dem wir das Ergebnis ignorieren: |
---|---|
|
|
Wir ignorieren das Ergebnis der Auswertung eines Ausdrucks, wenn der Ausdruck beispielsweise eine sinnvolle Aktion beinhaltet und diese Aktion für uns wichtig ist, nicht das Ergebnis selbst.
2. Ternärer Operator
Dieser Life-Hack ist bereits interessanter als der vorherige. Java verfügt über einen speziellen ternären Operator . Seine Syntax ähnelt in gewisser Weise der Syntax der if-else
Anweisung:
Condition ? Expression 1 : Expression 2;
Wenn die Bedingung wahr ist, wird Ausdruck 1 ausgewertet, andernfalls wird Ausdruck 2 ausgewertet. Auf die Bedingung folgt ein Fragezeichen und die beiden Ausdrücke werden durch einen Doppelpunkt getrennt .
Der Hauptunterschied zwischen dem ternären Operator und einer if-else
Anweisung besteht darin, dass der ternäre Operator ein Ausdruck ist, was bedeutet, dass wir sein Ergebnis etwas zuweisen können.
Angenommen, wir möchten das Minimum zweier Zahlen berechnen. Mit dem ternären Operator würde dieser Code so aussehen:
int a = 2;
int b = 3;
int min = a < b ? a : b;
Oder nehmen wir an, Sie müssen einer Variablen abhängig von einer Bedingung unterschiedliche Werte zuweisen. Wie machst du das?
if-else
Eine Möglichkeit besteht darin, eine Anweisung zu verwenden :
int age = 25;
int money;
if (age > 30)
money = 100;
else
money = 50;
Die zweite Möglichkeit besteht darin, den ternären Operator zu verwenden , also die Abkürzung für die if-else
Anweisung:
int age = 25;
int money = age > 30 ? 100 : 50;
Was ist also besser zu verwenden – eine if-else
Anweisung oder der ternäre Operator ? Bezüglich der Ausführungsgeschwindigkeit gibt es keinen großen Unterschied. Dies ist eher eine Frage der Lesbarkeit des Codes. Und das ist ein ganz wichtiger Punkt: Der Code muss nicht nur korrekt funktionieren, sondern auch für andere Programmierer leicht lesbar sein.
Die einfachste Regel lautet: Wenn der Code in eine Zeile passt , verwenden Sie den ternären Operator . aber wenn es nicht in eine Zeile passt, ist es besser, eine if-else
Anweisung zu verwenden.
3. Vergleich reeller Zahlen
Wie bereits erwähnt, können Sie nicht einfach echte Zahlen nehmen und diese vergleichen. Es besteht immer die Möglichkeit, dass einige wichtige Ziffern verworfen werden, was zu unerwarteten Nebenwirkungen führen kann.
Deshalb gibt es einen bewährten Ansatz. Wenn sich zwei reelle Zahlen um einen sehr kleinen Wert unterscheiden, können sie als gleich betrachtet werden. Beispiel:
double a = 1.000001;
double b = 1.000002;
if ( (b - a) < 0.0001 )
System.out.println("The numbers are equal");
else
System.out.println("The numbers are not equal");
Aber das ist noch nicht alles, worüber wir uns Sorgen machen müssen, denn die Differenz zwischen den Zahlen kann durchaus negativ ausfallen. Damit dieser Ansatz funktioniert, müssen Sie nicht nur die Differenz zwischen den Zahlen vergleichen, sondern auch den absoluten Wert der Differenz zwischen den Zahlen:|a-b|
Java verfügt über eine Methode zur Berechnung des Absolutwerts einer Zahl Math.abs()
:
int m = Math.abs(value);
Infolgedessen wird die korrigierte Version unseres obigen Beispiels so aussehen:
double a = 1.000001;
double b = 1.000002;
if ( Math.abs(b - a) < 0.0001 )
System.out.println("The numbers are equal");
else
System.out.println("The numbers are not equal");
GO TO FULL VERSION