Rust egalik (ownership)


ULASHISH

Egalik (ownership)

Rust xotirani xavfsiz boshqarish uchun "egalik" (ownership) tizimidan foydalanadi.

Rustdagi har bir qiymatning egasi (owner) bor. Odatda ega - bu o‘zgaruvchi.


Egalik qoidalari

  • Har bir qiymatning bitta egasi bo‘ladi
  • Ega ko‘rinish sohasidan chiqqanda, qiymat o‘chiriladi
  • Bir vaqtning o‘zida faqat bitta ega bo‘lishi mumkin, agar siz qiymatni borrow qilmasangiz (bu keyingi bobda ko‘rib chiqiladi)

Egalikka oddiy misol

Ushbu misolda stringning egasi a. Keyin biz uni b ga ko‘chiramiz (move):

Misol

let a = String::from("Hello"); let b = a; // println!("{}", a); Error: a no longer owns the value println!("{}", b); // Ok: b now owns the value
O‘zingiz sinab ko‘ring »

a ni b ga tayinlaganimizda, egalik ko‘chadi (move). Bu endi qiymatdan faqat b foydalana olishini anglatadi, chunki a endi yaroqsiz.

Lekin sonlar, belgilar va boolean qiymatlar kabi oddiy tiplar ko‘chirilmaydi, balki nusxalanadi (copy).

Bu shuni anglatadiki, asl o‘zgaruvchini boshqasiga tayinlaganingizdan keyin ham undan foydalanishingiz mumkin:

Misol

let a = 5; let b = a; println!("a = {}", a);  // Works println!("b = {}", b);  // Works
O‘zingiz sinab ko‘ring »

Bu yerda a b ga ko‘chirilmaydi, balki nusxalanadi, shuning uchun b dan hamon foydalanishingiz mumkin.



Klonlash (clone)

String kabi boshqa tiplarda, agar asl qiymatni saqlab qolgan holda uni boshqa o‘zgaruvchiga ham tayinlashni istasangiz, ma’lumotlarning nusxasini yaratadigan .clone() metodidan foydalanishingiz mumkin:

Misol

let a = String::from("Hello"); let b = a.clone(); // Now both have the same value println!("a = {}", a);  // Works println!("b = {}", b);  // Works
O‘zingiz sinab ko‘ring »

Biroq, agar qiymatga ikki marta egalik qilish shart bo‘lmasa, odatda klonlashdan ko‘ra reference (&) ishlatgan ma’qul. Bu haqda keyingi bobda batafsil bilib olasiz.


Egalik nega muhim

  • Rust egalik yordamida xotira endi kerak bo‘lmaganda uni avtomatik ravishda bo‘shatadi
  • U allaqachon o‘chirilgan xotiradan foydalanish kabi xatolarning oldini oladi
  • Bu Rust shunchalik xavfsiz va tez bo‘lishining sabablaridan biri

Keyingi mavzu: Borrowing bilan tanishing - dasturingizning boshqa qismlari qiymatga egalik qilmasdan undan qanday foydalanishi mumkinligini bilib oling.


W3Schools Pathfinder

Yutuqlaringizni kuzating – bu bepul!