Rust programlama dilinde yapıların metodları ve alanları için erişim düzeyi (görünürlük), pub, pub(crate), pub(super) gibi modifikatörler ve modifikatör yokluğu (varsayılan olarak özel) tarafından kontrol edilir.
Rust, bileşenlerin güvenliği ve izolasyonu sağlamak için tasarlanmıştır. Yapıların iç kısımlarına erişimi kontrol etmek, verilerin kapsüllenmesine ve uygulama ayrıntılarının gizlenmesine olanak tanır, yalnızca gerekli arayüzlerin halka açık olmasını sağlar.
Geliştiriciler genellikle bir yapının halka açık olduğu, ancak alanlarının özel kaldığı veya alanların halka açık olmasının, yapı ya da modül görünürlüğünün kısıtlamaları nedeniyle yetersiz olduğu durumlarla karşılaşmaktadır. İç içe seviyeleri anlamak özellikle zordur: halka açık bir iç yapı, iç içe bulunduğu modül gizlenmişse erişilemez ve bunun tersi de geçerlidir.
Rust'ta erişim modifikatörleri yapılar, alanlar ve metodlar için geçerli olup, modüller ve fonksiyonlar için de uygulanır. Aşağıdaki erişim düzeyleri mevcuttur:
pub — öğeyi her yerden erişilebilir hale getirir.pub(crate) — yalnızca mevcut crate içinde erişilebilir.pub(super) — yalnızca üst modülden erişilebilir.Kod örneği:
mod outer { pub struct PublicStruct { pub field: u32, hidden: u32, } pub(crate) struct CrateStruct { pub value: i32, } struct PrivateStruct { pub secret: i32, } pub mod inner { pub(super) struct SuperStruct { pub super_field: u8, } } }
Anahtara özellikler:
Eğer bir yapı pub olarak tanımlanmışsa ve alanları modifikatör olmadan bırakılmışsa, başka bir modülden erişilebilir mi?
Hayır, yalnızca yapı halka açık hale gelir, ama alanları modül içinde özel kalır. Bir alana erişim için, onun da pub olarak tanımlanması gerekir.
Eğer yapı pub(crate) olarak tanımlanmışsa ve içindeki bir alan pub olarak tanımlanmışsa, ne olur?
Görünürlük, yapının kendisiyle sınırlıdır. Alan pub olsa bile, yapı erişilemediğinden alanına erişim sağlanamaz.
pub(crate) struct Secret { pub data: i32, // pub "pub(crate)" üzerinden erişilemez }
Bir yapıyı özel bir modül içinde pub olarak tanımlayıp dışarıdan ona erişmek mümkün mü?
Hayır. Nihai görünürlük, yapı ile modül arasındaki minimum değerle belirlenir. Modül özel ise, içindeki yapılar ve fonksiyonlar da bu modülün dışına görünmez.
pub ile yapının görünürlüğünü açmakProjede tüm yapı halka açık ve alanlar açık olarak tasarlanmış, geliştirme hızlandırılmıştır. Daha sonra alanlara doğrudan erişim sağlandığı için geriye dönük uyumluluk ve erişim kontrolü sağlamak zorlaşmıştır.
Artılar:
Eksiler:
Halka açık bir yapı, özel alanlar ve halka açık kurucu/erişim yöntemleri ile tasarlanmıştır. Yapı yalnızca gerekli modül seviyesinde dışa aktarılmaktadır.
Artılar:
Eksiler: