Rust egalik (ownership)
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!
