1. Wyrażenia a polecenia
Wszystkie polecenia w Javie są podzielone na dwie kategorie: polecenia ( Instrukcja ) i wyrażenia ( Wyrażenie ). Zwykle mówi się, że polecenie jest wykonywane , a wyrażenie jest oceniane . Ale nie o to chodzi.
Główna różnica między poleceniem a wyrażeniem polega na tym, że wyrażenie ma wynik oceny . A ten wynik, po pierwsze, ma typ, a po drugie, ten wynik można gdzieś przypisać, no cóż, lub użyć w jakimś innym wyrażeniu.
Przykłady:
Kod | Notatki |
---|---|
int x; |
Zespół |
(a < 10) |
Wyrażenie, typboolean |
i++; |
Wyrażenie, typ jest taki sam jak typ zmienneji |
x = 5; |
Wyrażenie, typ jest taki sam jak typ zmiennejx |
A co nam to daje?
Po pierwsze, możemy wykorzystać fakt, że tak wiele poleceń jest w rzeczywistości wyrażeniami (mają wynik obliczenia). Na przykład ten kod będzie działał:
Kod | Notatki |
---|---|
|
|
Po drugie, jeśli chcemy, możemy zignorować wynik oceny wyrażenia.
Kod | Kod, w którym ignorujemy wynik: |
---|---|
|
|
Konieczne jest zignorowanie wyniku obliczenia wyrażenia, na przykład, jeśli wyrażenie oprócz wyniku robi coś jeszcze pożytecznego i ta czynność jest dla nas ważna, ale sam wynik nie.
2. Operator trójskładnikowy
Ten lifehack jest już bardziej interesujący niż poprzedni. Java ma specjalny trójskładnikowy (potrójny) operator . Pod pewnymi względami przypomina skróconą notację operatora if-else
:
Condition ? Expression 1 : Expression 2;
Jeśli warunek jest spełniony, wówczas wykonywane jest wyrażenie1 , w przeciwnym razie wykonywane jest wyrażenie2 . Po warunku następuje znak zapytania , a dwa wyrażenia są oddzielone dwukropkiem .
Główna różnica między operatorem trójskładnikowym a operatorem if-else
polega na tym, że operator trójskładnikowy jest wyrażeniem, co oznacza, że jego wynik można do czegoś przypisać.
Na przykład chcemy obliczyć minimum dwóch liczb. Używając operatora trójskładnikowego, ten kod wyglądałby tak:
int a = 2;
int b = 3;
int min = a < b ? a : b;
Lub powiedzmy, że musisz przypisać różne wartości do zmiennej w zależności od jakiegoś warunku. Jak to zrobić?
Pierwszą opcją jest użycie operatora if-else
:
int age = 25;
int money;
if (age > 30)
money = 100;
else
money = 50;
Drugą opcją jest użycie operatora trójskładnikowego , czyli skróconej notacji operatora if-else
:
int age = 25;
int money = age > 30 ? 100 : 50;
Którego więc lepiej użyć: operatora if-else
czy operatora trójskładnikowego ? Pod względem szybkości wykonania nie ma dużej różnicy. To bardziej kwestia czytelności kodu. I to jest bardzo ważny punkt: kod powinien nie tylko działać poprawnie, ale także być czytelny dla innych programistów.
Najprostszym kryterium może być to: jeśli kod mieści się w jednej linii - użyj operatora trójskładnikowego , jeśli nie mieści się już w jednej linii - lepiej użyć if-else
.
3. Porównanie liczb rzeczywistych
Jak wspomniano wcześniej, nie można po prostu porównywać liczb rzeczywistych: podczas pracy z nimi zawsze mogą wystąpić nieoczekiwane efekty, ponieważ niektóre cyfry znaczące są odrzucane.
Dlatego istnieje sprawdzone podejście. Jeśli dwie liczby rzeczywiste różnią się o bardzo małą wartość, można je uznać za równe. Przykład:
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");
Ale to nie wszystko: różnica liczb może równie dobrze okazać się liczbą ujemną. Dlatego, aby to podejście zadziałało, musisz porównać nie tylko różnicę liczb, ale także moduł różnicy liczb:|a-b|
Java ma specjalną metodę obliczania modułu liczby - Math.abs()
:
int m = Math.abs(value);
Tak więc poprawiona wersja naszego powyższego przykładu wyglądałaby tak:
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