1. Ekspresi vs pernyataan

Di Jawa, sangat membantu untuk membedakan antara dua kategori: pernyataan dan ekspresi . Sebuah pernyataan biasanya dikatakan dieksekusi , sedangkan ekspresi dikatakan dievaluasi . Tapi itu bukan hal yang paling penting.

Perbedaan utama antara pernyataan dan ekspresi adalah mengevaluasi ekspresi memiliki hasil . Dan hasil ini memiliki tipe, dan dapat ditugaskan ke variabel atau digunakan dalam ekspresi lain.

Contoh:

Kode Catatan
int x; Penyataan
(a < 10) Ekspresi yang tipenyaboolean
i++; Ekspresi yang tipenya sama dengan tipe ivariabel
x = 5; Ekspresi yang tipenya sama dengan tipe xvariabel

Dan apa yang diberikan ini kepada kita?

Pertama, kita dapat memanfaatkan fakta bahwa banyak pernyataan sebenarnya adalah ekspresi (artinya mereka mengevaluasi nilai). Misalnya, kode seperti ini akan berfungsi:

Kode Catatan
int x, y, z;
x = y = z = 1;
int x, y, z;
x = (y = (z = 1))

Kedua, jika kita mau, kita bisa mengabaikan hasil evaluasi ekspresi.

Kode Kode tempat kami mengabaikan hasilnya:
int x = scanner.nextInt();
boolean m = (5 < 10);
scanner.nextInt();
(5 < 10);

Kami mengabaikan hasil evaluasi ekspresi, misalnya, jika ekspresi melibatkan melakukan sesuatu yang bermanfaat, dan tindakan ini yang penting bagi kami, bukan hasil itu sendiri.


2. Operator ternary

Peretasan kehidupan ini sudah lebih menarik dari yang sebelumnya. Java memiliki operator ternary khusus . Sintaksnya agak mirip dengan sintaks untuk pernyataan :if-else

Condition ? Expression 1 : Expression 2;

Jika kondisi benar, maka Ekspresi 1 akan dievaluasi, jika tidak maka Ekspresi 2 akan dievaluasi. Kondisi tersebut diikuti dengan tanda tanya , dan kedua ekspresi tersebut dipisahkan oleh titik dua .

Perbedaan utama antara operator ternary dan if-elsepernyataan adalah bahwa operator ternary adalah ekspresi, yang artinya kita dapat menetapkan hasilnya ke sesuatu.

Misalnya, kita ingin menghitung minimal dua angka. Menggunakan operator ternary, kode ini akan terlihat seperti ini:

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

Atau, katakanlah Anda perlu menetapkan nilai yang berbeda ke variabel tergantung pada beberapa kondisi. Bagaimana kamu melakukannya?

Salah satu opsi adalah menggunakan if-elsepernyataan:

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

Opsi kedua adalah menggunakan operator ternary , yaitu singkatan dari if-elsepernyataan:

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

Jadi mana yang lebih baik untuk digunakan - sebuah if-elsepernyataan atau operator ternary ? Dalam hal kecepatan eksekusi, tidak banyak perbedaan. Ini lebih merupakan masalah keterbacaan kode. Dan ini adalah poin yang sangat penting: kode tidak hanya harus bekerja dengan benar, tetapi juga mudah dibaca oleh programmer lain.

Aturan paling sederhana adalah ini: jika kode cocok pada satu baris , maka gunakan operator ternary ; tetapi jika tidak muat dalam satu baris, maka lebih baik menggunakan if-elsepernyataan.



3. Membandingkan bilangan real

Seperti disebutkan sebelumnya, Anda tidak bisa hanya mengambil bilangan real dan membandingkannya. Selalu ada kemungkinan bahwa beberapa angka penting dapat dibuang, menyebabkan efek samping yang tidak terduga.

Itu sebabnya ada pendekatan yang telah teruji oleh waktu. Jika dua bilangan real berbeda dengan nilai yang sangat kecil, maka keduanya dapat 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");

Tapi bukan itu saja yang perlu kita khawatirkan, karena perbedaan antara angka-angka tersebut mungkin saja negatif. Jadi agar pendekatan ini berhasil, Anda perlu membandingkan tidak hanya perbedaan antara angka-angka, tetapi juga nilai absolut dari perbedaan antara angka-angka tersebut:|a-b|

Java memiliki metode untuk menghitung nilai absolut dari sebuah angka: Math.abs():

int m = Math.abs(value);

Akibatnya, versi yang dikoreksi dari contoh kami di atas akan terlihat 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");