1. Uitdrukkingen versus uitspraken

In Java is het handig om onderscheid te maken tussen twee categorieën: statements en expressions . Van een statement wordt meestal gezegd dat het wordt uitgevoerd , terwijl van een uitdrukking wordt gezegd dat het wordt geëvalueerd . Maar dat is niet het belangrijkste.

Het belangrijkste verschil tussen een statement en een uitdrukking is dat het evalueren van een uitdrukking een resultaat heeft . En dit resultaat heeft een type en kan worden toegewezen aan een variabele of in een andere uitdrukking worden gebruikt.

Voorbeelden:

Code Notities
int x; Stelling
(a < 10) Expressie waarvan het type isboolean
i++; Expressie waarvan het type hetzelfde is als het type van de ivariabele
x = 5; Expressie waarvan het type hetzelfde is als het type van de xvariabele

En wat levert dit ons op?

Ten eerste kunnen we profiteren van het feit dat veel uitspraken eigenlijk uitdrukkingen zijn (wat betekent dat ze resulteren in een waarde). Code zoals deze zal bijvoorbeeld werken:

Code Notities
int x, y, z;
x = y = z = 1;
int x, y, z;
x = (y = (z = 1))

Ten tweede kunnen we, als we willen, het resultaat van het evalueren van een uitdrukking negeren.

Code Code waarbij we het resultaat negeren:
int x = scanner.nextInt();
boolean m = (5 < 10);
scanner.nextInt();
(5 < 10);

We negeren het resultaat van het evalueren van een uitdrukking, bijvoorbeeld als de uitdrukking betrekking heeft op het doen van iets nuttigs, en deze actie is wat belangrijk voor ons is, niet het resultaat zelf.


2. Ternaire operator

Deze lifehack is al interessanter dan de vorige. Java heeft een speciale ternaire operator . De syntaxis is enigszins vergelijkbaar met de syntaxis voor de if-elseinstructie:

Condition ? Expression 1 : Expression 2;

Als de voorwaarde waar is, wordt uitdrukking 1 geëvalueerd, anders wordt uitdrukking 2 geëvalueerd. De voorwaarde wordt gevolgd door een vraagteken en de twee uitdrukkingen worden gescheiden door een dubbele punt .

Het belangrijkste verschil tussen de ternaire operator en een if-elseinstructie is dat de ternaire operator een uitdrukking is, wat betekent dat we het resultaat ergens aan kunnen toewijzen.

Stel dat we het minimum van twee getallen willen berekenen. Met behulp van de ternaire operator zou deze code er als volgt uitzien:

int a = 2;
int b = 3;
int min = a < b ?  a : b;

Of laten we zeggen dat u verschillende waarden aan een variabele moet toekennen, afhankelijk van een bepaalde voorwaarde. Hoe doe je dat?

Een optie is om een if-else​​statement te gebruiken:

int age = 25;
int money;
if (age > 30)
   money = 100;
else
   money = 50;

De tweede optie is om de ternaire operator te gebruiken , dat wil zeggen een afkorting voor de if-elseinstructie:

int age = 25;
int money = age > 30 ? 100 : 50;

Dus wat is beter om te gebruiken - een if-elseinstructie of de ternaire operator ? Qua uitvoeringssnelheid is er niet veel verschil. Dit is meer een kwestie van leesbaarheid van de code. En dit is een heel belangrijk punt: de code moet niet alleen correct werken, maar ook gemakkelijk leesbaar zijn voor andere programmeurs.

De eenvoudigste regel is deze: als de code op één regel past , gebruik dan de ternaire operator ; maar als het niet op één regel past, dan is het beter om een if-else​​statement te gebruiken.



3. Reële getallen vergelijken

Zoals eerder vermeld, kun je niet zomaar echte getallen pakken en ze vergelijken. Er is altijd de mogelijkheid dat enkele significante cijfers worden weggegooid, wat onverwachte bijwerkingen veroorzaakt.

Daarom is er een beproefde aanpak. Als twee reële getallen een zeer kleine waarde verschillen, kunnen ze als gelijk worden beschouwd. Voorbeeld:

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");

Maar dat is niet het enige waar we ons zorgen over hoeven te maken, aangezien het verschil tussen de cijfers heel goed negatief kan blijken te zijn. Dus om deze benadering te laten werken, moet je niet alleen het verschil tussen de getallen vergelijken, maar ook de absolute waarde van het verschil tussen de getallen:|a-b|

Java heeft een methode om de absolute waarde van een getal te berekenen Math.abs():

int m = Math.abs(value);

Als gevolg hiervan ziet de gecorrigeerde versie van ons bovenstaande voorbeeld er als volgt uit:

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");