1. Kifejezések vs állítások
Java-ban hasznos két kategória megkülönböztetése: utasítások és kifejezések . Egy utasítást általában végrehajtottnak mondanak , míg egy kifejezést kiértékeltnek . De nem ez a legfontosabb.
Az utasítás és a kifejezés közötti fő különbség az, hogy a kifejezés kiértékelésének eredménye van . És ennek az eredménynek van egy típusa, és hozzárendelhető egy változóhoz, vagy használható más kifejezésben.
Példák:
Kód | Megjegyzések |
---|---|
int x; |
Nyilatkozat |
(a < 10) |
Kifejezés, amelynek típusaboolean |
i++; |
Kifejezés, amelynek típusa megegyezik a i változó típusával |
x = 5; |
Kifejezés, amelynek típusa megegyezik a x változó típusával |
És mit ad ez nekünk?
Először is kihasználhatjuk azt a tényt, hogy sok állítás valójában kifejezés (vagyis értékre értékeli). Például egy ilyen kód működik:
Kód | Megjegyzések |
---|---|
|
|
Másodszor, ha akarjuk, figyelmen kívül hagyhatjuk egy kifejezés kiértékelésének eredményét.
Kód | Kód, ahol figyelmen kívül hagyjuk az eredményt: |
---|---|
|
|
Figyelmen kívül hagyjuk egy kifejezés kiértékelésének eredményét, például ha a kifejezés valami hasznos tevékenységet foglal magában, és ez a cselekvés a fontos számunkra, nem maga az eredmény.
2. Háromtagú operátor
Ez a life hack már érdekesebb, mint az előző. A Java speciális háromtagú operátorral rendelkezik . A szintaxisa némileg hasonló az utasítás szintaxisához if-else
:
Condition ? Expression 1 : Expression 2;
Ha a feltétel igaz, akkor az 1. kifejezés , ellenkező esetben a 2. kifejezés kerül kiértékelésre. A feltételt kérdőjel követi , a két kifejezést kettőspont választja el .
A fő különbség a háromtagú operátor és az if-else
utasítás között az, hogy a háromtagú operátor egy kifejezés, ami azt jelenti, hogy az eredményét hozzárendelhetjük valamihez.
Tegyük fel például, hogy ki akarjuk számítani a két szám minimumát. A háromtagú operátor használatával ez a kód így néz ki:
int a = 2;
int b = 3;
int min = a < b ? a : b;
Vagy tegyük fel, hogy valamilyen feltételtől függően különböző értékeket kell hozzárendelnie egy változóhoz. Hogyan csinálod, hogy?
if-else
Az egyik lehetőség egy utasítás használata :
int age = 25;
int money;
if (age > 30)
money = 100;
else
money = 50;
A második lehetőség a háromtagú operátor használata , azaz az if-else
utasítás rövidítése:
int age = 25;
int money = age > 30 ? 100 : 50;
Tehát melyiket érdemesebb használni – egy if-else
utasítást vagy a háromtagú operátort ? A végrehajtás sebességét tekintve nincs nagy különbség. Ez inkább kódolvashatóság kérdése. És ez egy nagyon fontos szempont: a kódnak nemcsak megfelelően kell működnie, hanem más programozók számára is könnyen olvashatónak kell lennie.
A legegyszerűbb szabály a következő: ha a kód egy sorban elfér , akkor használd a háromtagú operátort ; de ha nem fér el egy sorba, akkor jobb egy if-else
utasítást használni.
3. Valós számok összehasonlítása
Amint azt korábban említettük, nem lehet csak megragadni a valós számokat és összehasonlítani őket. Mindig fennáll annak a lehetősége, hogy néhány jelentős számjegyet eldobnak, ami váratlan mellékhatásokat okoz.
Ezért van egy jól bevált megközelítés. Ha két valós szám nagyon kis mértékben különbözik egymástól, akkor egyenlőnek tekinthetők. Példa:
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");
De nem csak emiatt kell aggódnunk, hiszen a számok közötti különbség negatív is lehet. Tehát ahhoz, hogy ez a megközelítés működjön, nemcsak a számok közötti különbséget kell összehasonlítani, hanem a számok közötti különbség abszolút értékét is:|a-b|
A Java rendelkezik egy módszerrel egy szám abszolút értékének kiszámítására: Math.abs()
:
int m = Math.abs(value);
Ennek eredményeként a fenti példánk javított változata így fog kinézni:
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