Saat membaca kode C, kita sebenarnya melihat dua jenis satuan yang berbeda: expression dan statement. Expression adalah potongan kode yang menghasilkan nilai, sedangkan statement adalah instruksi lengkap yang diakhiri titik koma dan dieksekusi oleh compiler satu per satu. Membedakan keduanya membantu kita memahami mengapa sebuah baris bisa berdiri sendiri, sementara baris lain harus disisipkan ke dalam argumen fungsi. Pada Chapter ini kita akan membedah kedua konsep tersebut beserta contoh konkret penggunaannya.

Expression: Satuan yang Menghasilkan Nilai #

Expression adalah kombinasi operator dan operand yang ketika dievaluasi menghasilkan sebuah nilai. Literal seperti 5, nama variabel seperti x, pemanggilan fungsi seperti sqrt(2), dan kombinasi keduanya seperti x + 3 * 2 — semuanya adalah expression. Yang penting, expression dapat berdiri di tempat-tempat yang mengharapkan nilai, misalnya di sisi kanan tanda = atau sebagai argumen printf.

c
#include <stdio.h>

int main(void) {
    int x = 5;
    int y = x + 3;
    printf("x = %d, y = %d\n", x, y);
    y = x * 2;
    printf("x = %d, y = %d\n", x, y);
    return 0;
}

Output yang Dihasilkan:

text
x = 5, y = 8
x = 5, y = 10

Mari kita telaah baris-baris kode di atas:

  1. Baris 4 (int x = 5;): 5 adalah expression literal yang menghasilkan nilai 5. Statement int x = 5; mengikat nilai tersebut ke variabel x.
  2. Baris 5 (int y = x + 3;): x + 3 adalah expression aritmetika. Compiler membaca nilai x (5), menambahkannya dengan 3, menghasilkan 8, lalu statement mengikat hasil tersebut ke y.
  3. Baris 7 (y = x * 2;): x * 2 adalah expression baru yang menghasilkan 10. Statement assignment mengganti nilai y yang lama (8) menjadi 10.

Perbedaan penting: statement int y = x + 3; melakukan aksi (mengikat nilai ke variabel), sedangkan x + 3 sendiri hanyalah expression yang menghasilkan nilai tanpa mengubah keadaan program.

Statement: Instruksi yang Diakhiri Titik Koma #

Statement adalah unit eksekusi terkecil yang lengkap. Sebagian besar statement diakhiri titik koma (;). Jenis statement yang paling umum adalah declaration statement (int x;), expression statement (y = x + 3;), selection statement (if, switch), iteration statement (for, while, do-while), dan jump statement (return, break, continue).

c
#include <stdio.h>

int main(void) {
    int a = 10;
    int b = 3;

    /* Expression sebagai argumen printf */
    printf("a + b = %d\n", a + b);
    printf("a * b = %d\n", a * b);
    printf("a %% b = %d\n", a % b);

    /* Expression di dalam expression lain */
    int total = (a + b) * 2 - 1;
    printf("total = %d\n", total);
    return 0;
}

Output yang Dihasilkan:

text
a + b = 13
a * b = 30
a % b = 1
total = 25

Mari kita telaah baris-baris kode di atas:

  1. Baris 8 (printf("a + b = %d\n", a + b);): statement pemanggilan fungsi printf. Argumen kedua a + b adalah expression yang dievaluasi terlebih dahulu menjadi 13 sebelum diteruskan ke printf.
  2. Baris 10 (printf("a %% b = %d\n", a % b);): argumen a % b adalah expression modulus. Tanda %% di format string adalah escape literal untuk mencetak tanda % itu sendiri.
  3. Baris 13 (int total = (a + b) * 2 - 1;): expression (a + b) * 2 - 1 menggabungkan beberapa operasi. Tanda kurung menegaskan bahwa a + b dievaluasi dulu, menghasilkan 13, dikalikan 2 menjadi 26, dikurangi 1 menjadi 25.

Perhatikan bahwa operator * dan / memiliki prioritas lebih tinggi daripada + dan -; tanda kurung membantu kita mengendalikan urutan evaluasi tanpa harus menghafal tabel prioritas.

Compound Statement: Blok yang Berisi Banyak Statement #

Compound statement (atau block) adalah kumpulan statement yang dibungkus oleh tanda kurung kurawal { ... }. Blok ini diperlakukan sebagai satu statement tunggal dari sudut pandang sintaks. Konstruksi if, for, while, dan tubuh fungsi semuanya memerlukan compound statement jika berisi lebih dari satu statement.

c
#include <stdio.h>

int main(void) {
    int nilai = 75;
    if (nilai >= 75) {
        printf("Lulus\n");
    } else {
        printf("Belum lulus\n");
    }
    return 0;
}

Output yang Dihasilkan:

text
Lulus

Pada contoh di atas, expression nilai >= 75 dievaluasi menjadi nilai boolean 1 (karena 75 >= 75 benar). Karena kondisi benar, compound statement di dalam if dieksekusi, mencetak Lulus. Compound statement di blok else diabaikan sepenuhnya.

Ringkasan Perbedaan #

AspekExpressionStatement
Menghasilkan nilai?YaTidak selalu
Diakhiri titik koma?Tidak (belum lengkap)Ya
Contoh5, x + 3, sqrt(2)int y = x + 3;, return 0;, if (x) { ... }
Bisa jadi argumen fungsi?YaTidak
Bisa berdiri sendiri?Hanya jika dibuat expression statementYa

Pemahaman akan perbedaan ini menjadi dasar ketika kita mempelajari operator precedence, short-circuit evaluation, dan struktur kontrol pada Section Control Flow dan Operator dan Expression. Sementara itu, kita cukup membiasakan diri membaca kode sebagai rangkaian statement yang masing-masing memuat expression.