
What is tuple and array?
Aku udah bahas sebenernya dulu di sini tentang tuple dan array. Ternyata ada hal penting yang kena skip, yaitu tentang destrukturisasi dan implementasi copy trait.
Tuple adalah tipe data koleksi yang merupakan kumpulan dari data berformat berbeda atau sama dan array adalah tipe data koleksi dengan format yang harus sama.
Destrukturisasi
1 2 3 4 5 6 7 | let bilangan_acak : (u32, i32, f32) = (129, -234, 245.44456); let ambil_satu_elemen = bilangan_acak.0; let (vpositif, vnegatif) = (bilangan_acak.0, bilangan_acak.1); let (positif, negatif, desimal) = bilangan_acak; |
Kode 1. Tuple
Destrukturisasi tuple sangat mudah dan kita bisa bebas menentukan mana yang akan kita ambil elemennya. Tidak perlu semua elemen diambil, seperti variabel ambil_satu_elemen hanya menggunakan indeks 0 (u32; 129). Variabel selanjutnya secara berurutan mengambil dua elemen dan keseluruhan.
Indeks awal dari bahasa pemrograman umumnya berawal dari 0, berarti nilai indeks untuk bilangan_acak adalah 0 = 129, 1 = -234, dan 2 = 245.44456. bilangan_acak.0 memiliki arti pemanggilan indeks 0 dari variabel bilangan_acak, yaitu 129.
1 | println!("{ } { } { }",ambil_satu_elemen, vpositif, positif ); |
1 2 3 | Finished `dev` profile [unoptimized + debuginfo] target(s) in 5.72s Running `target/debug/hello_world` 129 129 129 |
Kode 2. Output
Kode 2 menunjukan output 3 bilangan yang sama, yaitu 129 karena setiap variabel: ambil_satu_elemen; vpositif; dan positif; menuju pada indeks yang sama, yaitu 0.
1 2 3 4 5 6 7 | let hasil_pemilu: [i32;3] = [1, 1, 2]; let pemilih_pertama =hasil_pemilu[0]; let [vppertama, vpkedua] = [hasil_pemilu[0], hasil_pemilu[1]]; let [ppertama, pkedua, pketiga] = hasil_pemilu; |
Kode 3. Array
Array adalah tipe data koleksi yang mengaruskan format datanya sama, [i32;3] artinya ketiga elemen pada array memiliki tipe i32. Perbedaan tipe akan berujung pada error, maka dari itu jika kita membutuhkan koleksi untuk data berfomat beda, gunakanlah tuple.
1 | println!("{ } { } { }", pemilih_pertama, vppertama, ppertama); |
1 2 3 | Finished `dev` profile [unoptimized + debuginfo] target(s) in 0.45s Running `target/debug/hello_world` 1 1 1 |
Kode 4. Output
Copy trait
Tuple dan array mengimplementasikan copy trait pada beberapa format data seperti ixy, uxy, fxy, isize, usize, tuple, array, dan &str. Khusus pada tuple dan array tidak perlu secara exsplisit #[derive(Copy, Clone)].
1 2 3 4 5 | let test_array: [i32;3] = [1, 1, 2]; let test_tuple : (i32, u32, u32) = (-23, 24, 25); let ambil_array = test_array[0]; let ambil_tuple = test_tuple.0; |
Kode 5. copy trait
Rust menggunakan prinsip borrow dan move untuk manajemen memori. Setiap penggunaan kembali variabel seperti let ambil_tuple = test_tuple.0; berarti melakukan move dan pemanggilan variabel asli test_tuple.0 pada println! tidak bisa dilakukan.
Mengapa pada array dan tuple itu bisa dilakukan? tuple dan array mengimplemetasikan copy trait pada format data ixy, uxy, fxy, isize, usize, tuple, array, dan &str. Nilai dari variabel akan di duplikat pada memori sehingga nilai asli tidak digunakan.
1 | println!("{ }, { }, { }, & { }", test_array[0], ambil_array, test_tuple.0, ambil_tuple); |
1 2 3 | Finished `dev` profile [unoptimized + debuginfo] target(s) in 0.31s Running `target/debug/hello_world` 1, 1, -23, & -23 |
Kode 6. output
Kode 6 bisa tereksekusi dengan lancar karena tuple dan array mengimplementasikan copy trait. Adapun error karena String tidak termasuk implementasi copy trait secara otomatis, kode 7.0.
1 2 3 4 5 6 7 8 | error[E0382]: borrow of moved value: `test_tuple.0` --> src/main.rs:9:65 | 7 | let ambil_tuple = test_tuple.0; | ------------ value moved here 8 | 9 | println!("{ }, { }, { }, & { }", test_array[0], ambil_array, test_tuple.0, ambil_tuple); | ^^^^^^^^^^^^ value borrowed here after move |
Penutup

Leave a comment