Setiap program Java yang kita tulis sebenarnya hanya tersusun dari dua batakan: statement dan expression. Statement adalah unit instruksi lengkap yang melakukan sesuatu, sedangkan expression adalah potongan kode yang dievaluasi menjadi satu nilai. Keduanya bekerja bersama — statement menjalankan aksi, expression menyuplai nilai yang dibutuhkan aksi tersebut. Pada Chapter ini kita bedah batas keduanya, klasifikasi statement di Java, dan cara expression dievaluasi mengikuti urutan operator.

Apa itu Expression #

Expression adalah kombinasi literal, variabel, operator, dan pemanggilan method yang dihitung menjadi tepat satu nilai saat program berjalan. Bentuknya bisa sederhana maupun tersusun:

ExpressionNilai hasil
1717 (literal adalah expression paling sederhana)
harga * jumlahhasil perkalian isi kedua variabel
"Halo, " + namastring gabungan, misalnya "Halo, Budi"
"Budi Santoso".length()12 — jumlah karakter dalam string

Ciri khasnya mudah dikenali: jika sebuah potongan kode dapat kita bayangkan “memiliki hasil” — bisa disimpan ke variabel, dicetak, atau dipakai dalam perhitungan lain — potongan tersebut adalah expression. Pemanggilan method seperti length() termasuk expression karena method dapat mengembalikan nilai.

Apa itu Statement #

Statement adalah instruksi eksekusi lengkap — satu langkah kerja yang dilakukan JVM. Java mengelompokkan statement ke dalam tiga keluarga besar:

KeluargaContoh
Declaration statementint total = harga * jumlah;
Expression statementtotal = 60000;, counter++;, System.out.println(total);
Control flow statementif (total > 50000) { ... }, while (...) { ... }

Ciri visual statement paling kentara adalah titik koma — hampir semua declaration dan expression statement diakhiri ;, sedangkan control flow statement membentuk blok dengan kurung kurawal. Perhatikan juga bahwa expression statement memang memuat expression di dalamnya: total = 60000; berisi expression penugasan, dan System.out.println(total); berisi pemanggilan method. Statement adalah kendaraannya; expression adalah mesin penghasil nilainya.

Expression Hidup di Dalam Statement #

Program berikut menghitung ringkasan penjualan. Perhatikan bagaimana setiap statement memuat expression yang dievaluasi lebih dulu:

public class AnalisisPenjualan {
    public static void main(String[] args) {
        int harga = 15000;
        int jumlah = 4;

        // Expression di sisi kanan dievaluasi lebih dulu,
        // hasilnya lalu disimpan ke variabel di sisi kiri.
        int total = harga * jumlah;
        int diskon = total * 10 / 100;
        int bayar = total - diskon;

        System.out.println("Total : Rp" + total);
        System.out.println("Diskon: Rp" + diskon);
        System.out.println("Bayar : Rp" + bayar);

        // Urutan operator: perkalian sebelum penjumlahan.
        int tanpaKurung = 2 + 3 * 4;
        int denganKurung = (2 + 3) * 4;
        System.out.println("2 + 3 * 4   = " + tanpaKurung);
        System.out.println("(2 + 3) * 4 = " + denganKurung);

        // Pemanggilan method juga expression: menghasilkan nilai.
        int panjangNama = "Budi Santoso".length();
        System.out.println("Panjang nama: " + panjangNama + " karakter");
    }
}

Output yang Dihasilkan:

text
Total : Rp60000
Diskon: Rp6000
Bayar : Rp54000
2 + 3 * 4   = 14
(2 + 3) * 4 = 20
Panjang nama: 12 karakter

Mari kita bedah baris-baris kuncinya:

  1. Baris 7 (int total = harga * jumlah;): declaration statement. Expression harga * jumlah dievaluasi menjadi 60000 lebih dulu, baru nilainya disimpan ke variabel total.
  2. Baris 8-9 (total * 10 / 100 dan total - diskon): expression berantai — hasil expression pertama (total) menjadi bahan expression berikutnya, sehingga nilai mengalir dari atas ke bawah.
  3. Baris 11-13 (System.out.println(...)): expression statement. Expression penggabungan "Total : Rp" + total dievaluasi menjadi satu string sebelum dicetak.
  4. Baris 16-17 (2 + 3 * 4 dan (2 + 3) * 4): bukti urutan operator. Perkalian dihitung sebelum penjumlahan, sehingga 2 + 3 * 4 menjadi 2 + 12 = 14; tanda kurung memaksa penjumlahan dikerjakan lebih dulu sehingga hasilnya 20.
  5. Baris 22 ("Budi Santoso".length()): pemanggilan method yang mengembalikan int. Nilai baliknya langsung dipakai sebagai isi expression di sisi kanan.

Urutan Evaluasi dan Keterbacaan #

Compiler mengevaluasi expression mengikuti aturan operator precedence yang tetap — perkalian dan pembagian sebelum penjumlahan dan pengurangan, operator */+ sebelum penggabungan string pada operand campuran, dan seterusnya. Aturan tersebut menjadikan harga * jumlah / 100 tidak ambigu bagi compiler, tetapi bagi pembaca manusia urutan itu harus diingat tiap kali membaca kode.

Karena itu praktik yang baik adalah memakai tanda kurung saat urutan operasi mulai tidak sekilas terbaca, dan memecah expression panjang menjadi beberapa langkah bernama. int diskon = total * 10 / 100; lebih mudah diaudit daripada satu baris raksasa yang menghitung segalanya sekaligus. Nama variabel antara seperti total dan diskon berfungsi ganda: menyimpan nilai sekaligus mendokumentasikan maksud tiap langkah.

Dengan pembedaan statement dan expression, kita kini dapat membaca program Java kalimat demi kalimat: statement adalah kalimat perintahnya, expression adalah frasa bernilai di dalamnya. Frasa-frasa tersebut tersusun dari nama — nama variabel, nama method, nama class. Chapter berikutnya membahas aturan penamaan identifier tersebut dan kata-kata yang dicadangkan Java sehingga tidak boleh dipakai sebagai nama.

Referensi #

Berkas Sumber

Berkas pendukung halaman ini dapat diunduh dan dijalankan langsung sesuai penjelasan di atas.

AnalisisPenjualan.java

Unduh berkas
java
public class AnalisisPenjualan {
    public static void main(String[] args) {
        int harga = 15000;
        int jumlah = 4;

        // Expression di sisi kanan dievaluasi lebih dulu,
        // hasilnya lalu disimpan ke variabel di sisi kiri.
        int total = harga * jumlah;
        int diskon = total * 10 / 100;
        int bayar = total - diskon;

        System.out.println("Total : Rp" + total);
        System.out.println("Diskon: Rp" + diskon);
        System.out.println("Bayar : Rp" + bayar);

        // Urutan operator: perkalian sebelum penjumlahan.
        int tanpaKurung = 2 + 3 * 4;
        int denganKurung = (2 + 3) * 4;
        System.out.println("2 + 3 * 4   = " + tanpaKurung);
        System.out.println("(2 + 3) * 4 = " + denganKurung);

        // Pemanggilan method juga expression: menghasilkan nilai.
        int panjangNama = "Budi Santoso".length();
        System.out.println("Panjang nama: " + panjangNama + " karakter");
    }
}