Mutabilitas dan imutabilitas akan banyak digunakan ketika kita menggunakan bahasa rust untuk mengelola perizinan dari variabel yang kita buat.
Pendahuluan
Setelah minggu kemarin membahas mengenai project pertama game tebak angka dengan bahasa yang sama, yaitu Rust. Pada kesempatan kali ini saya akan melakukan review kembali materi mengenai variabel dalam Rust.
Variabel dalam konteks Rust adalah tempat untuk menyimpan suatu objek atau nilai. Mirip dengan fungsi variabel dalam matematika, contohnya:
x = 2 // huruf x menyimpan angka 2
y = 3 // huruf y menyimpan angka 3
x + y = 5 // secara eksplisit operasi tersebut adalah 2 + 3 = 5
Silahkan geser atau swipe.
Immutable Variable
Semua variabel dalam bahasa rust bersifat immutable (tidak bisa diubah). Hal ini menyebabkan variabel immutable lebih aman. Syntax let digunakan untuk memasangkan variabel dengan konstanta.
let x = 2; //huruf x menyimpan angka 2 yang bersifat immutable
let y = x+3; //Walaupun terdapat ekspresi, tetap bersifat immutable
//Jika disini terdapat variabel y dengan nilai berbeda maka kode akan error
print ("Hasil dari X + Y = {y}");
Ketika kode di atas dijalankan melalui terminal akan memberikan output sebagai berikut:
Hasil dari X + Y = 5
Mutable Variable
Untuk merubah variabel immutable menjadi mutable menggunakan syntax let mut. Pada beberapa kesempatan tentunya kita memerlukan jenis variabel yang isinya bersifat fleksibel.
let mut x = 5;
x = 6;
println!("Nilai dari x adalah {x}");
Input dari kode tersebut setelah dilakukan proses compile:
Nilai dari x adalah 6
Perhatikan bahwa output kode tersebut adalah 6. Padahal variabel x telah menyimpan terlebih dahulu angka 5. Semua ini dikarenakan syntax mut yang menjadikan isi dari variabel x fleksibel. Ditunjukan dengan perubahan dari 5 menjadi 6. Bagaimana jika kita tidak menggunakan mut? perhatikan output berikut ini.
warning: value assigned to `x` is never read
error[E0384]: cannot assign twice to immutable variable `x`
Jika tidak menggunakan mut saat melakukan proses compile akan terjadi error “tidak bisa menyimpan nilai lain pada variabel immutable”. Tidak perlu khawatir karena Rust akan menyertakan bagaimana cara memperbaiki error ini, yaitu dengan menambahkan syntax mut.
Kode ini tidak mengalokasikan memori yang baru melainkan mengganti nilai pada memori variabel x.
Shadowing
let x = 4; //immutable
//variabel x pertama berlaku disini
let x = x + 1; //immutable
//variabel x pertama sudah tidak berlaku / our of scope, variabel kedua berlaku
println!("Nilai variabel x shadowed adalah {x}"); //output
Shadow atau bayangan merupakan salah satu fitur penting Rust. Penggunaan syntax mut menyebabkan variabel bersifat fleksibel sehingga lebih riskan dari segi keamanan. Untuk mengatasi masalah itu digunakanlah fitur shadowing, dimana variabel x tetap bersifat immutable, hanya saja ditutupi oleh variabel baru dengan nama yang sama.
Syntax yang digunakan adalah let pada ke dua variabel yang sama, yaitu x. Nilai dari x sebenarnya adalah 4, namun value yang ditampilkan menjadi output adalah variabel bayangan dimana x = 4 + 1.
Nilai variabel x shadowed adalah 5
Walaupun disebut variabel bayangan perlu diingat bahwa sebenarnya shadowing menggunakan nama variabel yang sama untuk menyimpan nilai yang berbeda karena variabel pertama sudah di luar batas (out of scope). Batasannya adalah deklarasi variabel x kedua. Variabel biasa atau variabel bayangan yang menggunakan let pada dasarnya kita menciptakan dua variabel berbeda.
Constants
Constants atau konstanta adalah variabel yang selalu bersifat mutable. Perbedaan utama dengan let dapat menggunakan mut sedangkan const tidak dapat menggunakan mut. Intinya sekali mutable tetap mutable. Syntax yang digunakan adalah const. Kaidah utama penulisan konstanta pada rust menggunakan huruf besar dan garis bawah.
println!("Satu jam ada {SATU_JAM_BERAPA_DETIK} detik.")
const SATU_JAM_BERAPA_DETIK: i32 = 60 * 60;
println!("Satu jam ada {SATU_JAM_BERAPA_DETIK} detik.")
Input dari kode tersebut setelah dilakukan proses compile adalah sebagai berikut:
Satu jam ada 3600 detik.
const diaplikasikan ketika kita memiliki program yang berukuran besar dan value tersebut akan digunakan beberapa kali, daripada mengulang membuat variabel, const dapat digunakan karena sifatnya dapat terus tersedia secara terus menerus untuk digunakan asalkan tidak out of scope.
Jangan lupa juga bahwa tipe data pada const harus dideklarasikan secara spesifik. Layaknya contoh di atas tipe datanya i32.
Catatan Penting!
Kode di atas tidak menyertakan seluruh format penulisan rust. Jika menggunakan kesuluruhan format terdapat sytax tambahan berupa fn main.
fn main() {
const SATU_JAM_BERAPA_DETIK: i32 = 60 * 60;
println!("Satu jam ada {SATU_JAM_BERAPA_DETIK} detik.")
}
One response to “Mutable VS Immutable pada Rust”
[…] Saat sedang membaca kembali secara terstruktur di sini dan membaca banyak sumber agar dapat mendapatkan esensi dari shadowing. Ternyata benar saja ada hal penting terlewatkan walaupun saya sudah menulis artikel shadowing sebelumnya. […]
LikeLike