Filosofi Ekspresi: Kenapa Semuanya Nilai?

Di AHA! Lang, kontrol alur seperti if/else adalah ekspresi yang menghasilkan nilai. Inilah mengapa desain itu dipilih.

5 Agustus 2026

Filosofi Ekspresi: Kenapa Semuanya Nilai?

Nyatakan dengan jujur: pernah frustrasi karena harus menulis program yang setengah jalan karena sebuah if tidak bisa dimasukkan ke dalam ekspresi?

Di kebanyakan bahasa, if adalah statement — ia menjalankan sesuatu, tapi tidak menghasilkan nilai. AHA! Lang mengambil jalur berbeda: hampir semuanya adalah ekspresi yang menghasilkan nilai.

Ekspresi vs Statement

// AHA! Lang: if/else adalah ekspresi —
// cabang yang terakhir dievaluasi menjadi nilai hasilnya.

let x = 10;
let y = 20;

let result = if x > y {
    "x lebih besar"
} else {
    "y lebih besar"
};

print(result);

Karena if menghasilkan nilai, kamu bisa menuliskannya langsung dalam assignment. Tidak ada deklarasi dua langkah, tidak ada variabel yang diisi di dalam cabang.

Mengapa Desain Ini Bagus?

1. Program Lebih Pendek dan Jelas

Perbandingkan pola yang biasa ditemui:

// umum di bahasa statement-based:
let mut status = "default";
if score >= 7 {
    status = "lulus";
} else {
    status = "tidak lulus";
}

dengan versi ekspresi:

let status = if score >= 7 { "lulus" } else { "tidak lulus" };

Satu ekspresi, satu nilai, tidak ada state yang bermutasi. Lebih mudah dibaca dan lebih sulit membuat bug.

2. Komposisi

Nilai bisa dikomposisikan tanpa batas:

let nilai = if a { 1 } else { 2 } * 10 + if b { 5 } else { 6 };

Kontrol alur berperilaku seperti nilai lainnya — bisa dioperasikan, dipassing, dan dikombinasikan.

3. Fondasi untuk Functional Programming

Desain ini adalah pintu masuk alami ke gaya fungsional: fungsi yang memetakan input ke output tanpa efek samping tersembunyi. Ini bukan kebetulan — ini keputusan desain yang disengaja, seperti yang bisa dilihat di seluruh Language Tour.

Kenapa Tidak Semua Bahasa Melakukan Ini?

Desain ekspresi biasanya membutuhkan kompiler yang lebih disiplin: setiap node AST harus punya tipe dan nilai yang jelas. Di AHA! Lang, sistem tipe dari rilis 1.4.0 inilah yang membuat filosofi ini bisa dijalankan — setiap ekspresi diperiksa tipenya di compile-time:

let a = 10;
let b = "teks";

// error di compile-time: tidak bisa membandingkan Int dengan String
let hasil = if a == b { 1 } else { 2 };

Kesalahan ditangkap sebelum program berjalan, bukan saat runtime.

Kesimpulan

Semua nilai, semua ekspresi — inilah inti dari "Easy to read. Powerful to wield." Jika kamu ingin mendalami bagaimana kompiler mewujudkan filosofi ini, ikuti Course kami dari pelajaran pertama.