Tipe Dasar

Rust memiliki kumpulan tipe primitif (Primitives) yang lengkap, terbagi menjadi dua kelompok besar yaitu tipe skalar dan tipe majemuk.

(I) Tipe Skalar (Scalar Types)

Mewakili satu nilai mandiri yang tunggal, ada total 6 jenis:

  • Bilangan bulat bertanda: i8, i16, i32, i64, i128, isize (ukuran menyesuaikan ukuran pointer sistem)
  • Bilangan bulat tak bertanda: u8, u16, u32, u64, u128, usize (ukuran menyesuaikan ukuran pointer sistem)
  • Tipe titik mengambang: f32, f64
  • Tipe karakter char: menyimpan nilai skalar Unicode (contoh: 'a', 'α', '∞'), setiap karakter memakai 4 byte
  • Tipe boolean bool: hanya memiliki dua nilai yaitu true dan false
  • Tipe unit (): satu-satunya nilai adalah tuple kosong (). Meskipun bentuknya tuple, hanya berisi satu nilai sehingga tidak termasuk tipe majemuk.

(II) Tipe Majemuk (Compound Types) (akan dipelajari di bagian akhir)

Dibentuk dari gabungan beberapa nilai:

  1. Array: contoh [1, 2, 3]
  2. Tuple: contoh (1, true)

1) Cara anotasi tipe variabel

Semua variabel bisa diberi tipe secara manual. Tipe numerik mendukung tambahan akhiran tipe; jika tidak diberi anotasi, tipe bawaan akan digunakan:

  • Bilangan bulat bawaan: i32
  • Titik mengambang bawaan: f64

Rust juga bisa menyimpulkan tipe secara otomatis berdasarkan konteks kode.

2) Tipe Variabel

1. Anotasi tipe eksplisit

Tulis : tipe langsung setelah nama variabel untuk menentukan tipe, berlaku untuk semua variabel.

fn main() {
    let isOpen: bool = true;
    let price: f64 = 1.0;
}Code language: JavaScript (javascript)

Dari contoh di atas, isOpen dan price adalah variabel, bagian : nama_tipe setelah nama variabel berarti kita secara terang-terangan mendeklarasikan tipe variabel tersebut.

2. Anotasi akhiran numerik

Tambahkan akhiran tipe setelah nilai angka untuk menentukan tipe angka, hanya bisa dipakai untuk bilangan.

fn main() {
    let an_integer = 5i32;
}Code language: JavaScript (javascript)

Kali ini kita tidak pakai : untuk menentukan tipe variabel, melainkan tambahkan i32 di belakang angka yang di-assign untuk menandakan bilangan bulat 32 bit.

3. Aturan tipe bawaan

Jika tidak pakai anotasi maupun akhiran sama sekali, kompiler akan pakai tipe bawaan:

  • Literal bilangan bulat → bawaan i32
  • Literal titik mengambang → bawaan f64
fn main() {
    let default_float = 3.0;  // otomatis f64
    let default_integer = 7; // otomatis i32
}Code language: JavaScript (javascript)

4. Penyimpulan tipe berdasarkan konteks

Kompiler bisa menebak tipe asli variabel secara otomatis dari kode setelahnya, tidak perlu anotasi manual.

fn main() {
    let mut inferred_type = 12;
    inferred_type = 4294967296i64; // tipe disimpulkan menjadi i64 dari baris ini
}Code language: JavaScript (javascript)

Variabel Mutable & Karakteristik Variabel

1 Variabel Mutable (Dapat Diubah)

Variabel yang diberi kata kunci mut, nilainya dapat diubah.

fn main() {
    let mut mutable = 12;
    mutable = 21; // valid, mengubah nilai
}Code language: JavaScript (javascript)

2 Tipe Tidak Dapat Diubah

Sekali tipe variabel ditentukan, sepanjang eksekusi program tidak bisa diganti sama sekali; jika assign nilai tipe lain akan langsung error kompilasi.

fn main() {
    let mut mutable = 12;
    mutable = 21; // valid, mengubah nilai
    mutable = true; // error: tipe awal i32, tidak bisa assign bool
}Code language: JavaScript (javascript)
C:\Users\Jack\Desktop\rustdemo>rustc hello.rs
error[E0308]: mismatched types
 --> hello.rs:5:12
  |
3 |     let mut mutable = 12;
  |                       -- expected due to this value
4 |     mutable = 21; // valid, mengubah nilai
5 |     mutable = true; // error: tipe awal i32, tidak bisa assign bool
  |               ^^^^ expected integer, found `bool`

error: aborting due to 1 previous error

For more information about this error, try `rustc --explain E0308`.Code language: JavaScript (javascript)

Catatan

Di Rust, nilai variabel secara bawaan tidak bisa diubah. Jika ingin bisa diubah, harus tambah kata kunci mut, hal ini berbeda dengan bahasa pemrograman lain.

Contoh kode di bawah ini umum di bahasa lain, tapi akan error di Rust

fn main() {
    let mutable:i32 = 12;
    mutable = 21; // valid, mengubah nilai
}Code language: JavaScript (javascript)

Error kompilasi

C:\Users\Jack\Desktop\rustdemo>rustc hello.rs
error[E0384]: cannot assign twice to immutable variable `mutable`
 --> hello.rs:4:2
  |
3 |     let mutable:i32 = 12;
  |         ------- first assignment to `mutable`
4 |     mutable = 21; // valid, mengubah nilai
  |     ^^^^^^^^^^^^ cannot assign twice to immutable variable
  |
help: consider making this binding mutable
  |
3 |     let mut mutable:i32 = 12;
  |         +++

warning: variable `mutable` is assigned to, but never used
 --> hello.rs:3:6
  |
3 |     let mutable:i32 = 12;
  |         ^^^^^^^
  |
  = note: consider using `_mutable` instead
  = note: `#[warn(unused_variables)]` (part of `#[warn(unused)]`) on by default

warning: value assigned to `mutable` is never read
 --> hello.rs:4:2
  |
4 |     mutable = 21; // valid, mengubah nilai
  |     ^^^^^^^^^^^^
  |
  = help: maybe it is overwritten before being read?
  = note: `#[warn(unused_assignments)]` (part of `#[warn(unused)]`) on by default

error: aborting due to 1 previous error; 2 warnings emitted

For more information about this error, try `rustc --explain E0384`.Code language: JavaScript (javascript)

3 Shadowing Variabel (Penyembunyian Variabel)

Mendeklarasikan ulang variabel dengan nama sama pakai let akan menyembunyikan variabel lama; keduanya variabel terpisah sepenuhnya, tipe bisa berbeda.

fn main() {
    let mutable = 12;
    let mutable = true; // menyembunyikan variabel tipe i32 di atas, variabel baru bertipe bool
}Code language: JavaScript (javascript)

Tipe Majemuk: Array & Tuple

1. Array

  • Sintaks: [tipe_elemen; panjang], tipe dan panjang tetap, semua elemen harus tipe yang sama.
let my_array: [i32; 5] = [1, 2, 3, 4, 5];Code language: JavaScript (javascript)

2. Tuple

  • Dibungkus dengan tanda kurung (), bisa menyimpan beberapa nilai dengan tipe berbeda-beda.
let my_tuple = (5u32, 1u8, true, -5.04f32);Code language: JavaScript (javascript)

Tinggalkan Balasan

Alamat email Anda tidak akan dipublikasikan. Ruas yang wajib ditandai *