Rust

Rust — مالکیت (Ownership)

آخرین بروزرسانی: 1404/08/14

مالکیت (Ownership)

«مالکیت در راست» یعنی هر مقدار یک «صاحب» دارد. وقتی صاحب از دامنه بیرون برود، مقدار پاک می شود. این روش، مدیریت حافظه (Memory) را امن و سریع می کند.

قوانین مالکیت

1) هر مقدار فقط یک صاحب دارد. 2) با پایان دامنه، مقدار پاک می شود. 3) می توانی موقتاً امانت بدهی؛ این را «ارجاع/قرض» می گویند و بعداً می بینیم.

مثال پایه: جابه جایی مالکیت (Move)

وقتی یک String را به متغیر دیگر بدهی، مالکیت «منتقل» می شود. متغیر قبلی دیگر معتبر نیست.

fn main() {
  let a = String::from("Hello");
  let b = a;
  // println!("{}", a); // خطا: a دیگر مالک نیست
  println!("{}", b);
}

مشاهده در ادیتور

انواع کپی پذیر (Copy)

اعداد، کاراکترها و بولین ها معمولاً «کپی» می شوند، نه جابه جا. پس هر دو متغیر قابل استفاده اند.

fn main() {
  let a = 5;
  let b = a;
  println!("a = {}", a);
  println!("b = {}", b);
}

مشاهده در ادیتور

نگه داشتن هر دو مقدار: clone

اگر واقعاً هر دو متغیر باید صاحب داده باشند، از .clone() استفاده کن؛ یک کپی عمیق می سازد.

fn main() {
  let a = String::from("Hello");
  let b = a.clone();
  println!("a = {}", a);
  println!("b = {}", b);
}

مشاهده در ادیتور

گام های تمرین

  1. یک String بساز و به متغیر دوم بده.
  2. سعی کن متغیر اول را چاپ کنی و خطا را ببین.
  3. همان کار را با عدد انجام بده و تفاوت را ببین.
  4. با .clone() هر دو مقدار را نگه دار.

جمع بندی سریع

  • هر مقدار یک صاحب دارد.
  • خروج از دامنه، پاک سازی خودکار است.
  • String با انتساب «منتقل» می شود.
  • اعداد معمولاً «کپی» می شوند.
  • .clone() کپی عمیق می سازد.

برای متن ها، صفحه رشته ها را ببین. بعد، «قرض دادن» را در ارجاع و قرض یاد بگیر. همچنین راهنمای مالکیت در راست را نشانه گذاری کن.