Variabel adalah kotak bernama yang menyimpan satu nilai. Di Rust, kotak yang dibuat dengan let langsung disegel: isinya gak bisa diganti, kecuali kamu menandainya mut sejak awal. Bayangin papan-papan di Kedai Martabak Bang Rusdi. Daftar harga dicetak di menu laminating, sekali jadi gak diubah lagi: itu let. Stok telur ditulis di papan tulis, dihapus dan ditulis ulang tiap ada martabak telur terjual: itu let mut. Nama kedai dicat di spanduk sebelum buka dan sama di mana pun: itu const. Kadang Bang Rusdi menempel kertas baru berlabel sama di atas catatan lama, jadi yang terbaca catatan baru: itu shadowing.
🧪 Tebakan cepat: kode ini dibuat tanpa
mut, lalu stoknya dikurangi 3. Apakah lolos compile dan mencetak 247?let stok_telur = 250; stok_telur -= 3;Tebak dulu, jawabannya ada di bagian "Immutable secara default".
let: kotak bernama
fn main() {
let harga_manis = 32000;
let porsi = 2;
println!("Total: {}", harga_manis * porsi);
}
Output-nya Total: 64000.
let harga_manis = 32000;membuat variabel bernamaharga_manisberisi32000.- Nama variabel ditulis huruf kecil dengan garis bawah di antara kata (snake_case), misalnya
stok_telur, bukanstokTelur. - Kamu gak menulis tipenya. Rust menebaknya dari nilai: angka bulat seperti
32000jadii32. Tipe dibahas di pelajaran berikutnya.
Immutable secara default
Immutable artinya gak bisa diubah. Tiap variabel let di Rust immutable, kecuali kamu bilang sebaliknya. Ini program stok telur kedai, dibuat tanpa mut:
fn main() {
let stok_telur = 250;
println!("Stok telur: {}", stok_telur);
stok_telur -= 3;
println!("Stok telur: {}", stok_telur);
}
error[E0384]: cannot assign twice to immutable variable `stok_telur`
--> src/main.rs:4:5
|
2 | let stok_telur = 250;
| ---------- first assignment to `stok_telur`
3 | println!("Stok telur: {}", stok_telur);
4 | stok_telur -= 3;
| ^^^^^^^^^^^^^^^ cannot assign twice to immutable variable
|
help: consider making this binding mutable
|
2 | let mut stok_telur = 250;
| +++
stok_telur -= 3;artinyastok_telur = stok_telur - 3;: kurangi 3 lalu simpan lagi. Itu mengisi ulang variabel, dan variabel immutable gak boleh diisi dua kali.- Compile gagal, jadi
Stok telur: 250pun gak tercetak. Itu jawaban tebakannya. help:sudah menunjukkan perbaikannya: tambahmutdi baris 2.
Kenapa dibuat begini? Saat membaca kode, kamu bisa yakin nilai let gak berubah diam-diam di tempat lain. Yang perlu berubah harus terang-terangan ditandai.
let mut: boleh diubah
fn main() {
let mut stok_telur = 250;
println!("Stok telur: {}", stok_telur);
stok_telur -= 3;
println!("Stok telur: {}", stok_telur);
}
Stok telur: 250
Stok telur: 247
let mutmembuat kotak yang isinya boleh diganti. Ganti isinya tanpalet:stok_telur = 247;ataustok_telur -= 3;. Ada juga+=dan*=.- Isinya boleh berubah, tipenya tidak. Kalau stok diisi teks
stok_telur = "tinggal sedikit";, compiler menolak denganerror[E0308]: mismatched typesdan keteranganexpected integer, found `&str`.&stradalah tipe teks. mutyang gak pernah dipakai mengubah apa pun dapat peringatanvariable does not need to be mutable. Programnya tetap jalan, tapi hapusmut-nya.
Shadowing: let lagi dengan nama yang sama
fn main() {
let stok_telur = 250;
println!("Stok telur: {}", stok_telur);
let stok_telur = stok_telur - 3;
println!("Stok telur: {}", stok_telur);
let stok_telur = "tinggal sedikit";
println!("Stok telur: {}", stok_telur);
}
Stok telur: 250
Stok telur: 247
Stok telur: tinggal sedikit
- Tiap
letmembuat variabel baru. Yang lama gak diubah, cuma tertutup: nama itu sekarang menunjuk ke yang baru. let stok_telur = stok_telur - 3;boleh membaca nilai lama di sisi kanan, karena variabel baru baru ada setelah baris itu selesai.- Karena variabelnya baru, tipenya boleh beda: dari angka jadi teks. Gak perlu
mutsama sekali.
const: nilai tetap untuk seluruh program
const HARGA_TELUR: u32 = 38000;
fn main() {
println!("Martabak telur: {}", HARGA_TELUR);
}
constditulis di luarfn main, jadi bisa dipakai di mana pun dalam program. Namanya huruf besar semua:HARGA_TELUR.- Tipenya wajib ditulis.
u32artinya angka bulat tanpa minus. Tanpa tipe, compiler menolak denganmissing type for `const` item. - Nilainya harus sudah pasti saat compile dan gak pernah bisa diubah.
constgak bisa diberimut.
mut atau shadowing?
let mut |
Shadowing (let lagi) |
|
|---|---|---|
| Variabelnya | tetap yang sama, isinya diganti | variabel baru, yang lama tertutup |
| Ganti tipe | gak boleh | boleh |
| Cara menulis | stok_telur -= 3; |
let stok_telur = stok_telur - 3; |
Pakai let mut untuk nilai yang terus berubah, seperti stok selama kedai buka. Pakai shadowing untuk mengolah nilai jadi bentuk baru sekali jalan, misalnya angka yang diubah jadi teks.
⚠️ Jebakan yang sering ketemu
- Lupa
mut.cannot assign twice to immutable variableartinya kamu mengisi ulang variabellet. Tambahmutdilet-nya, atau pakai shadowing. mutlalu ganti tipe.mutcuma mengizinkan nilai baru dengan tipe yang sama. Untuk ganti tipe, pakailetlagi.letdi depan pengisian ulang.let angka = 20;setelahlet mut angka = 10;bukan mengubah, tapi membuat variabel baru. Untuk mengubah, tulisangka = 20;tanpalet.consttanpa tipe.const HARGA_TELUR = 38000;ditolak. Tulisconst HARGA_TELUR: u32 = 38000;.
TL;DR: let membuat variabel yang immutable: mengisinya ulang ditolak dengan cannot assign twice to immutable variable, dan saat compile gagal gak ada baris yang jalan. let mut membolehkan isi berubah (stok_telur -= 3;), tapi tipenya tetap. Shadowing, let lagi dengan nama yang sama, membuat variabel baru yang boleh beda tipe dan boleh membaca nilai lamanya (let angka = angka * 3;). const ditulis huruf besar, wajib bertipe, dan nilainya pasti sejak compile.