Skip to main content

A.5. Tipe Data ➜ Primitive Scalar

Tipe data di Rust dikategorikan menjadi beberapa group, salah satunya adalah group tipe data primitif scalar atau biasa disebut scalar types. Pada chapter ini kita akan mempelajarinya.

Tipe data scalar sendiri merupakan tipe data primitif yang isinya hanya 1 nilai. Rust memiliki 4 tipe scalar, yaitu integers, floating-point, boolean, dan character.

A.5.1. Signed integers

Signed integer merupakan tipe data numerik/integer yang bisa menampung nilai positif dan juga negatif. Ada beberapa tipe data singed integer tersedia di Rust yang dibedakan sesuai size-nya.

Tipe data ini keyword-nya ditandai dengan huruf awalan i, contohnya i8, yang dimana tipe ini adalah tipe data numerik integer dengan range value yang bisa ditampung adalah mulai dari angka −128 (didapat dari −(27) hingga 127 (didapat dari 27-1).

Contoh:

let numerik1 = 24;
let numerik2: i8 = 2;
let numerik3: i64 = 12;

println!("{} | {} | {}", numerik1, numerik2, numerik3);
// output ==> 24 | 2 | 12

Dengan menggunakan teknik deklarasi type inference, maka default angka numerik tipe datanya adalah i32.

Range value pada tipe data itu cukup penting untuk diperhatikan, jika ada sebuah variabel yang tipe datanya pasti dan diisi dengan nilai di luar kapasitas yang bisa ditampung, maka akan muncul error. Contoh, tipe data i8, jika diisi nilai 128 maka error.

data type error

Umumnya, tipe data i32 cukup untuk kebutuhan menampung nilai, tapi ada banyak case dimana kita perlu tipe dengan size yang lebih besar seperti i64.

Berikut merupakan list tipe data signed integers yang ada di Rust. Tidak perlu dihafal.

Tipe dataDeskripsi
i8−(27) hingga (27)-1
i16−(215) hingga (215)-1
i32−(231) hingga (231)-1
i64−(263) hingga (263)-1
i128−(2127) hingga (2127)-1
isizetipe pointer

Lebih jelasnya tentang tipe data pointer dibahas pada chapter terpisah, Pointer & References

Bisa gunakan tipedata::MIN dan tipedata::MAX untuk mengetahui nilai minimal dan juga maksimal tipe data signed integers.

Contoh:

let min_i8 = i8::MIN;
let max_i8 = i8::MAX;

println!("{} | {}", min_i8, max_i8);
// output ==> -128 | 127

Notasi i8::MIN dan i8::MAX memiliki tanda :: yang di Rust merupakan path separator. Untuk sekarang penulis anjurkan tidak terlalu pusing memahami apa itu path separator, karena nantinya akan ada pembahasan yang cukup detail khusus untuk mengupas topik tersebut.

A.5.2. Unsigned integers

Perbedaan antara signed dan unsigned adalah pada range value yang ditampung, size-nya sama, hanya angka minimal dan maksimalnya berbeda.

Unsigned di sini maksudnya adalah hanya bisa menampung angka mulai dari 0. Tipe data unsigned tidak bisa menampung angka negatif (jika dipaksa akan memunculkan error).

Berikut list tipe data unsigned integer pada Rust:

Tipe dataDeskripsi
u80 hingga (28)-1
u160 hingga (216)-1
u320 hingga (232)-1
u640 hingga (264)-1
u1280 hingga (2128)-1
usizetipe pointer

Lebih jelasnya tentang tipe data pointer dibahas pada chapter terpisah, Pointer & References

Contoh penerapan unsigned integer:

let numerik4: u32 = 28;
let numerik5: u8 = 16;
let numerik6: u64 = 42;

println!("{} | {} | {}", numerik4, numerik5, numerik6);
// output ==> 28 | 16 | 42

Bisa gunakan tipedata::MIN dan tipedata::MAX untuk mengetahui nilai minimal dan juga maksimal tipe data unsigned integers.

Contoh:

let min_u8 = u8::MIN;
let max_u8 = u8::MAX;

println!("{} | {}", min_u8, max_u8);
// output ==> 0 | 255

Catatan saja, variabel yang dideklarasikan dengan predefined value adalah numerik, by default tipe datanya adalah i32 (signed).

A.5.3. Floating point

Floating point adalah tipe data yang mendukung nilai dibelakang koma, contohnya seperti 3.14. Di Rust ada dua tipe data floating point, yaitu f34 dan f64. Contoh penggunaan:

let fp1: f32 = 3.14;
let fp2: f64 = 3.1415926535;

println!("{} | {:.5}", fp1, fp2);
// output ==> 3.14 | 3.14159

O iya, jumlah digit di belakang koma bisa diatur saat diprint menggunakan println. Caranya dengan menggunakan notasi {:.n}. Sebagai contoh {:.5} maka akan menampilkan hanya 5 digit dibelakang koma.

Dalam penerapan definisi variabel sekaligus nilai, jika nilai dituliskan dalam desimal seperti contohnya 24, maka tipe data variabel penampung adalah numerik.

Jika dituliskan dalam notasi floating point, contohnya 3.14, maka tipe data variabel penampung adalah float.

Bisa gunakan tipedata::MIN dan tipedata::MAX untuk mengetahui nilai minimal dan juga maksimal tipe data floating point.

Contoh:

let min_f32 = f32::MIN;
let max_f32 = f32::MAX;

println!("min_f32={} | max_f32={}", min_f32, max_f32);
// output ==> min_f32=-340282350000000000000000000000000000000 | max_f32=340282350000000000000000000000000000000

Catatan saja, variabel yang dideklarasikan dengan predefined value numerik yang ada titiknya (3.10) adalah floating point, by default tipe datanya adalah f64.

A.5.4. Bool

Tipe data bool menerima dua pilihan nilai saja, true atau false.

let b1 = true;
let b2 = false;

println!("{} | {}", b1, b2);
// output ==> true | false

A.5.5. Char

Tipe char menampung sebuah data (unicode), contohnya seperti 'n', '-', '2'. Penulisan literal untuk tipe ini menggunakan notasi '', diapit tanda petik satu.

let c1 = 'n';
let c2 = '-';
let c3 = '2';

println!("{} | {} | {}", c1, c2, c3);
// output ==> n | - | 2

A.5.6. Pointer scalar

Deklarasi tipe data pointer cukup mudah, yaitu dengan menuliskan deklarasinya seperti biasa tapi ditambahkan karakter &.

let ptr1: &i32 = &24;
println!("{}", ptr1);
// output ==> 24

Perihal apa itu tipe data pointer dan apa kegunaan prefix & akan dibahas pada chapter terpisah, yaitu Pointer & References.

A.5.7. Tipe data primitive compound

Selain beberapa tipe data yang sudah dibahas di atas, ada juga jenis tipe data primitif jenis lainnya, yaitu primitive compound yang di antaranya adalah Array dan Tuple. Lebih detailnya mengenai tipe tersebut dibahas pada chapter terpisah.


Catatan chapter 📑

◉ Source code praktik

github.com/novalagung/dasarpemrogramanrust-example/../tipe_data_primitive_scalar

◉ Chapter relevan lainnya

◉ Referensi