Halo teman-teman semuanya, setelah kita mempelajari tentang borrowing dan references di artikel sebelumnya, kali ini kita akan melanjutkan dengan topik yang sangat sering digunakan dalam pemrograman sehari-hari, yaitu slice dan string di Rust.
Dalam Rust, string adalah salah satu tipe data yang sangat penting karena hampir semua program pasti berurusan dengan teks. Namun berbeda dengan bahasa lain yang biasanya hanya mengenal satu tipe string, di Rust ada beberapa tipe yang perlu kita pahami, khususnya String
dan &str
.
Selain itu, Rust juga memiliki fitur slice, yang memungkinkan kita mengambil sebagian data dari sebuah koleksi tanpa harus memindahkan atau menyalin seluruh nilainya.
Memahami slice dan string dengan baik akan membuat kita lebih percaya diri ketika menulis program Rust, terutama saat bekerja dengan teks dan koleksi. Mari kita bahas satu per satu.
String Slice (&str
)
String slice adalah referensi ke bagian dari string. Tipe ini biasanya digunakan untuk data teks yang sifatnya tidak perlu diubah. String slice ditulis dengan &str
.
fn main() {
let s: &str = "Hello, Rust!";
println!("{}", s);
}
String slice seperti "Hello, Rust!"
biasanya disimpan di memory read-only dan tidak bisa diubah.
Kita juga bisa mengambil sebagian string dengan slice:
fn main() {
let s = String::from("Rustacean");
let bagian = &s[0..4]; // mengambil karakter dari index 0 sampai 3
println!("Slice: {}", bagian);
}
Pada contoh di atas, &s[0..4]
akan menghasilkan "Rust"
.
String (String
)
Tipe String
adalah string yang dimiliki (owned string) dan disimpan di heap. String
bisa berubah panjangnya (mutable).
fn main() {
let mut s = String::from("Hello");
s.push_str(", World!");
println!("{}", s);
}
Dengan String
, kita bisa menambahkan teks baru menggunakan method seperti .push_str
atau .push
.
Perbedaan String
dan &str
&str
adalah referensi (borrowing), biasanya digunakan untuk data teks yang tidak berubah.
String
adalah tipe owned, disimpan di heap, dan bisa dimodifikasi.
Fungsi sering menggunakan &str
sebagai parameter agar lebih fleksibel.
fn greet(name: &str) {
println!("Halo, {}!", name);
}
fn main() {
let nama = String::from("Andi");
greet(&nama); // kirim &String
greet("Budi"); // kirim string literal
}
Fungsi greet
bisa menerima baik String
maupun string literal karena keduanya bisa direferensikan sebagai &str
.
Slice pada Array
Selain string, slice juga bisa digunakan pada array untuk mengambil sebagian data.
fn main() {
let angka = [1, 2, 3, 4, 5];
let potongan = &angka[1..4]; // ambil elemen index 1 sampai 3
for n in potongan {
println!("{}", n);
}
}
Outputnya adalah:
2
3
4
Dengan slice, kita bisa mengambil bagian dari sebuah array tanpa harus menyalin data baru.
Kesimpulan
Pada artikel ini kita sudah membahas tentang slice dan string di Rust. Kita mengenal &str
sebagai string slice yang immutable dan String
sebagai owned string yang bisa dimodifikasi. Kita juga melihat bagaimana slice bisa digunakan untuk mengambil sebagian data dari string maupun array.
Pada artikel berikutnya, kita akan membahas tentang Struct di Rust, yaitu cara mendefinisikan tipe data buatan sendiri yang bisa menyimpan beberapa field sekaligus.
Terima Kasih