1. Ungkapan vs pernyataan

Di Java, adalah berguna untuk membezakan antara dua kategori: pernyataan dan ungkapan . Sesuatu pernyataan biasanya dikatakan dilaksanakan , manakala ungkapan dikatakan dinilai . Tetapi itu bukan perkara yang paling penting.

Perbezaan utama antara pernyataan dan ungkapan ialah menilai ungkapan mempunyai hasil . Dan hasil ini mempunyai jenis, dan ia boleh diberikan kepada pembolehubah atau digunakan dalam beberapa ungkapan lain.

Contoh:

Kod Nota
int x; Kenyataan
(a < 10) Ungkapan yang jenisnyaboolean
i++; Ungkapan yang jenisnya sama dengan jenis ipembolehubah
x = 5; Ungkapan yang jenisnya sama dengan jenis xpembolehubah

Dan apa yang diberikan ini kepada kita?

Pertama, kita boleh mengambil kesempatan daripada fakta bahawa banyak pernyataan sebenarnya adalah ungkapan (bermaksud ia menilai kepada nilai). Sebagai contoh, kod seperti ini akan berfungsi:

Kod Nota
int x, y, z;
x = y = z = 1;
int x, y, z;
x = (y = (z = 1))

Kedua, jika kita mahu, kita boleh mengabaikan hasil penilaian sesuatu ungkapan.

Kod Kod di mana kita mengabaikan hasilnya:
int x = scanner.nextInt();
boolean m = (5 < 10);
scanner.nextInt();
(5 < 10);

Kami mengabaikan hasil penilaian ungkapan, contohnya, jika ungkapan itu melibatkan melakukan sesuatu yang berguna, dan tindakan ini adalah yang penting bagi kami, bukan hasil itu sendiri.


2. Operator ternary

Life hack ini sudah lebih menarik daripada yang sebelumnya. Java mempunyai pengendali ternary khas . Sintaksnya agak serupa dengan sintaks untuk pernyataan:if-else

Condition ? Expression 1 : Expression 2;

Jika keadaan adalah benar, maka Ungkapan 1 dinilai, sebaliknya Ungkapan 2 dinilai. Syarat ini diikuti dengan tanda soal , dan kedua-dua ungkapan dipisahkan oleh titik bertindih .

Perbezaan utama antara pengendali ternary dan if-elsepernyataan ialah operator ternary ialah ungkapan, yang bermaksud kita boleh menetapkan hasilnya kepada sesuatu.

Sebagai contoh, katakan kita ingin mengira minimum dua nombor. Menggunakan pengendali ternary, kod ini akan kelihatan seperti ini:

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

Atau, katakan anda perlu menetapkan nilai yang berbeza kepada pembolehubah bergantung pada beberapa syarat. Bagaimana anda melakukannya?

Satu pilihan ialah menggunakan if-elsepernyataan:

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

Pilihan kedua ialah menggunakan operator ternary , iaitu singkatan untuk if-elsepernyataan:

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

Jadi yang mana lebih baik untuk digunakan — if-elsepernyataan atau pengendali ternary ? Dari segi kelajuan pelaksanaan, tidak banyak perbezaan. Ini lebih kepada kebolehbacaan kod. Dan ini adalah perkara yang sangat penting: kod itu bukan sahaja mesti berfungsi dengan betul, tetapi juga mudah dibaca oleh pengaturcara lain.

Peraturan paling mudah ialah ini: jika kod itu sesuai pada satu baris , kemudian gunakan operator ternary ; tetapi jika ia tidak sesuai pada satu baris, maka lebih baik menggunakan if-elsepernyataan.



3. Membandingkan nombor nyata

Seperti yang dinyatakan sebelum ini, anda tidak boleh hanya mengambil nombor nyata dan membandingkannya. Selalu ada kemungkinan bahawa beberapa digit penting boleh dibuang, menyebabkan kesan sampingan yang tidak dijangka.

Itulah sebabnya terdapat pendekatan yang diuji masa. Jika dua nombor nyata berbeza dengan nilai yang sangat kecil, maka ia boleh dianggap sama. Contoh:

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

Tetapi bukan itu sahaja yang perlu kita risaukan, kerana perbezaan antara nombor mungkin menjadi negatif. Jadi untuk pendekatan ini berfungsi, anda perlu membandingkan bukan sahaja perbezaan antara nombor, tetapi nilai mutlak perbezaan antara nombor:|a-b|

Java mempunyai kaedah untuk mengira nilai mutlak nombor: Math.abs():

int m = Math.abs(value);

Akibatnya, versi contoh kami yang diperbetulkan di atas akan kelihatan seperti ini:

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