Tipe Data
Semua materi merupakan rangkuman belajar.
Untuk bacaan yang lebih langkap & update, dipersilahkan akses pada
The Book
Yang perlu kita garis bawahi peratama kali adalah
Rust merupakan statically typed language.
Meski setiap variable mempunyai tipe data,
kita tetap dapat menuliskan variable tanpa tipe datanya
let name = "Abdul";
Hal ini memungkinkan karena compiler membaca tipe data dari nilai yang kita berikan.
Namun ada saat kita harus menuliskannya, seperti saat kita ingin parse suatu nilai
let birth_date: u8 = "22".parse().expect("Not a number!");
Karena fungsi parse
di sini membaca target parsing dari variable-nya.
Adapun tipe data dalam Rust terbagi menjadi beberapa berikut:
-
Scalar Types, merupakan tipe data dengan satu nilai
- Integer
- Floating-point number
- Boolean
- Character
-
Compound Types, merupakan kelompok dari beberapa nilai
- Tuple
- Array
Sebelum lebih jauh,
tipe data yang kita bahas di sini adalah tipe data yang tersimpan dalam stack allocation memory.
Mudahnya mungkin variable yang lebih "mudah", "murah" dan "cepat" untuk diakses oleh aplikasi,
dalam hal ini, bahasa itu sendiri.
Konsep dari "stack & heap allocation memory" merupakan konsep umum,
yang mungkin akan dibahas nanti dalam sesi tersendiri.
Dan adapun beberapa tipe data yang teman-teman sudah familiar dalam bahasa pemrograman lain seperti "String", "Object/Map", dan lainnya akan kita bahas juga dalam sesi terpisah.
Ok, lanjut....
Integer
Merupakan angka tanpa koma.
Terkelompok dalam
-
Unsigned, ditandai dengan
u
Formula jangkauannya 0 sampai 2n-1 Digunakan untuk angga positif (unsigned - tanpa perlu tanda, dipastikan positif) -
Signed, ditandai dengan
i
Formula jangkauannya -(2n-1) sampai 2n-1-1 Digunakan untuk angga negatif & positif (signed - diperlukan tanda)
Length | Unsigned | Signed |
---|---|---|
8-bit | u8 | i8 |
16-bit | u16 | i16 |
32-bit | u32 | i32 |
64-bit | u64 | i64 |
128-bit | u128 | i128 |
arch | usize | isize |
Contoh penerapan formulanya, 8-bit
- Unsigned
- 0 sampai 28-1
- 0 sampai 255.
- Signed
- -(28-1) sampai 28-1-1
- -(27) sampai 27-1
- -128 sampai 127
Begitu seterusnya sampai 128 yak,
bukan berarti kita harus menghitungnya bila akan define sebuah integer ya,
cukup googling saja jangkauannya,
hal ini cukup sebagai pengetahuan saja.
Adapun untuk usize
& isize
nilai jangkauannya akan menyesuaikan pada architecture device, 64 atau 32
Selain decimal/nilai angka pada umumnya,
kita pun dapan menuliskan hex, octal, binary & byte pada integer
Number literals | Example | Tanda |
---|---|---|
Hex | 0xff | 0x |
Octal | 0o77 | 0o |
Binary | 0b1111_0000 | 0b |
Byte (u8 only) | b'A' | b |
Decimal | 98_222 |
Seperti beberapa bahasa pemrograman lain,
Rust juga mendukung penggunaan _
pada angka,
sebagai pembantu dalam pembacaan angka,
biasa digunakan untuk memisahkan ribuan.
Integer Overflow
Seperti kita tahu, setiap nilai memiliki jangkauannya masing-masing.
Maka bagaimana bila kita memasukkan nilai lebih dari jangkauannya?Terdapat 2 kondisi
- Debug Mode Pada debug mode, akan terjadi panic runtime, hal ini terjadi agar developer aware dengan overflow, sehingga barangkali akan mengubahnya
- Release Mode, saat compile dengan
--release
flag Pada mode ini, bila terjadi overflow, maka nilainya akan wrap around ke nilai minimumnya. Sebagai contoh, bila u8 dengan jangkauan 0 sampai 255 ditambah atau diisi sehingga nilainya menjadi 256, maka nilainya akan wrap around menjadi 0, 257 menjadi 1, 258 menjadi 2, dan seterusnyaKarenanya, bijaklah dalam memilih tipe data, ok....
Floating-point Number
Merupakan tipe data angka yang dapat menampung koma.
Terbagi menjadi 2
-
f32
- 32-bits
- single precision float
-
f64
- 64-bits
- double precision float
Saat kita membuat float data type tanpa menuliskan tipe datanya,
maka secaa default tipe datanya adalah f64
.
Hal ini memungkinkan variable menampung dengan nilai presisi yang lebih,
dengan perbedaan kecepatan yang tidak terlalu signifikan.
fn main() {
let x = 2.0; // f64
let y: f32 = 3.0; // f32
}
Untuk jangkauan lebih detail dapat dibaca pada link berikut.
Boolean
Ditandai dengan keyword bool
.
Tentu hanya memiliki 2 nilai, true
atau false
Character
Ditandai dengan tanda petik tunggal
fn main() {
let c = 'z';
let emoji = '😆';
}
Char pada Rust mewakili Unicode Scalar Value.
Yang artinya Karakter bahasa seperti China, Jepang, bahkan emoji dapat ditampung pada tipe data ini.
Untuk menghindari panjang & lamanya bahasan,
sisa dari tipe data di atas akan ditulis dalam sesi selanjutnya.
Terima kasih.
Top comments (0)