Belajar Rust dari Nol: Memahami Variabel, Mutability, dan Tipe Data - Clovertechno Class PT 2
Belajar pemrograman Rust dapat dimulai dari konsep yang sebenarnya sudah familiar bagi developer, seperti variabel dan tipe data. Namun, Rust memiliki sejumlah aturan yang berbeda dari bahasa seperti Java, terutama dalam cara variabel dapat diubah setelah dideklarasikan.
Salah satu perbedaan paling mendasar terletak pada konsep mutability. Jika perubahan nilai variabel merupakan hal yang umum dalam pemrograman imperatif, Rust justru membuat variabel bersifat immutable secara default. Developer harus menyatakan secara eksplisit jika sebuah variabel memang diperbolehkan untuk berubah.
| Konsep | Rust | Java |
|---|---|---|
| Variabel | Menggunakan let |
Menggunakan tipe data dan nama variabel |
| Default | Immutable | Mutable |
| Variabel mutable | Menggunakan mut |
Dapat diubah tanpa keyword khusus |
| Konstanta | const |
static final memiliki konsep yang sebanding |
| Konversi tipe | Umumnya eksplisit | Mendukung sejumlah konversi implisit |
Rust membuat variabel immutable secara default
Dalam Rust, deklarasi variabel umumnya menggunakan keyword let. Variabel yang dibuat dengan cara tersebut tidak dapat diubah nilainya setelah deklarasi jika tidak ditandai sebagai mutable.
Contohnya, deklarasi seperti let x = 5; membuat nilai x tidak dapat langsung diganti. Jika developer mencoba memberikan nilai baru kepada variabel tersebut, compiler Rust akan memberikan kesalahan.
Untuk membuat variabel yang dapat berubah, developer harus menggunakan keyword mut. Contohnya adalah let mut y = 6;. Setelah itu, nilai y dapat diperbarui selama program berjalan.
Immutable menjadi bagian dari desain Rust
Aturan tersebut bukan sekadar perbedaan sintaksis. Rust menggunakan pendekatan immutable secara default untuk membantu developer menghindari perubahan nilai yang tidak disengaja.
Dalam program yang semakin besar, sebuah variabel dapat digunakan oleh banyak bagian kode. Jika nilainya dapat berubah tanpa kontrol yang jelas, proses mencari sumber bug bisa menjadi lebih sulit.
Dengan mengharuskan developer menuliskan mut, Rust membuat niat untuk mengubah data menjadi lebih eksplisit. Kode juga dapat memberikan petunjuk yang lebih jelas mengenai bagian mana yang memang dirancang untuk melakukan perubahan state.
Rust memiliki tipe data integer signed dan unsigned
Rust menyediakan berbagai tipe data primitif, termasuk integer, floating point, boolean, dan character. Untuk integer, Rust membedakan tipe signed dan unsigned.
Integer signed dapat menyimpan nilai positif maupun negatif, sedangkan unsigned hanya menyimpan nilai nol dan positif. Rust menyediakan beberapa ukuran integer, seperti i8, i16, i32, i64, i128, serta pasangan unsigned seperti u8, u16, u32, u64, dan u128.
Pemisahan tersebut memberikan kontrol yang lebih jelas terhadap jenis data yang digunakan. Jika sebuah nilai secara logis tidak mungkin negatif, developer dapat menggunakan tipe unsigned yang sesuai dengan kebutuhan program.
Konversi tipe harus dilakukan secara eksplisit
Rust juga memberikan perhatian besar terhadap keamanan tipe. Konversi antara tipe data tidak dilakukan secara sembarangan. Developer perlu menyatakan konversi tersebut secara eksplisit ketika ingin mengubah sebuah nilai ke tipe lain.
Pendekatan ini berbeda dengan bahasa yang melakukan sejumlah konversi tipe secara otomatis. Rust mengurangi ambiguitas dengan membuat perubahan tipe terlihat di dalam kode.
Aturan tersebut mungkin terasa lebih ketat bagi developer yang baru berpindah dari bahasa seperti Java. Namun, compiler dapat membantu menemukan kesalahan tipe lebih awal sebelum program dijalankan.
Shadowing memungkinkan variabel dideklarasikan ulang
Rust memiliki konsep shadowing yang memungkinkan developer mendeklarasikan variabel baru dengan nama yang sama dengan variabel sebelumnya.
Konsep ini berbeda dari sekadar mengubah nilai variabel mutable. Dengan shadowing, variabel baru dibuat dan variabel sebelumnya menjadi tertutupi oleh deklarasi berikutnya.
Salah satu keunggulannya adalah tipe data juga dapat berubah. Sebuah variabel dapat terlebih dahulu menyimpan nilai dengan tipe tertentu, kemudian dideklarasikan kembali menggunakan nama yang sama dengan tipe berbeda.
Konsep tersebut memberikan fleksibilitas tanpa menghilangkan karakteristik immutable dari variabel sebelumnya.
Konstanta menggunakan keyword const
Selain variabel, Rust juga menyediakan konstanta menggunakan keyword const. Konstanta digunakan untuk nilai yang memang tidak dimaksudkan untuk berubah selama program berjalan.
Developer harus menentukan tipe data ketika mendeklarasikan konstanta. Contohnya, const MAX_SCORE: u32 = 100; menyatakan sebuah konstanta bernama MAX_SCORE dengan tipe u32.
Dalam konteks Java, konsep konstanta tersebut dapat dibandingkan dengan penggunaan static final, meskipun aturan dan mekanisme keduanya tidak sepenuhnya identik.
Tuple menyimpan beberapa nilai dalam satu grup
Rust juga menyediakan tuple sebagai salah satu tipe data dasar. Tuple memungkinkan beberapa nilai dengan tipe berbeda disimpan dalam satu kelompok.
Sebagai contoh, sebuah tuple dapat berisi integer, floating point, dan boolean sekaligus. Pendekatan tersebut berbeda dengan array yang pada dasarnya digunakan untuk menyimpan sejumlah elemen dengan tipe yang sama.
Nilai di dalam tuple dapat diakses berdasarkan indeks. Karena itu, tuple dapat digunakan ketika beberapa nilai berbeda secara logis perlu dikembalikan atau dikelompokkan bersama.
Rust mendorong kode yang lebih eksplisit
Perbedaan antara Rust dan Java pada konsep dasar ini memperlihatkan filosofi Rust yang cenderung mengutamakan kejelasan dan kontrol. Developer harus menyatakan ketika variabel boleh berubah, melakukan konversi tipe secara eksplisit, dan menentukan tipe data sesuai kebutuhan.
Bagi developer yang baru belajar Rust, konsep tersebut mungkin terasa lebih ketat dibandingkan bahasa yang sudah familiar. Namun, aturan tersebut menjadi fondasi penting sebelum masuk ke konsep Rust yang lebih kompleks seperti ownership, borrowing, dan lifetime.
Karena itu, memahami variabel, mutability, tipe data, shadowing, konstanta, dan tuple menjadi langkah awal yang penting dalam belajar Rust dari nol. Setelah konsep tersebut dikuasai, developer dapat mulai memahami bagaimana Rust menggunakan sistem tipe dan ownership untuk menghasilkan program yang aman sekaligus memiliki performa tinggi.
Clovertechno