Kembali ke seri

Ownership dan borrowing, dengan lembut

Model mental yang membuat Rust klik — dijelaskan tanpa jargon.

Daftar Isi

Kebanyakan kebingungan Rust sebenarnya adalah kebingungan ownership. Pahami satu ide ini, dan borrow checker berubah dari musuh menjadi proofreader.

Ide pokoknya

Setiap nilai punya tepat satu pemilik. Saat pemilik keluar dari scope, nilai di-drop. Anda bisa meminjamkan nilai — secara immutable ke banyak pihak, atau mutable ke tepat satu — tetapi meminjamkan tidak pernah memindahkan kepemilikan.

fn main() {
    let owner = String::from("updeta");

    let read = &owner;      // borrow immutable
    println!("{read}");

    let mut owned = String::from("hi");
    owned.push_str("!");    // pemilik memodifikasi langsung

    takes_ownership(owned); // move: owner tidak lagi valid
}

fn takes_ownership(s: String) {
    println!("{s}");
}

Kenapa penting

Tidak ada use-after-free, tidak ada dangling pointer, tidak ada data race — semuanya diperiksa saat kompilasi, semuanya tanpa biaya runtime.

Tips praktis

  • Mulailah dengan borrow (&T); move (T) hanya saat memang perlu
  • String vs &str: memiliki teksnya, atau menunjuk ke teks yang dimiliki pihak lain
  • Saat compiler komplain, ia sedang menjelaskan masalah lifecycle yang nyata — baca pesannya, sekarang pesannya bagus

Bagian 2 membahas traits dan generics: bagaimana perilaku bersama bekerja tanpa class.