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 i variabele |
x = 5; |
Expressie waarvan het type hetzelfde is als het type van de x variabele |
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 |
---|---|
|
|
Ten tweede kunnen we, als we willen, het resultaat van het evalueren van een uitdrukking negeren.
Code | Code waarbij we het resultaat negeren: |
---|---|
|
|
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-else
instructie:
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-else
instructie 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-else
instructie:
int age = 25;
int money = age > 30 ? 100 : 50;
Dus wat is beter om te gebruiken - een if-else
instructie 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");
GO TO FULL VERSION