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 iváltozó típusával
x = 5; Kifejezés, amelynek típusa megegyezik a xvá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
int x, y, z;
x = y = z = 1;
int x, y, z;
x = (y = (z = 1))

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:
int x = scanner.nextInt();
boolean m = (5 < 10);
scanner.nextInt();
(5 < 10);

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-elseutasí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-elseAz 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-elseutasítás rövidítése:

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

Tehát melyiket érdemesebb használni – egy if-elseutasí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-elseutasí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");